Создание пользователя с ограниченным набором команд

Вступление

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

Решение

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

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

cd /usr/ports/security/sudo

make install clean

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

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

#Далее создается набор команд под названием TP: следует перечисление через запятую сначала

#всех запрещенных каталогов и программ, а затем всех допустимых комманд с полным путем.

#Если команда написана как /usr/local/bin/nmap, то это означает что ее разрешено запускать c любыми

#аргументами. Если же после команды стоят символы «», то это означает что команду не разрешено

#запускать с аргументами. /sbin/ifconfig tun[0-9]* * — разрешает запускать команду ifconfig с

#аргументами tunX, где X любое число от 0 до бесконечности, плюс любой аргумент после.

#/usr/bin/tail -[fFn] /var/log/* — также разрешает запускать tail с любым из аргументов, указанных в скобках

#и указать файл из каталога /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,

# без ввода пароля 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 следущего содержания:

#!/bin/sh /usr/local/bin/bash —rcfile /usr/home/user/.bash_profile -r # Запускать bash в ограниченном режиме

#(ключ -r) c указанием файла с начальными настроками (—rcfile /usr/home/user/.bash_profile)

(на самом деле, тут можно гораздо проще: в master.passwd посредствам vipw, или подобного установить в качестве шелла для юзверя rbash)

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

 

ИсточникИсточник

Leave a Reply