0

lshell — ограничение пользователя по SSH

Иногда возникает ситуация, когда надо ограничеть пользователя, который подключается к системе через SSH. TrueWay использовать chroot, но я рассмотрю альтернативный вариант, а именно lshell.

Естественно, его нужно установить:

# yum install lshell

Конфиг находится в /etc/lshell.conf.
В принципе файл довольно подробно документирован, но кратко пройдусь по параметрам.
Файл разбит по секциям.

# глобальные настройки самого lshell.
[global]
# путь до логов
logpath     : /var/log/lshell/
# уровень логирования от 0 до 4
loglevel    : 2
# шаблон логфайлов (возможны комбинации %u - user, %d - day %m - month, %y - year, %h - time)
# возможен вариант syslog
logfilename : %u
# в случае, если logfilename установлен как syslog, используется как идентификатор приложения                          
#syslogname  : lshell
# нижеследующее также применимо к [username], [grp:groupname]
[default]
# список aliases, подобно как в .bashrc
aliases          : {'ll':'ls -l', 'vi':'vim'}
# список разрешенных команд, разрешенных на выполнение
# заданных для пользователя PATH  
allowed          : ['ls','echo','cd','ll']
# список запрещенных символов
forbidden        : [';', '&', '|','`','>','<', '$(', '${']
# список команд, которые можно использовать с sudo
#sudo_commands    : ['ls', 'more']
#  сколько раз предупреждаем пользователя, что он хочет запретного
# прежде чем выкинуть из lshell. -1 - отключить
warning_counter  : 2
# баннер, который отображается при входе в lshell
intro            : "== My personal intro ==\nWelcome to lshell\nType '?' or 'help' to get the list of allowed commands"
# Как выглядит командная строка (возможные комбинации %u - user и %h - host)
prompt           : "%u@%h"
# таймер сессии, значение в секундах
# не понятно что это за штука
timer            : 5
# список директорий, куда пользователю разрешено ходить
path             : ['/var/log/','/etc']
# можно переопределить home directory для пользователя
# если не задана, используется $HOME
#home_path       : '/home/bla/'
# можно перезадать $PATH для пользователя
#env_path        : ':/usr/local/bin:/usr/sbin'
# можно добавить переменные окружения
#env_vars        : {'foo':1, 'bar':'helloworld'}
## разрешить/запретить использвать scp. 0 - нет, 1 - да
scp              : 0
# разрешить/запретить использовать upload для scp
scp_upload       : 0
# разрешить/запретить использовать download для scp
scp_download     : 0
## разрешить/запретить использовать sftp
sftp             : 0
# уровень жесткости. В случае, если стоит 1, все неизвестные команды будут
# считаться запрещенными, по истечении warning_counter команд пользователя выкинет из lshell
# в противном случае, просто выдается предупреждение
strict           : 0
# если задана, то все принятые по scp файлы будут сложены в следующую директорию
#scpforce        : '/home/bla/uploads/'
# размер истории
history_size     : 100
# расположение файла истории (по умолчанию в /home/%u/.lhistory)
history_file     : "/home/%u/.lshell_history"

# пример пользователя
[loguser]
allowed         : ['ls','echo','cd','ll','cat','less']
path            : ['/var/log/phpdaemon/']
warning_counter : -1

Обращаю внимание, что мне пришлось вручную создать директорию для логов и разрешить доступ всем, для того, что бы логи начали писаться.
Не разбирался почему так, возможно, это просто баг.

links:
Официальная документация

Alexey Egorychev

FreeBSD and Linux sysadmin. Know many systems like mailsystems, DB, WWW stack. Automation with salt, ansible. Monitoring with nagios, zabbix.