Existem várias maneiras diferentes de conseguir isso. Vou listar uma das várias soluções possíveis.
Eu proporia usar várias camadas diferentes de proteção para impedir que os usuários executem os comandos que eles não deveriam ter permissão para acessar. Todas as instruções aqui assumem que os usuários têm seu próprio diretório /home/[username]
, que seu shell é /bin/bash
e você gostaria que eles usassem o shell bash ao efetuarem login no sistema.
1) Altere as permissões do diretório para que apenas o usuário possa editar o conteúdo do seu diretório pessoal
chmod 755 /home/[username]
2) Remova o arquivo .bashrc
do usuário
rm /home/[username]/.bashrc
Este site tem mais informações sobre o motivo de ser uma boa ideia para excluir o .bashrc
nessa situação.
3) Crie um .bash_profile
e adicione aliases "seguros" para todos os comandos que você gostaria de desativar
./exemplo de arquivo bash_profile
alias apt-get="printf ''"
alias aptitude="printf ''"
[...]
alias vi="vi -Z" #this is vi's safe mode and shell commands won't be run from within vi
alias alias="printf ''"
E, por favor, verifique a lista completa de comandos bash para mais informações. Você deve certificar-se de que o comando alias alias="printf ''"
seja o último comando da lista, caso contrário, você perderá a capacidade de aliasar todos esses comandos.
4) Desabilite os comandos do shell no vi, alterando o comando vi para o modo restrito.
A sintaxe é alias vi="vi -Z"
, mas por favor veja este site para mais informações.
5) Altere a propriedade do usuário .bash_profile
para root
chown root:root /home/[username]/.bash_profile
6) Remover permissões de gravação no usuário .bash_profile
chmod 755 /home/[username/.bash_profile]
7) Por fim, altere a festa dos usuários para o modo bash restrito para que eles não possam mudar de diretório (se você não tiver um modo bash restrito em seu sistema, este link ajudará e fornecerá mais informações) chsh -s /bin/rbash [username]
Agora, quando os usuários fizerem o login, eles não poderão alterar os diretórios, todos os comandos que você não quer que eles usem, produzirão as mesmas informações como se o usuário tivesse pressionado o ENTER chave sem comando especificado e suas funções /bin/bash
permanecem intactas.
Dependendo de quais funções você escolher ou não usar como alias dessa maneira, os usuários ainda poderão contornar alguns dos controles implementados. No entanto, como implementamos alguns buffers de segurança, o usuário realmente precisa saber sobre os sistemas de computador para fazer algo perigoso.
Em uma nota relacionada e algo que você pode querer considerar, se você colocar esses aliases diretamente em cada usuário% ' .bash_profile
, você terá dificuldade em manter quais funções devem e não devem ter um alias e se você precisa para alterar o pseudônimo em qualquer coisa você teria que mudar todos eles individualmente. Além disso, como os usuários podem usar vim
ou vi
para exibir arquivos, eles podem ver o conteúdo de seus .bash_profile
e entender quais restrições eles têm e não têm.
Para contornar isso, eu sugeriria.
1) Colocando todos os aliases em um diretório não acessível pelos usuários (cole o conteúdo do .bash_profile
aqui)
/[path_to_file]/startup_functions_for_beginners.sh
2) Fornecendo os alias em seus .bash_profile
exemplo de arquivo ./bash_profile aprimorado
if [[ -f /[path_to_file]/startup_functions_for_beginners.sh ]]; then
. /[path_to_file]/startup_functions_for_beginners.sh
fi
Isso deve colocá-lo no seu caminho, mas lembre-se de que quase sempre existem maneiras de contornar as restrições.
Além disso, sinta-se à vontade para remixar as informações nesta resposta para atender às suas necessidades. Estes podem definitivamente ser combinados com outras restrições também.
P: Preciso que os usuários tenham acesso a fg
e bg
, mas não quero que eles consigam acessar aptitude
ou bash
alias apt-get="printf ''" #the user won't be able to run this
alias aptitude="printf ''" #the user won't be able to run this
alias bash="printf ''" #the user won't be able to run this
#alias fg="printf ''" #this will run as a bash built-in
#alias bg="printf ''" #you actually don't need to include these in your script