Вступление
Как известно, в ОС 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