假设我的 ubuntu 13.04 系统上运行着一个网站托管服务器。对于每个想要在我的服务器上托管网站的客户,我都会创建一个用户并将其添加到名为“客户”的组中。所有这些客户都会在我的/home/
文件夹中获得一个私人文件夹,其中有一个不应删除的文件夹树。假设我的一位客户名叫 bob。他将获得/home/bob/
他的私人文件夹,但该文件夹还应包含如下文件夹树:
/home/bob/
|
|-> /www/
|
|-> /bobsdomain.com/
| |
| |-> /public_html/
| |-> /cgi_bin/
|
|-> /bobsotherdomain.com/
|
|-> /public_html/
|-> /cgi_bin/
显然,Bob 应该是 的所有者,/home/bob
因为否则 Bob 就无法在其主文件夹中创建或删除文件和文件夹。但是,/www/
和 或/public_html/
之间的所有内容/cgi_bin/
都不应被删除。/public_html/
或/cgi_bin/
及以下的所有内容都应由 Bob 选择是否删除。
为了做到这一点,我是否可以将/www/
和/public_html/
或之间的文件夹设置/cgi_bin/
为 root 的属性,或者这是否会导致 bob 无法将文件添加到/public_html/
和/cgi_bin/
文件夹?
如果这不可能,我还应该用什么其他方式来做到这一点?
答案1
我找到了问题的答案。我将不想删除的文件夹的所有者更改为 root:root,然后使用 chmod 命令修改这些文件夹的权限,如下所示:粘性位'(1775 而不是 0775)。这样,每个人都可以通过 ftp 随意添加文件和文件夹,但他们无法删除我用粘滞位保护的文件夹,因为您必须是文件或文件夹所有者才能执行此操作。
答案2
您说得对。如果您想阻止文件创建和删除(包括删除目录)等操作,则用户不能对父文件夹具有写访问权限。在这种情况下,要保留/home/<user>/www/<domain>/public_html
和/home/<user>/www/<domain>/cgi_bin
,用户不能对具有写访问权限/home/<user>/www/<domain>
。为此,域目录应由其他人拥有,并且不可由任何人写入。请注意,它root
也不必是:nobody
用户应该没问题。
/home/bob
`-- [drwxrwxr-x bob ] www
|-- [drwxrwxr-x nobody ] bobsdomain.com
| |-- [drwxrwxr-x bob ] cgi_bin
| `-- [drwxrwxr-x bob ] public_html
`-- [drwxrwxr-x nobody ] bobsotherdomain.com
|-- [drwxrwxr-x bob ] cgi_bin
`-- [drwxrwxr-x bob ] public_html