(Разработчик здесь - относительный новичок в мире сисадминов).
Кто-нибудь знает, как можно ограничить файлы (без доступа на чтение, запись или выполнение) от пользователя sudo?
Небольшая предыстория ситуации: в настоящее время мы ищем способ предоставить доступ sudo некоторым пользователям, при этом ограничивая доступ к набору файлов. Если это не будет выполнено, доступ sudo не будет вариантом, и вместо этого мы будем добавлять файлы / команды в белый список (или заключать их в сценарий) по мере необходимости в ответ на запросы пользователей.
Как и следовало ожидать, вариант с белым списком потребует гораздо большего обслуживания и задержки, поскольку пользователи ждут, пока команда системного администратора ответит на запросы.
То, как я обычно устанавливаю такие ограничения, требует выполнения нескольких условий, в противном случае ограничения можно легко обойти:
wheel
группа, единственная авторизованная для использования su
(применяется через PAM).Пользователю дается должным образом закреплен rbash
с доступом только для чтения PATH
указывая на частный ~/bin
, этот ~/bin/
Каталог содержит ссылки на простые утилиты:
$ ll ~/bin
total 0
lrwxrwxrwx. 1 root dawud 14 Sep 17 08:58 clear -> /usr/bin/clear*
lrwxrwxrwx. 1 root dawud 7 Sep 17 08:58 df -> /bin/df*
lrwxrwxrwx. 1 root dawud 10 Sep 17 08:58 egrep -> /bin/egrep*
lrwxrwxrwx. 1 root dawud 8 Sep 17 08:58 env -> /bin/env*
lrwxrwxrwx. 1 root dawud 10 Sep 17 08:58 fgrep -> /bin/fgrep*
lrwxrwxrwx. 1 root dawud 9 Sep 17 08:58 grep -> /bin/grep*
lrwxrwxrwx. 1 root dawud 10 Sep 17 08:58 rview -> /bin/rview*
lrwxrwxrwx. 1 root dawud 13 Sep 17 08:58 rvim -> /usr/bin/rvim*
lrwxrwxrwx. 1 root dawud 13 Sep 17 08:58 sudo -> /usr/bin/sudo*
lrwxrwxrwx. 1 root dawud 17 Sep 17 08:58 sudoedit -> /usr/bin/sudoedit*
lrwxrwxrwx. 1 root dawud 13 Sep 17 08:58 tail -> /usr/bin/tail*
lrwxrwxrwx. 1 root dawud 11 Sep 17 08:58 wc -> /usr/bin/wc*
пользователю предоставляется ограниченная среда только для чтения (подумайте о таких вещах, как LESSSECURE
, TMOUT
, HISTFILE
переменные).
staff_u
и получил права выполнять команды от имени другого пользователя по мере необходимости через sudo
.пользователь /home
, /tmp
и возможно /var/tmp
создаются с помощью /etc/security/namespace.conf
:
/tmp /tmp/.inst/tmp.inst-$USER- tmpdir:create root
/var/tmp /tmp/.inst/var-tmp.inst-$USER- tmpdir:create root
$HOME $HOME/$USER.inst/ tmpdir:create root
Также, /etc/security/namespace.init
делает все скелетные файлы доступными только для чтения пользователю и принадлежит root
.
Таким образом, вы можете выбрать, $USER
может выполнять любую команду от своего имени (по ссылке в личном ~/bin
каталог, предоставленный через /etc/skel
, как описано выше), от имени другого пользователя (через sudo
) или вообще нет.
Что касается «доступа к набору файлов», вы не указываете, будет ли это доступ только для чтения или для чтения-записи.
В любом случае это можно настроить через sudo
правила. Я бы реализовал правила для предоставления доступа к файлам только для чтения через rview
и чтение-запись через rvim
, последний обычно настраивается с помощью editor
директива в вашем sudoers
файл:
Defaults editor=/usr/bin/rvim
Так пользователи могут sudoedit
разрешенные файлы.
Это решение можно довольно легко реализовать с помощью выбранного вами инструмента управления конфигурацией.
В приват можно добавлять новые команды. ~/bin
каталог очень быстро (поскольку это просто символические ссылки, управляемые из логики пространств имен). Новый sudo
таким же образом можно управлять правилами.