
Я хотел бы предоставить определенному (обычному) пользователю grep
доступ к моим почтовым журналам ( /var/log/maillog*
).
Я не готов менять разрешения на доступ к журналам, поскольку они должны оставаться доступными root
только для чтения, поэтому я думаю, что предпочтительным решением будет использование sudoers
.
Кроме того: я хочу предоставить как можно меньше других разрешений, в идеале у пользователя должен быть доступ только к почтовому журналу (и ротируемым файлам).
Например:
username ALL= NOPASSWD: /bin/grep
Позволяет этому пользователю работать практически grep
с любым файлом в системе, чего я хотел бы избежать.
Какое решение здесь является наилучшим?
К вашему сведению: оно не обязательно должно быть grep
как таковым: пользователю нужен только доступ на чтение почтовых журналов, и, вероятно, он будет использовать его только grep
для доступа к ним.
решение1
Вы можете использовать ACL для файла(ов), чтобы предоставить пользователю разрешение на чтение.
setfacl -m user:grepuser:r /var/log/maillog*
Это преимущество позволяет пользователю использовать любой инструмент по своему желанию.
Это также безопасно для logrotate для maillog*
решение2
Если вы не знаете, какие конкретные строки будут искать пользователи и какие конкретные файлы они будут проверять, sudo
это не лучшее решение. Если вы создадите правило вроде этого:
blizz ALL=root NOPASSWD: /bin/grep * /var/log/maillog*
Пользователь сможет выполнять такие команды:
grep root /etc/shadow /var/log/maillog
grep = /root/my.cnf /var/log/maillog
Они смогут прочитать любой файл в системе. Вы можете найти больше информации об этой проблеме здесь:
http://blog.csnc.ch/2012/10/dangerous-sudoers-entries-part-4-wildcards/
Если вы знаете, какие строки и файлы будет проверять пользователь, вы можете определить отдельные правила для каждого сценария. Например:
Cmnd_Alias MAILLOGA = /bin/grep 'Connection refused' /var/log/maillog
Cmnd_Alias MAILLOGB = /bin/grep 'Connection refused' /var/log/maillog.1
Cmnd_Alias MAILLOGC = /bin/grep 'imap-login' /var/log/maillog
Cmnd_Alias MAILLOGD = /bin/grep 'imap-login' /var/log/maillog.1
blizz ALL=root NOPASSWD: MAILLOGA, MAILLOGB, MAILLOGC, MAILLOGD
Однако это может оказаться громоздким и привести к слишком большой конфигурации sudo.
В качестве альтернативы, вместо того, grep
чтобы предоставить им доступ к файлам через more
команду, они могли бы выполнять поиск файлов в интерактивном режиме:
Cmnd_Alias MAILLOG = /bin/more /var/log/mailllog
Cmnd_Alias MAILLOG1 = /bin/more /var/log/mailllog.1
Cmnd_Alias MAILLOG2 = /bin/more /var/log/mailllog.2
Cmnd_Alias MAILLOG3 = /bin/more /var/log/mailllog.3
blizz ALL=root NOPASSWD: MAILLOGA, MAILLOGB, MAILLOGC, MAILLOGD
Однако это не позволяет пользователю сохранять историю своих поисков (например, .bash_history
) или создавать свои собственные скрипты или псевдонимы для поисков. Плюс, если у вас есть ротация журналов, они не смогут анализировать сжатые журналы.
Примечание:Непредоставить sudo доступ к less
команде. Пользователь может выйти из процесса, например, запустив , !/bin/bash
он less
получит root-доступ к системе.
Другой вариант — установить для них правила доступа к cat
файлам, чтобы они могли перенаправлять их grep
по своему усмотрению. Например:
sudo cat /var/log/maillog | grep "anything can go here"
В конце концов, самое простое и, вероятно, лучшее решение — предоставить им доступ на чтение журналов, изменив разрешения на файлы журналов. Вы можете сделать что-то вроде этого:
groupadd logcheck
chgrp logcheck /var/log/maillog*
chmod g+r /var/log/maillog*
useradd -G logcheck blizz
Затем они могут использовать любой инструмент для анализа файлов (например grep
, zgrep
, less
, more
, view
, и т. д.).
решение3
Это должно работать так, как и ожидалось.sudoersфайл:
%users ALL= /bin/cat /var/log/mail.log
%users ALL= /bin/cat /var/log/mail.err
(пути к журналам из Ubuntu, при необходимости измените)
Использование универсального инструмента, предназначенного только для вывода данных, напримеркотпросто и безопасно. Вам не придется разрешать и ограничивать определенные опции, как сгрэппрямо в sudoers. Это также позволит фильтровать логи с любымgrep-или-нетинструмент, т.е.awk,сед.
Не уверен каксудонастроен в CentOS, но если он запрашивает парользвонокпользователь (не изцельпользователь), я бы избегал использованияНЕТ ПАРОЛЬ. Это может быть преимуществом безопасности, если какая-либо враждебная сторона получит доступ к учетной записи пользователя, не зная его пароля.