Lshell вместо chroot ssh
Все часто сталкиваются с тем, что, порой, обычного ftp разработчикам не хватает и необходимо предоставить доступ ssh. Вот и у насклиенты иногда просят предоставить ограниченный доступ ssh. Раньше мы пользовались chroot ssh, а его настройка не самая простая задача, но недавно я познакомился с замечательным продуктом lshell.
Lshell — limited shell
Пользовательский шел, позволяющий легко и просто запереть пользователя в заданных директориях и ограничить выполняемые команды. Он есть в репозиториях CentOS и Debian, установить его можно так:
yum install lshell
apt-get install lshell
Если же есть потребность в последней версии:
wget https://github.com/ghantoos/lshell/releases/download/0.9.16/lshell-0.9.16.tar.gz
tar xvfz lshell-0.9.16.tar.gz
cd lshell-0.9.16
python setup.py install --no-compile --install-scripts=/usr/bin/
затем достаточно добавить шел пользователю
user:x:502:502::/home/user:/usr/bin/lshell
Конфигурационный файл
/etc/lshell.conf:
# lshell.py configuration file
#
# $Id: lshell.conf,v 1.27 2010/10/18 19:05:17 ghantoos Exp $[global]
## log directory (default /var/log/lshell/ )
logpath: /var/log/lshell/
## set log level to 0, 1, 2, 3 or 4 (0: no logs, 1: least verbose,
## 4: log all commands)
loglevel: 2
## configure log file name (default is %u i.e. username.log)
#logfilename: %y%m%d-%u
#logfilename: syslog## in case you are using syslog, you can choose your logname
#syslogname: myapp[default]
## a list of the allowed commands or ‘all’ to allow all commands in user’s PATH
allowed: [‘ls’,’echo’,’cd’,’ll’]## a list of forbidden character or commands
forbidden: [‘;’, ‘&’, ‘|’,’`’,’>’,'<‘, ‘$(‘, ‘${‘]## a list of allowed command to use with sudo(8)
#sudo_commands: [‘ls’, ‘more’]## number of warnings when user enters a forbidden value before getting
## exited from lshell, set to -1 to disable.
warning_counter: 2## command aliases list (similar to bash’s alias directive)
aliases: {‘ll’:’ls -l’, ‘vi’:’vim’}## introduction text to print (when entering lshell)
#intro: «== My personal intro ==\nWelcome to lshell\nType ‘?’ or ‘help’ to get the list of allowed commands»## configure your promt using %u or %h (default: username)
#prompt: «%u@%h»## a value in seconds for the session timer
#timer: 5## list of path to restrict the user «geographicaly»
#path: [‘/home/bla/’,’/etc’]## set the home folder of your user. If not specified the home_path is set to
## the $HOME environment variable
#home_path: ‘/home/bla/’## update the environment variable $PATH of the user
#env_path: ‘:/usr/local/bin:/usr/sbin’## add environment variables
#env_vars: {‘foo’:1, ‘bar’:’helloworld’}## allow or forbid the use of scp (set to 1 or 0)
#scp: 1## forbid scp upload
#scp_upload: 0## forbid scp download
#scp_download: 0## allow of forbid the use of sftp (set to 1 or 0)
#sftp: 1## list of command allowed to execute over ssh (e.g. rsync, rdiff-backup, etc.)
#overssh: [‘ls’, ‘rsync’]## logging strictness. If set to 1, any unknown command is considered as
## forbidden, and user’s warning counter is decreased. If set to 0, command is
## considered as unknown, and user is only warned (i.e. *** unknown synthax)
#strict: 1## force files sent through scp to a specific directory
#scpforce: ‘/home/bla/uploads/’## history file maximum size
#history_size: 100## set history file name (default is /home/%u/.lhistory)
#history_file: «/home/%u/.lshell_history»
Как
видно, конфигурационный файл по умолчанию разделен на глобальную [global]
секцию и секцию по умолчанию [default]. Так же есть возможность задавать
конфигурацию для конкретного пользователя: [user]
настройки указанные в секции пользователя, имеют больший приоритет, по
сравнения с секцией [default]
Рассмотрим пример секции для пользователя:
[user]
allowed: [‘ls’,’echo’,’cd’,’ll’,’cp’,’mv’]
strict: 1
warning_counter: 2
#timer: 5
path: [‘/var/www/site1′,’/var/www/site2’]
#allowed_cmd_path: [‘/home/user/bin’]
scp: 1
sftp: 1
overssh: [‘ls’, ‘rsync’]
allowed
— разрешенные команды
warning_counter — количество запрещенных действия, прежде чем пользователя
выкинет из терминала (работает если только включен strict )
timer — таймаут в секундах после которого пользователя выкинет из
терминала
path — каталоги, которые позволительно посещать пользователю, помимо
домашнего
allowed_cmd_path — каталоги, в которых пользователю разрешено запускать
исполняемые файлы
scp — запретить или разрешить пользователю использовать scp
sftp — запретить или разрешить пользователю sftp
overssh — Список разрешенных команд, которые разрешено использовать
пользователю, посылая их через ssh
Единственный значительный недочет который я обнаружил — это баг, при котором конструкция:
cd /путь && <команда>
выдает ошибку. К примеру:
user:~$ cd /home/user && ls
lshell: /home/user && ls: No such file or directory
Автор: igel