12 permissions ssh sftp pam umask
// 2 月 8 日更新 - 简要说明未决问题:
我们的情况
我们公司的几个人登录到服务器并上传文件。他们都需要能够上传和覆盖相同的文件。他们有不同的用户名,但都属于同一个组。但是,这是一个 Internet 服务器,因此“其他”用户应该(通常)只有只读访问权限。所以我想要的是这些标准权限:
文件:664
目录:771
我的目标是所有用户都不需要担心权限。服务器的配置方式应使这些权限适用于所有新创建、复制或覆盖的文件和目录。只有当我们需要一些特殊权限时,我们才会手动更改它。
我们通过 Nautilus 中的 SFTP-ing 将文件上传到服务器,通过使用 sshfs 挂载服务器并在 Nautilus 中访问它,就像它是本地文件夹一样,以及通过命令行中的 SCP-ing。这基本上涵盖了我们的情况和我们的目标。
现在,我已经阅读了很多关于美丽的 umask 功能的内容。据我所知,umask(与 PAM 一起)应该允许我做我想做的事:为新文件和目录设置标准权限。然而,经过许多小时的阅读和反复试验,我仍然没有让它起作用。我得到了许多意想不到的结果。我真的很想深入了解 umask 并且有很多问题没有得到解答。我将在下面发布这些问题,以及我的发现和对导致这些问题的试验的解释。鉴于很多事情似乎都出错了,我认为我做错了几件事。因此,有很多问题。
注意:我使用的是 Ubuntu 9.10,因此无法更改 sshd_config来设置 SFTP 服务器的 umask。已安装 SSH OpenSSH_5.1p1 Debian-6ubuntu2 < 需要 OpenSSH 5.4p1。那么问题来了。
1. 我是否需要重新启动 PAM 更改才能生效?
让我们从这个开始。涉及的文件太多了,我无法弄清楚什么会影响,什么不会影响,也因为我不知道是否必须重新启动整个系统才能使 PAM 更改生效。我在没有看到预期的结果后这样做了,但这真的有必要吗?或者我可以从服务器注销并重新登录,新的 PAM 策略是否有效?或者是否有一些“PAM”程序可以重新加载?
2. 是否有一个单一的文件可以影响所有会话的所有用户?
所以我最终更改了许多文件,因为我阅读了许多不同的东西。我最终在以下文件中设置了 umask:
~/.profile -> umask=0002
~/.bashrc -> umask=0002
/etc/profile -> umask=0002
/etc/pam.d/common-session -> umask=0002
/etc/pam.d/sshd -> umask=0002
/etc/pam.d/login -> umask=0002
Run Code Online (Sandbox Code Playgroud)
我希望此更改适用于所有用户,因此最好进行某种系统范围的更改。可以实现吗?
3. 毕竟,这个 UMASK 的东西,它有效吗?
因此,在每个可能的地方将 umask 更改为 0002 后,我运行了测试。
------------SCP-----------
测试 1:
scp testfile (which has 777 permissions for testing purposes) server:/home/
testfile 100% 4 0.0KB/s 00:00
Run Code Online (Sandbox Code Playgroud)
让我们检查权限:
user@server:/home$ ls -l
total 4
-rwx--x--x 1 user uploaders 4 2011-02-05 17:59 testfile (711)
Run Code Online (Sandbox Code Playgroud)
更新:仅通过在 pam.d/common-sessions 中设置 umask 来修复(见评论)
---------SSH---------
测试 2:
ssh server
user@server:/home$ touch anotherfile
user@server:/home$ ls -l
total 4
-rw-rw-r-- 1 user uploaders 0 2011-02-05 18:03 anotherfile (664)
Run Code Online (Sandbox Code Playgroud)
--------SFTP-----------
鹦鹉螺:sftp://server/home/
将新文件从客户端复制并粘贴到服务器(客户端上的 777)
测试 3:
user@server:/home$ ls -l
total 4
-rwxrwxrwx 1 user uploaders 3 2011-02-05 18:05 newfile (777)
Run Code Online (Sandbox Code Playgroud)
通过 Nautilus 创建一个新文件。检查终端中的文件权限:
测试 4:
user@server:/home$ ls -l
total 4
-rw------- 1 user uploaders 0 2011-02-05 18:06 newfile (600)
Run Code Online (Sandbox Code Playgroud)
我的意思是……这里发生了什么?!我们每次都应该得到 644。相反,我得到 711、777、600,然后是一次 644。而且 644 仅在通过 SSH 创建新的空白文件时实现,这是最不可能的情况。
所以我问,umask/pam 到底能不能用?
更新:通过仅在 pam.d/common-sessions 中设置 umask 来修复测试 4(见评论)
4. UMASK SSHFS 是什么意思?
有时我们使用 sshfs 在本地挂载服务器。很有用。但同样,我们有权限问题。
这是我们的挂载方式:
sshfs -o idmap=user -o umask=0113 user@server:/home/ /mnt
Run Code Online (Sandbox Code Playgroud)
注意:我们使用 umask = 113 是因为显然 sshfs 从 777 开始而不是 666,所以使用 113 我们得到 664,这是所需的文件权限。
但现在发生的情况是,我们看到所有文件和目录都好像是 664。我们在 Nautilus 中浏览到 /mnt 并:
所以让我们检查命令行:
user@client:/mnt$ ls -l
total 8
-rw-rw-r-- 1 user 1007 3 Feb 5 18:05 copyfile (664)
-rw-rw-r-- 1 user 1007 0 Feb 5 18:15 newfile (664)
drw-rw-r-- 1 user 1007 4096 Feb 5 18:15 newfolder (664)
Run Code Online (Sandbox Code Playgroud)
但是,嘿,让我们检查服务器端的同一个文件夹:
user@server:/home$ ls -l
total 8
-rwxrwxrwx 1 user uploaders 3 2011-02-05 18:05 copyfile (777)
-rw------- 1 user uploaders 0 2011-02-05 18:15 newfile (600)
drwx--x--x 2 user uploaders 4096 2011-02-05 18:15 newfolder (711)
Run Code Online (Sandbox Code Playgroud)
什么?!REAL 文件权限与我们在 Nautilus 中看到的非常不同。那么 sshfs 上的这个 umask 是否只是创建了一个显示虚幻文件权限的“过滤器”?我试图从另一个用户打开一个文件,但同一个组有 600 个真正的权限,但有 644 个“假”权限,但我仍然无法读取这个文件,那么这个过滤器有什么用?
5. UMASK 是关于文件的。但是目录呢?
从我的测试中,我可以看到正在应用的 umask 也会以某种方式影响目录权限。但是,我希望我的文件是 664 (002),我的目录是 771 (006)。那么是否可以为目录使用不同的 umask?
6. 也许 UMASK/PAM 真的很酷,但 UBUNTU 只是有问题?
一方面,我阅读了在 PAM/UMASK 和 Ubuntu 上取得成功的人的主题。另一方面,我在 Ubuntu 上发现了许多关于 umask/PAM/fuse 的新旧错误:
所以我不知道该相信什么了。我应该放弃吗?将ACL解决我的所有问题?或者我在使用 Ubuntu 时又遇到了问题?
使用 tar 进行备份时需要注意的一点。Red Hat /Centos 发行版在 tar 程序中支持 acls,但 Ubuntu 在备份时不支持 acls。这意味着创建备份时所有 acl 都将丢失。
如果这也能解决我的问题,我非常愿意升级到 Ubuntu 10.04,但首先我想了解发生了什么。
这里可能会发生很多事情。
第一个想法:
/etc/pam.d/common-session
是设置默认值的最佳位置umask
.bashrc
,.bashrc
仅在某些情况下被读取(交互式、非登录 shell)testfile (711)
很奇怪
/home
安装?您是否使用 ACL?ls -ld /home
和getfacl /home
打印?)testfile
在进行复制之前已经存在,因为不会scp
更改已存在的文件的权限(除非您使用该-p
标志)umask=0113
可能会引起问题umask
中的用户覆盖。.bashrc
.bash_profile
更新:
umask=0113
对于 sshfs 是错误的。
umask
touch
。 -rw-r--r--
,没有x
位 x
位,您可能会破坏目录解决方法:
如果我们想不出更好的办法,您可以使用fam
或gamin
监视正在创建的新文件并修复它们的权限,甚至只是定期运行并设置所有文件权限的脚本。
归档时间: |
|
查看次数: |
16356 次 |
最近记录: |