Назад | Перейти на главную страницу

Сохранение информации о владельце файла и группе Linux в многопользовательской системе

У меня есть веб-приложение, работающее в Linux (с использованием CentOS 6), использующее общее имя пользователя без полномочий root, например app1. Я связал все файлы в папке / home / app1 с этим пользователем / группой (используя chown -R app1: app1), чтобы он мог обслуживать веб-страницы и при необходимости записывать в журналы. Когда дело доходит до обновлений, я пытаюсь понять, как обрабатывать разрешения, чтобы мне не приходилось постоянно запускать команду chown в каталоге / home / app1. Требуется войти на сервер с уникальным идентификатором, поэтому, если devguy1 входит в систему и копирует обновление, файлы, которые он написал, теперь имеют devguy1 в качестве владельца и группы, и app1 не сможет прочитать новый файл. Devguy1 является частью группы app1, поэтому они могут обновлять приложение, но не наоборот. Я вижу, что есть способ скопировать файлы с помощью cp -p, который сохранит разрешения, но обычно мы используем Beyond Compare для перемещения обновлений с нашего сервера Dev в производственную среду, где такой возможности нет. Есть ли параметр в родительской папке, который может заставить файл хранить информацию о владельце / группе app1, или есть способ, чтобы при создании нового пользователя я мог добавить app1 в их группу?

Другой вариант, который не совсем то, о чем вы просите, - это использовать средство ACL posix.

Вот пример, который я использую для поддержки разрешений в структуре на основе локальной группы в дополнение к собственному идентификатору пользователя:

# Do this once or occasionally, but only cosmetic
chown -R network:network /local/network

setfacl -R -m user:network:rwx /local/network
setfacl -R -dm user:network:rwx /local/network

setfacl -R -m group:it-neteng-users:rwx /local/network
setfacl -R -dm group:it-neteng-users:rwx /local/network

На очень старых ядрах вам может потребоваться смонтировать файловую систему с параметром acl, чтобы это было доступно, но это не обязательно для чего-либо достаточно современного.

В вашем случае вы, вероятно, захотите использовать acl'ing, чтобы разрешить веб-серверу читать файлы, тогда право собственности на самом деле не имеет значения.

Установите биты setuid и setgid для всех каталогов в / home / app1:

find /home/app1 -type d -exec chmod ug+s '{}' +

(Видеть man find чтобы узнать о команде поиска и man chmod чтобы узнать о битах setuid и setgid.) Это приводит к сохранению владельцев пользователей и групп при создании новых файлов и каталогов в любом из существующих каталогов.

Я считаю, что есть случаи, когда биты suid и sgid по-прежнему игнорируются, например, сохранение в общие ресурсы SMB или копирование с сохраненными разрешениями с использованием cp -p. Но по большей части это должно работать.