如果我以 root 用户身份从本地 ssh 到我们的 unix 服务器...并在虚拟服务器 Web 根目录中创建文件,我如何确保在该文件夹内创建的文件和文件夹始终具有不同的用户/组作为所有者而不是 root?
或者有什么方法可以在通过 root 登录上传文件后运行命令...以便该文件夹中的所有文件都具有与父目录相同的用户/组?
答案1
您无法强制所有权,但可以强制组。为此,请将目录的组设置为您选择的组,然后设置组粘性位。例如,如果组是web
,目录是,/www/primary
那么您可以执行以下操作:
chgrp web /www/primary
chmod g+s /www/primary
人们的umask
设置仍然会控制权限设置。
答案2
新创建的文件始终归创建它的用户和(默认情况下)其所属的组所有。
但是,如果你setgid
在父目录上设置了访问权限标志,那么在其下创建的新文件和子目录将继承父目录的 groupID。
例如:
~$ sudo addgroup testing
Adding group `testing' (GID 1001) ...
Done.
~$ mkdir dir
~$ chown :testing dir/ # Change owner to group "testing"
~$ chmod g+s dir/ # Set the setgid flag
~$ ls -ld dir/
drwxr-sr-x 2 root testing 4096 2010-10-19 04:20 dir/
如果您现在(以 root 身份)在 dir/ 目录下创建一个新文件,则它将由用户 root 和组 testing 所有,而不是由用户 root 和组 root 所有:
~$ touch dir/file
~$ ls -l dir/file
-rw-r--r-- 1 root testing 0 2010-10-19 04:46 dir/file
你可能想看看umask命令也是如此。