如何完全控制umask / PAM /权限?


11

//更新于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的新旧错误:

所以我不知道该相信什么了。我应该放弃吗?将ACL解决我的所有问题?还是我在使用Ubuntu时再次遇到问题?

使用tar备份时要小心。Red Hat / Centos发行版在tar程序中支持ACL,但是Ubuntu在备份时不支持ACL。这意味着在创建备份时所有acl都会丢失。

如果这也可以解决我的问题,我非常愿意升级到Ubuntu 10.04,但是首先我想了解发生了什么。

Answers:


3

这里可能发生了很多事情。

首先的想法:

  • 是的,pam.d更改将立即生效
  • /etc/pam.d/common-session 是设置默认值的最佳位置 umask
  • 任何pam.d umask都将被中的任何条目覆盖.bashrc
    .bashrc仅在某些情况下才被读取(交互式,非登录外壳)
  • testfile (711) 很奇怪
    • 如何/home安装,您是否使用ACL?
      (例如做什么ls -ld /homegetfacl /home打印?)
    • 的确testfile已经存在你做的副本之前,因为scp不会更改文件的权限已经存在(除非你用-p标志)
  • Nautilus以不同的方式创建文件,不确定原因或规则是什么
  • umask=0113 可能会引起问题
  • 服务器和客户端运行相同的操作系统吗?
    例如,如果客户端启用了ACL或为Cygwin,则行为可能会有所不同
  • 强制执行合理权限的最佳方法是使用默认ACL,这恰恰是因为您发现umask用户可以在.bashrc和中覆盖它们.bash_profile

更新:

  • umask=0113 因为sshfs是错误的。
    1. 尝试安装时不指定 umask
    2. 使用在挂载点内创建一个新文件touch
    3. 您应该看到它只会得到例如-rw-r--r--,而没有x
    4. 通过屏蔽x位,您可能会破坏目录,
      并且编译器可能无法正确创建可执行文件

解决方法:

如果我们想不出更好的方法,则可以使用famgamin监视正在创建的新文件并修复其权限,甚至可以使用一个定期运行并设置所有文件权限的脚本。


谢谢!好,所以我删除了除pam.d / common-sessions之外的所有 umask设置。这样解决了几个问题!测试1(SCP)和测试4(Nautilus中的新文件)现在可以正常工作。障碍现在正在将Nautilus中具有任何权限的文件复制到服务器(测试3-仍然是777,而不是664)。和目录问题。服务器和客户端都是Ubuntu(虽然是9.10和10.10),并且没有启用其他ACL。

听起来像用Nautilus复制正在保留类似cp -pscp -p那样的权限。
Mikel

任何想法如何改变这个?

你想要什么行为?您可以使用默认ACL为新文件设置默认权限。Nautilus将采用默认的ACL。见vanemery.com/Linux/ACL/linux-acl.html的概述和suse.de/~agruen/acl/linux-acls/online的所有细节。
Mikel

请注意,默认ACL不会强制执行最大权限集,它们只是将这些权限设置为默认权限。 cp -p,,scp -p和通过Nautilus复制仍然会尝试使副本的权限与要复制的文件相同。
Mikel

0

这与PAM / umask不相关,但是对您可能有用。

如果您setgid程序的目录,然后将所有文件和里面创建的目录会自动分配给它的组。

root@ricarda ~ # mkdir hello      
root@ricarda ~ # chown :users hello 
root@ricarda ~ # chmod g+s hello
root@ricarda ~ # ls -l |grep hello 
drwxr-sr-x. 2 root users  4096 Feb  7 04:05 hello
root@ricarda ~ # touch hello/some_file
root@ricarda ~ # mkdir hello/some_dir
root@ricarda ~ # ls -l hello/       
total 4
drwxr-sr-x. 2 root users 4096 Feb  7 04:16 some_dir
-rw-r--r--. 1 root users    0 Feb  7 04:06 some_file

谢谢!我对此一无所知。它不能解决权限问题,但确实有用!


0

ACL应该适合您。

在该组的所有文件夹上设置默认ACL,然后所有以后的文件和目录都将继承该默认ACL。

类似的东西setfacl -m d:g:uploaders:rwx应该起作用。

要解决您现有的权限,请执行以下操作:

find /shared/folder -type d -exec setfacl -m d:g:uploaders:rwx {} \;
find /shared/folder -type f -exec setfacl -m g:uploaders:rw {} \;

看起来,如果在复制文件时设置了“保留”,则默认ACL不起作用。在那种情况下,我只能建议在cron中运行find命令或监视文件系统的更改。

By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.