Как работают разрешения для сервисов в Linux? Я уже знаю, что могу установить разрешения на read
, write
и execute
для файлов и каталогов с помощью chmod
каждый для owner
, group
и other users
но как разрешения работают для работающей службы? Как узнать, какие разрешения имеет служба для определенных файлов / каталогов?
1 ответ
Сервис связан с обычными ограничениями разрешений. Все зависит от того, от какого пользователя работает служба. Сервисы - это просто обычные процессы, которые всегда работают.
Например,
$ ps aux | grep apache2 root 2845 0.0 0.2 75596 4508 ? Ss Sep06 0:19 /usr/sbin/apache2 -k start www-data 25608 0.0 0.1 74428 2232 ? S Sep09 0:00 /usr/sbin/apache2 -k start www-data 25609 0.0 0.1 75596 2288 ? S Sep09 0:02 /usr/sbin/apache2 -k start www-data 25610 0.0 0.4 2003664 8436 ? Sl Sep09 0:37 /usr/sbin/apache2 -k start www-data 25611 0.0 0.4 2003788 8584 ? Sl Sep09 0:36 /usr/sbin/apache2 -k start www-data 25700 0.0 0.4 2003648 8528 ? Sl Sep09 0:36 /usr/sbin/apache2 -k start
Вы можете видеть, что сервис запущен как пользователем root
и www-data
. Apache использует root
процесс только для привязки к порту 80 (или любому другому порту, который вы настроили). Напомним, что привязка к портам <1024 требует, чтобы вы были пользователем root.
Однако в целях безопасности Apache передает всю обработку запросов процессам, выполняющимся как www-data
. Что эти процессы могут получить, зависит от вас. Если ваши права доступа к файлам в корне документа не позволяют www-data
обращаться к файлам, Apache не сможет их обслуживать.
Это то же самое для любой услуги; как правило, они имеют
- Процесс, выполняющийся от имени пользователя
root
(если они должны связываться с портом <1024; не все службы имеютroot
процесс), который делегирует задачи менее привилегированному пользователю - Процесс, запущенный от имени созданного ими пользователя (
bind
для BIND,www-data
для Apache,proftpd
для proftpd и т.д.). Имейте в виду, что их имена различаются в зависимости от системы (Apache иногда работает какapache
илиapache2
вместоwww-data
).
Однако некоторые процессы выполняются как nobody
а не как отдельный пользователь. Это может быть плохой идеей, но это зависит от процесса и того, что он делает.
Это просто общие правила; некоторые процессы даже запускаются полностью как root (например, sshd
, хотя он будет использовать пользовательский процесс при подключении). Используйте ps aux
чтобы увидеть, под каким пользователем запущен процесс.