//更新于2月8日-简短的未解决问题:
- 如何用与文件不同的方式屏蔽目录?
- 如何在Nautilus复制/粘贴上屏蔽?
- 如何为SSHFS设置umask?
我们的情况
我们公司的几个人登录到服务器并上传文件。他们都需要能够上传和覆盖相同的文件。他们具有不同的用户名,但都属于同一组。但是,这是一个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
我希望此更改适用于所有用户,因此最好在系统范围内进行某种更改。可以实现吗?
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
让我们检查权限:
user@server:/home$ ls -l
total 4
-rwx--x--x 1 user uploaders 4 2011-02-05 17:59 testfile (711)
更新:通过仅在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)
-------- 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)
通过Nautilus创建一个新文件。在终端中检查文件权限:
测试4:
user@server:/home$ ls -l
total 4
-rw------- 1 user uploaders 0 2011-02-05 18:06 newfile (600)
我的意思是……这里发生了什么事?我们应该每次获得644。相反,我得到711、777、600,然后得到644。只有在通过SSH创建新的空白文件时才实现644,这是最不可能的情况。
所以我问,umask / pam到底能起作用吗?
更新:通过仅在pam.d / common-sessions中设置umask来修复测试4(请参阅注释)
4.那么UMASK SSHFS有什么意义呢?
有时我们使用sshfs在本地安装服务器。很有用。但是同样,我们还有权限问题。
这是我们的安装方式:
sshfs -o idmap=user -o umask=0113 user@server:/home/ /mnt
注意:我们使用umask = 113,因为显然,sshfs从777开始而不是666,所以使用113可以得到664,这是所需的文件许可权。
但是现在发生的是,我们看到的所有文件和目录都好像是664。我们在Nautilus中浏览到/ mnt并:
- 右键单击->新建文件(newfile)--- 测试5
- 右键单击->新建文件夹(newfolder)--- 测试6
- 从本地客户端复制并粘贴777文件--- 测试7
因此,让我们在命令行中进行检查:
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)
但是,让我们在服务器端检查该文件夹:
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)
什么?!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的新旧错误:
- https://bugs.launchpad.net/ubuntu/+source/gdm/+bug/241198
- https://bugs.launchpad.net/ubuntu/+source/fuse/+bug/239792
- https://bugs.launchpad.net/ubuntu/+source/pam/+bug/253096
- https://bugs.launchpad.net/ubuntu/+source/sudo/+bug/549172
- http://bugs.debian.org/cgi-bin/bugreport.cgi?bug=314796
所以我不知道该相信什么了。我应该放弃吗?将ACL解决我的所有问题?还是我在使用Ubuntu时再次遇到问题?
使用tar备份时要小心。Red Hat / Centos发行版在tar程序中支持ACL,但是Ubuntu在备份时不支持ACL。这意味着在创建备份时所有acl都会丢失。
如果这也可以解决我的问题,我非常愿意升级到Ubuntu 10.04,但是首先我想了解发生了什么。