Цель заметки: посмотреть как можно ограничивать учетные записи при работе с сервером (Ubuntu 12.04.5 Server amd64) и подключенных через ssh. Может кто помнит из читателей я уже на своем блоге описывал, как запирать пользователей в тюрьму при работе через удаленное подключение ssh, но там не все так сложно как может показаться на первый взгляд, да и есть все же некоторые нюансы о которых по первой и не упомнишь.
Но на этом конечно же ограничение тюрьмой не ограничивается есть в природе и еще одна утилита именуемая, как lshell – отличающаяся настройкой на самом простом уровне без погружения в дебри. Я же теперь стараясь ее использовать где только можно, пока альтернативы с простым конфигом не нашел.
Обновляю систему под самого актуального состояния.
ekzorchik@srv-mon:~$ sudo apt-get update && sudo apt-get upgrade -y
Установку данной утилиты lshell буду производить из дефолтных репозитариев:
ekzorchik@srv-mon:~$ apt-cache search lshell
lshell – restricts a user’s shell environment to limited sets of commands
ekzorchik@srv-mon:~$ sudo apt-get install lshell -y
Немного настраиваю конфигурационный файл согласно своему видению ограничений какие хочу предопределить для сотрудников которым предоставляю ограниченный доступ через ssh так и локально авторизовавшихся:
ekzorchik@srv-mon:~$ sudo nano /etc/lshell.conf
На заметку: конфигурационный файл по умолчанию разделен на глобальную [global] секцию и секцию по умолчанию [default]. Так же есть возможность задавать конфигурацию для конкретного пользователя: [user], настройки указанные в секции пользователя, имеют больший приоритет, по сравнения с секцией [default]
После создам пользователя и перебью ему пользовательский шел:
ekzorchik@srv-mon:~$ sudo useradd alektest
ekzorchik@srv-mon:~$ sudo passwd alektest
Enter new UNIX password: Aa1234567
Retype new UNIX password: Aa1234567
passwd: password updated successfully
ekzorchik@srv-mon:~$ sudo chown -R alektest:alektest /home/alektest/
Правлю шелл созданной учетной записи:
ekzorchik@srv-mon:~$ sudo nano /etc/passwd
было:
alektest:x:1001:1001::/home/alektest:/bin/sh
стало:
alektest:x:1001:1001::/home/alektest:/usr/bin/lshell
Сохраняю внесенные изменения.
Теперь создам пример секции на созданного пользователя поведения его в шеле:
[alektest]
allowed: ['ls','time','cd','ifconfig']
strict: 1
warning_counter: 5
path: ['/var/log','/home/alektest']
allowed_cmd_path: ['/sbin']
scp: 1
overssh: ['ls','mkdir','cd']
Сохраняю внесенные изменения и пробую авторизоваться под созданным пользователем с целью проверки как ведет себя новый шелл с ограничениями:
ekzorchik@srv-mon:~$ sudo su - alektest
You are in a limited shell.
Type ‘?’ or ‘help’ to get the list of allowed commands
Ввожу команду date и получаю, что данная команда не зарегистрирована:
alektest:~$ date
*** forbidden command -> “date”
*** You have 4 warning(s) left, before getting kicked out.
This incident has been reported.
Просмотр содержимого файла /etc/passwd:
alektest:~$ cat /etc/passwd
*** forbidden command -> “cat /etc/passwd”
*** You have 3 warning(s) left, before getting kicked out.
This incident has been reported.
Отобразить вывод утилиты time:
alektest:~$ time
Usage: time [-apvV] [-f format] [-o file] [–append] [–verbose]
[–portability] [–format=format] [–output=file] [–version]
[–quiet] [–help] command [arg…]
пробую перейти в каталог /etc и получаю еще одно предупреждение, что через еще 2 предупреждения меня выкинет из шела:
alektest:~$ cd /etc
*** forbidden path -> “/etc/”
*** You have 2 warning(s) left, before getting kicked out.
This incident has been reported.
Пробую запустить привилигированную команду:
alektest:~$ sudo ifconfig
[sudo] password for alektest: <а_пароля_то_я_не_знаю>
alektest is not in the sudoers file. This incident will be reported.
Вот так меня кикнуло:
alektest:~$ uname
*** forbidden command -> “uname”
*** Kicked out
а вот когда я через ssh подключаюсь к системе под пользователем alektest в силу ступают ограничения уже на использование консольных команд предопределенных в конфиге /etc/shell.conf
aollo@system:~> ssh -l alektest 10.7.8.154
alektest:~$ cat /etc/passwd
*** forbidden command -> “cat /etc/passwd”
*** You have 4 warning(s) left, before getting kicked out.
This incident has been reported.
Ниже некоторое пояснение по используемым параметрам в конфигурационном файле lshell.conf:
allowed — указываем какие разрешенные команды доступны пользователю
warning_counter — количество зарегистрированных ошибок после которых пользователя кикнет из терминала.(Доступно после включения ключа – strict )
timer — таймаут в секундах после которого пользователя выкинет из терминала
path — Каталоги, пользователю которых запрещено посещать
allowed_cmd_path — Каталоги, пользователю из которых можно запускать исполняемые файлы.
scp — запретить или разрешить пользователю использовать scp
sftp — запретить или разрешить пользователю sftp
overssh — Листинг команд которые пользователю можно посредством ssh передавать
Конечно все таки небольшие недочеты при использовании данного ограниченного шела, это не возможность использовать объединение команд:
alektest:~$ cd /var/log && ls
lshell: /var/log && ls: No such file or directory
ну и ладно, мне же нужно просто хоть какое-то средством для ограничения учетных записей в консоли при подлючении к серверу. Поигравшись с данной утилитой некоторое время пришел к выводу – подходит и удобно. На этом смею прощаться, до встречи с уважением автор блога – ekzorchik.