O mais fácil de fazer isso é definir o shell do usuário como /bin/rbash
. Isso coloca bash
no modo "restrito". Da página man bash:
It behaves identically to bash with the exception that the following are disallowed or not performed:
- changing directories with cd
- setting or unsetting the values of SHELL, PATH, ENV, or BASH_ENV
- specifying command names containing /
- specifying a file name containing a / as an argument to the . builtin command
- specifying a filename containing a slash as an argument to the -p option to the hash builtin command
- importing function definitions from the shell environment at startup
- parsing the value of SHELLOPTS from the shell environment at startup
- redirecting output using the >, >|, <>, >&, &>, and >> redirection operators
- using the exec builtin command to replace the shell with another command
- adding or deleting builtin commands with the -f and -d options to the enable builtin command
- using the enable builtin command to enable disabled shell builtins
- specifying the -p option to the command builtin command
- turning off restricted mode with set +r or set +o restricted.
These restrictions are enforced after any startup files are read.
Nota: o rbash não é uma fortaleza impenetrável. Ainda é possível deixar buracos abertos, e um "atacante" suficientemente habilidoso (isto é, aquele que sabe mais do que você) provavelmente será capaz de fazer muitas coisas que você não vai querer (ou contornar totalmente suas restrições).
Ainda é possível ler qualquer arquivo legível pelo mundo no sistema.
Verifique também se /bin/rbash
NÃO está em /etc/shells
, caso contrário, ele poderá alterar seu próprio shell para algo irrestrito usando chsh
.