Давайте предположим, что у меня есть сервер веб-хостинга, работающий в моей системе Ubuntu 13.04. Для каждого покупателя, который хочет разместить веб-сайт на своем сервере, я создаю пользователя и добавляю его в группу под названием «клиенты». Все эти клиенты получают личную папку в моей папке /home/
, в которой есть дерево папок, которое не должно быть удалено. Скажем так, одного из моих клиентов зовут Боб. Он получит /home/bob/
в качестве своей личной папки, но эта папка также должна содержать дерево папок, например:
/home/bob/
|
|-> /www/
|
|-> /bobsdomain.com/
| |
| |-> /public_html/
| |-> /cgi_bin/
|
|-> /bobsotherdomain.com/
|
|-> /public_html/
|-> /cgi_bin/
Боб, очевидно, должен быть владельцем /home/bob
, потому что иначе Боб не смог бы создать удалить файлы и папки внутри своей домашней папки. Тем не менее, все между /www/
и /public_html/
или /cgi_bin/
никогда не должно быть удалено. Все от /public_html/
или /cgi_bin/
и ниже должно быть выбором Боба, хочет он удалить это или нет.
Чтобы сделать это, могу ли я просто установить папки между /www/
и /public_html/
или /cgi_bin/
как свойство root, или это приведет к тому, что bob не сможет добавить файлы в /public_html/
и /cgi_bin/
папки?
Если это невозможно, каким другим способом я должен это сделать?
Я нашел ответ на свой вопрос. Я разбил папки, которые я не хотел удалять, в root: root, а затем изменил эти папки, используя « sticky bit » (1775 вместо 0775). Таким образом, каждый может добавлять файлы и папки через ftp по своему усмотрению, но они не могут удалить папки, которые я защищал с помощью залипающего бита, так как для этого вам нужно быть владельцем файла или папки.
Вы были на правильном пути. Если Вы хотите предотвратить действия как создание файла и удаление (включая удаление каталогов) затем, у пользователя не может быть доступа для записи к родительской папке. В этом случае, для сохранения /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