Eu não sei como fazer isso com o bash, mas eu conheço outro shell que restringe o ambiente do usuário: lshell (shell limitado) .
Uma visão geral rápida da configuração
O Lshell é configurado por meio de um arquivo INI. Por padrão, ele contém uma lista branca de comandos permitidos, mas pode ser facilmente configurada para proibir o usuário de usar um comando específico.
Esta configuração (padrão conf /etc/lshell.conf
) proíbe o usuário foo
de usar mkdir
:
[foo]
allowed = 'all' - ['mkdir', 'bash', 'sh', 'csh', 'dash', 'env']
Para configurar uma conta de usuário para usar lshell por padrão, você deve:
chsh -s /usr/bin/lshell foo
Lshell pode fazer mais, como:
- 3 níveis de granularidade: usuário, grupo, todos.
- Pode restringir o acesso a determinados caminhos no sistema.
- Pode restringir o uso de determinados caracteres (como
|
). - Pode restringir o uso de determinados comandos apenas por SSH.
E mais.
Atualizar 1 # Resultado do teste adicionado:
rahul:~$ which bash
/bin/bash
rahul:~$ dd if=$(which bash) of=my_bash
*** forbidden syntax: dd if=$(which bash) of=my_bash
rahul:~$ bash
*** forbidden command: bash
rahul:~$ cp /bin/bash my_bash
*** forbidden path: /bin/bash
rahul:~$ /bin/bash
*** forbidden command: /bin/bash
rahul:~$ sh
*** forbidden command: sh
rahul:~$ dash
*** forbidden command: dash
rahul:~$ env bash
*** forbidden command: env
rahul:~$ cp /bin/mkdir mycreatedir
*** forbidden path: /bin/mkdir