Материал из Wiki.X-news.org
Перейти к: навигация, поиск

FreeBSD: Создание пользователя с ограниченным набором команд Вступление Как известно, в ОС FreeBSD бывают пользователи двух типов: суперпользователи (администраторы) и обычные. Обычные пользователи могут выполнять команды, у которых установлен соответствующий бит исполнения. Но могут возникнуть ситуации, когда нужно пользователю дать право на выполнение только определенных команд (в нашем примере - должна быть доступна только команда ifconfig без аргументов), исключив выполнение всех остальных.

Решение Как обычно, решение достаточно простое: в качестве оболочки пользователю задается bash в режиме ограничения и используется команда sudo для выполнения разрешенных команд.

1. Ставим из дерева портов sudo:

cd /usr/ports/security/sudo

make install clean

Правим конфигурационный файл /usr/local/etc/sudoers:

root ALL=(ALL) ALL # означает что все команды будут выполняться от пользователя root.

  1. Далее создается набор команд под названием TP: следует перечисление через запятую сначала
  1. всех запрещенных каталогов и программ, а затем всех допустимых комманд с полным путем.
  1. Если команда написана как /usr/local/bin/nmap, то это означает что ее разрешено запускать c любыми
  1. аргументами. Если же после команды стоят символы .., то это означает что команду не разрешено
  1. запускать с аргументами. /sbin/ifconfig tun[0-9]* * - разрешает запускать команду ifconfig с
  1. аргументами tunX, где X любое число от 0 до бесконечности, плюс любой аргумент после.
  1. /usr/bin/tail -[fFn] /var/log/* - также разрешает запускать tail с любым из аргументов, указанных в скобках
  1. и указать файл из каталога /var/log/.

Cmnd_Alias TP=!/bin/,!/sbin/,!/usr/bin/,!/usr/sbin/,!/usr/local/bin/,!/usr/local/sbin/,/sbin/ifconfig ..

user ALL=(ALL) NOPASSWD: TP # разрешает выполнять комманды из списка TP только пользователю с именем user,

  1. без ввода пароля root.а


2. Ставим из дерева портов bash:

cd /usr/ports/shells/bash

make install clean

3. Создаем домашний каталог для пользователя user:

mkdir -p /usr/home/user

4. Настраиваем bash:

Создаем в домашнем каталоге пользователя user профайл bash с именем .bash_profile следущего содержания:

PATH=/usr/home/user; export PATH #Оставляем в путях только каталог пользователя user alias ifconfig=.sudo /sbin/ifconfig. #Здесь делаем доступные команды для user .прозрачными.


5. Создаем в домашнем каталоге пользователя user файл с названием bash следущего содержания:

  1. !/bin/sh /usr/local/bin/bash .rcfile /usr/home/user/.bash_profile -r # Запускать bash в ограниченном режиме
  1. (ключ -r) c указанием файла с начальными настроками (.rcfile /usr/home/user/.bash_profile)


6. Создаем пользователя с именем user:

pw adduser user -g nogroup -d /usr/home/user -s /usr/home/user/bash


7. Задаем ему пароль:

passwd user

8. Безопасность. Действия совершаются во избежание записи чего-либо пользователем user в свой каталог (для дальнейшего возможного повышения привелегий :)) :

Меняем владельца/группу каталога пользователя user на user:nobody:

chown -R user:nogroup /usr/home/user

Профайл bash оставляем за root.ом:

chown root:wheel /usr/home/user/.bash_profile

Выставляем права:

сhmod -R 400 /usr/home/user #устанавливаем на всё права .только чтение только для владельца.


сhmod 500 /usr/home/user #устанавливаем на каталог бит .х. для возможности владельцу войти в него


сhmod 500 /usr/home/user/bash #для запуска нашего .модифицированного. баша

Профайл bash доступен для чтения всем:

chmod 444 /usr/home/user/.bash_profile

9. Делаем символическую ссылку на sudo в домашнем каталоге пользователя user:

ln -s /usr/local/bin/sudo /usr/home/user

Листинг домашнего каталога пользователя user выглядит, примерно, так: -r.r.r. 1 root wheel 122 Sep 2 22:42 .bash_profile -r-x.. 1 user nogroup 73 Sep 2 22:39 bash lrwxr-xr-x 1 root nogroup19 Sep 2 22:42 sudo -> /usr/local/bin/sudo

Все, пользователь user ограничен в действиях: ему доступна только команда ifconfig и без параметров.

При попытке запуска других исполняемых файлов, пользователь user получит следующее сообщение:

ls bash: ls: command not found /bin/ls bash: /bin/ls: restricted: cannot specify `/. in command names sudo /bin/ls Sorry, user user is not allowed to execute ./bin/ls. as root on subnets.ru.

При запуске разрешенных команд идет логгирование в /var/log/messages:

Sep 8 16:53:37 subnets.ru sudo: user : TTY=ttyp3 ; PWD=/usr/home/user ; USER=root ; COMMAND=/sbin/ifconfig