Простой способ управлять поведением консоли пользователей

Posted by

Цель заметки: посмотреть как можно ограничивать учетные записи при работе с сервером (.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.

Leave a Reply

Ваш e-mail не будет опубликован. Обязательные поля помечены *

3 − 3 =