Esta dica irá mostrar um exemplo de configuração do
lshell, em um sistema
Debian Squeeze, para limitar a execução de comandos previamente liberados para um determinado usuário ou grupo, bem como os diretórios aos quais o usuário poderá ter acesso, dentre outras opções relacionadas ao seu ambiente shell.
Instalação do lshell:
# aptitude install lshell
Configuração do lshell -
/etc/lshell.conf:
# gedit /etc/lshell.conf
[global]
## Diretório de logs.
## Usuário deve ser membro do grupo lshell.
logpath : /var/log/lshell/
## Nível de log: 0, 1, 2 ou 3.
loglevel : 3
## Nome do arquivo de log. (Padrão %u.log. Ex: usuario.log)
logfilename : %y%m%d-%u
## Configuração padrão. Poderão ser criadas configurações
## separadas para cada usuário ou grupo.
## Ex: [usuariox], [grp:users]
[default]
## Lista de comandos permitidos ao usuário. Use 'all' para permitir
## todos os comandos na variável PATH do usuário.
allowed : ['ls','echo','cd','ll','date','hora','vim','vi','cat']
## Lista de comandos ou caracteres proibidos.
forbidden : [';', '&', '|','`','>','<', '$(', '${', 'cat']
## Lista de comandos permitidos quando usados com sudo.
## Devem estar previamente configurados em /etc/sudoers.
sudo_commands : ['modprobe', 'iptables']
## Número de avisos que o usuário terá antes de ser desconectado
## após tentar entrar em um diretório não permitido ou executar
## um comando da lista 'forbidden'.
warning_counter : 5
## Aliases para comandos. (alias e comando devem estar na lista 'allowed')
aliases : {'ll':'ls -l', 'vi':'vim', 'hora':'date +%H:%M'}
## Texto a ser exibido ao iniciar o lshell.
intro : "== Ambiente restrito ==\nDigite '?' ou 'help' para ver a lista de comandos permitidos."
## Tempo máximo de inatividade em segundos antes
## do usuário ser automaticamente desconectado.
timer : 300
## Lista de pastas as quais poderão ser acessadas pelo usuário.
path : ['/tmp/','/var']
## Define o diretório home do usuário. Se não especificado,
## sera utilizado o valor da variável de ambiente $HOME.
#home_path : '/home/usuario/'
## Altera a variável de ambiente PATH do usuário.
#env_path : ':/usr/local/bin:/usr/sbin'
## Permite ou proíbe o uso de SCP pelo usuário. ( 1 permitir - 0 negar)
scp : 1
## Permite ou proíbe uploads com SCP ( 1 permitir - 0 negar).
## Parâmetro 'scp' deve possuir valor 1.
scp_upload : 1
## Permite ou proíbe downloads com SCP ( 1 permitir - 0 negar).
## Parâmetro 'scp' deve possuir valor 1.
scp_download : 0
## Permite ou proíbe o uso de SFTP ( 1 permitir - 0 negar).
sftp : 1
## Lista de comandos permitidos através de SSH.
## Ex: ssh usario@host 'ls ~'
overssh : ['ls','rsync']
## Considerar ou não comandos inválidos como ação proibida, se 1,
## comandos inválidos irão gerar avisos que poderão desconectar
## o usuário, conforme parâmetro 'warning_counter'.
strict : 0
## Forçar pasta de destino para arquivos enviados por SCP.
scpforce : "/tmp"
## tamanho máximo do arquivo history.
history_size : 100
## Nome do arquivo contendo o hipótrico de comandos.
history_file : "/home/%u/.lshell_history"
Execução do lshell
Para carregar o lshell a partir de uma sessão já existente, execute-o passando como parâmetro o caminho do arquivo de configuração "lshell.conf":
# lshell --config /etc/lshell.conf
Para definir o lshell como shell padrão para um determinado usuário, use o comando
usermod ou
chsh:
# usermod -s /usr/bin/lshell usuario
Ou:
# chsh -s /usr/bin/lshell usuario
Caso queira habilitar os logs para um determinado usuário, insira-o no grupo "lshell", o qual possui permissão de escrita na pasta
/var/log/lshell:
# usermod -aG lshell usuario
Se tiver definido o lshell como shell padrão para um determinado usuário, basta efetuar login com ele e o lshell deverá ser iniciado.
Para mais informações de configuração, verifique o arquivo:
/usr/share/doc/lshell/README.gz
sabe como evitar esse erro?
Traceback (most recent call last):
File "/usr/bin/lshell", line 27, in <module>
lshell.main()
File "/usr/lib/pymodules/python2.6/lshell.py", line 1215, in main
userconf = CheckConfig(args).returnconf()
File "/usr/lib/pymodules/python2.6/lshell.py", line 614, in __init__
self.check_scp_sftp()
File "/usr/lib/pymodules/python2.6/lshell.py", line 1113, in check_scp_sftp
os.system(self.conf['ssh'])
File "/usr/lib/pymodules/python2.6/lshell.py", line 584, in _timererror
raise LshellTimeOut, "lshell timer timeout"
lshell.LshellTimeOut: 'lshell timer timeout'