Общий хостинг, остановить пользователя, удаляющего файл.html?
Привет, ребята. Я создал небольшой общий хостинг для друзей.
Я установил права доступа к файлу chmod
chmod 711 /home
chmod 711 /home/testuser
chmod 755 /home/testuser/public_html
chmod o+r /home/testuser/public_html/index.htm
Как мне остановить пользователя, подключенного к его собственному ftp, от удаления файла html.htm, а также с общедоступным каталогом, установленным в chmod 755. Я обнаружил, что он ничего не может сделать в каталоге, например, загрузить / удалить?
Дополнительная информация: Я бегал
setsebool -P httpd_enable_homedirs true
chcon -R -t httpd_sys_content_t /home/testuser/public_html
но никакого эффекта?
3 ответа
Традиционные разрешения Unix означают, что если пользователь может создавать файлы в каталоге, он также может удалять файлы в нем - даже если сам файл защищен от чтения и не принадлежит им. Таким образом, вы не можете защитить html.htm
(что бы это ни было), если он находится в каталоге, он должен иметь доступ на запись / выполнение. Возможно, ACL могут помочь, как предполагает @vonbrand (но я не знаком с ними, и @vonbrand не обещает, что это сработает).
Нет необходимости делать каталог глобально доступным для записи или глобально исполняемым, но вам нужно убедиться, что ваш демон веб-сервера имеет доступ для чтения к файлам. (Вероятно, работает как группа
www-data
- но проверить). Поэтому убедитесь, что владелец каталога соответствует uid, который пользователь получает при подключении, и вы можете оставить его в режиме 750.Если вам нужно разрешить нескольким uid записывать в один и тот же каталог, вам нужно включить доступ для групповой записи (
g+w
). В этом случае я бы использовал группу, отличную отwww-data
и предоставьте доступ только для чтения Apache как "другие". Другими словами, режим 775.Также следите за
umask
, который управляет разрешениями новых файлов, созданных пользователями. Если у вас есть индивидуальные учетные записи, используйте umask022
чтобы соответствовать. Если у вас есть общий каталог группы, используйте umask002
чтобы позволить пользователям редактировать файлы друг друга. (Так как они смогут удалять и заменять файлы, нет смысла их защищать).
К кому подключается пользователь? Как вы настроили, только владелец может писать в public_html.
Кроме того, в настоящее время он настроен так, что пользователи могут войти /home/testuser
но не читать это. Вы можете захотеть что-то вроде:
chmod 711 /home
chmod 755 /home/testuser
chmod 777 /home/testuser/public_html
chmod 644 /home/testuser/public_html/index.htm
chown root /home/testuser/public_html/index.htm
Ищите ACL, которые могут решить вашу проблему. Соответствующими ручными записями являются acl(5), setfacl(1) и getfacl(1). Однако поддержка зависит от файловой системы.