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

Ограничить файлы от пользователя sudo

(Разработчик здесь - относительный новичок в мире сисадминов).

Кто-нибудь знает, как можно ограничить файлы (без доступа на чтение, запись или выполнение) от пользователя 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 переменные).

  • необязательно, пользователь сопоставляется с пользователем SELinux 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 таким же образом можно управлять правилами.