В моем сценарии мне нужно, чтобы каталог «httpd» в «/var/log/» был доступен для чтения пользователям в группе «devs» (Amazon Linux 2). Может ли кто-нибудь подсказать, как этого добиться?
У нас есть несколько разработчиков, которые обслуживают систему, и я хочу, чтобы они могли легко читать файлы журналов в /var/log/httpd без необходимости иметь права root.
может ли это помочь?
chmod -R go+r /var/log/httpd
илиchmod -R go+rX /var/log/httpd
или мне нужно пойти с:
chmod 644 /var/log/httpd
chgrp -R apache /var/log/httpd
chmod 02750 /var/log/httpd
chmod 0640 /var/log/httpd/*
create 0640 root apache
лс
[root@ip-10-0-10-165 httpd]# ls -la
total 48
drwx------ 19 root devs 4096 Apr 3 03:42 .
drwxr-xr-x 11 root devs 4096 Apr 8 07:45 ..
-rw-r--r-- 1 root root 0 Feb 15 14:55 access_log
drwxr-xr-x 2 root devs 41 Mar 1 20:44 u1-dev.qwerty.com
-rw-r--r-- 1 root root 1648 Apr 3 03:42 error_log
-rw-r--r-- 1 root root 883 Mar 13 03:41 error_log-20220313
drwxr-xr-x 2 root devs 41 Mar 1 20:44 u4-dev.qwerty.com
drwxr-xr-x 2 root root 41 Mar 1 20:44 langs.qwerty.com
drwxr-xr-x 2 root devs 41 Mar 1 20:44 u8-dev3.qwerty.com
-rw-r--r-- 1 root root 0 Feb 15 14:55 ssl_access_log
-rw-r--r-- 1 root root 314 Apr 3 03:42 ssl_error_log
-rw-r--r-- 1 root root 157 Mar 6 03:50 ssl_error_log-20220313
-rw-r--r-- 1 root root 0 Feb 15 14:55 ssl_request_log
drwxr-xr-x 2 apache apache 253 Apr 3 03:42 www.qwerty.com
drwxr-xr-x 2 root devs 41 Mar 1 20:44 u13-dev.qwerty.com
[root@ip-10-0-20-173 httpd]#
Как изменить эти наборы разрешений? Какой подход здесь лучше всего?
решение1
Вы можете использовать acl для этого каталога и предоставить разрешения для группы devs. Например:
setfacl -m g:devs:rx httpd/
Вы можете задать список доступа к файлам для каталога. В вашем примере у вас есть каталог httpd с разрешениями, установленными только для пользователя/группы root.
# ls -la| grep httpd
drwx------ 2 root root 4096 Apr 8 10:11 httpd
Вы можете проверить, что в этом каталоге нет списка ACL:
getfacl httpd/
# file: httpd/
# owner: root
# group: root
user::rwx
group::---
other::---
Устанавливаем разрешения для группы devs на чтение и выполнение:
setfacl -m g:devs:rx httpd/
После настройки разрешений это будет выглядеть так:
getfacl httpd/
# file: httpd/
# owner: root
# group: root
user::rwx
group::---
group:devs:r-x
mask::r-x
other::---
Обратите внимание на дополнительный знак (+) у любого существующего acl в команде ls.
# ls -la| grep httpd
drwxr-x---+ 2 root root 4096 Apr 8 10:11 httpd
Может быть хорошей идеей будет повторить команду setfacl с ключом -b, чтобы задать разрешения по умолчанию. Я обычно так и делаю.
-d, --default
All operations apply to the Default ACL. Regular ACL entries in the input set are promoted to Default ACL entries. Default ACL entries in the input set are discarded. (A warning is issued
if that happens).
С уважением
решение2
Согласно тому, как вы отметили вопрос, вы используете среду в стиле Redhat. Если вы используете стандартную установку Apache httpd, вы, вероятно, за кулисами имеете дело с logrotate. Из коробки logrotate выполняется ежедневно из /etc/cron.daily
. Он уберет ваши текущие файлы журналов, создаст новые и перезапустится httpd
таким образом, чтобы начать использовать недавно созданные пустые файлы журналов.
Проверьте /etc/logrotate.d/httpd
. Например, стандартная версия показывает:
/var/log/httpd/*log {
missingok
notifempty
sharedscripts
delaycompress
postrotate
/bin/systemctl reload httpd.service > /dev/null 2>/dev/null || true
endscript
}
Если вы добавите такую строку в фигурные скобки, logrotate правильно выполнит ротацию и воссоздаст ваши файлы журналов с правильными владельцами и членством в группах:
create 0640 root devs
Это указывает logrotate на необходимость создания новых файлов журнала с root
указанием владельца, devs
группы и правами доступа «Чтение/запись» для владельца и «Чтение» для группы.
Затем вы можете задать каталог журнала httpd с правами доступа и владельцами следующим образом:
chown root:devs /var/log/httpd
chmod 0750 /var/log/httpd
В первый день вы также можете вручную установить разрешения для файлов журнала, и logrotate начнет работу в следующие дни:
chown root:devs /var/log/httpd/*log
chmod 0640 /var/log/httpd/*log
Вы можете поэкспериментировать со списками контроля доступа, как продемонстрировал @KuchnMar выше, но это решение упрощает задачу и обеспечивает совместимость с различными типами *nix и файловых систем.
Это может быть похоже на хост в стиле Debian, но apache2
вместо этого может вызываться ваш файл конфигурации logrotate.
Более подробную информацию можно найти здесь:
- logrotate:https://linux.die.net/man/8/logrotate
- mod_log_config:https://httpd.apache.org/docs/current/mod/mod_log_config.html