Одним из способов ограничения возможности выполнения команд является ограниченная оболочка.
Выдержка из руководства, где сказано, что следующее запрещено или не выполняется:
Changing directories with the cd builtin.
Setting or unsetting the values of the SHELL, PATH, ENV, or BASH_ENV variables.
Specifying command names containing slashes.
Specifying a filename containing a slash 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 to replace the shell with another command.
Adding or deleting builtin commands with the -f and -d options to the enable builtin.
Using the enable builtin command to enable disabled shell builtins.
Specifying the -p option to the command builtin.
Turning off restricted mode with ‘set +r’ or ‘set +o restricted’.
После этого вы можете добавить ссылку на команду, которую вы хотите выполнить.
Может быть, другой путь к вашей цели должен быть через использование sudo
.
В вашем случае вы можете отредактировать файл sudoers
(с помощью visudo
) и получить что-то похожее на:
User_Alias USERS_GROUP_A = joe, mike, cedric
User_Alias USERS_GROUP_B = jude, zoe, cedric
Cmnd_Alias COMMANDS_GROUP_A = /bin/ls, /bin/cat, /usr/bin/zip
Cmnd_Alias COMMANDS_GROUP_B = /bin/kill, /bin/cat, /usr/bin/zip
USERS_GROUP_A ALL= COMMANDS_GROUP_A
USERS_GROUP_B ALL= COMMANDS_GROUP_B
# users of the group USERS_GROUP_A may run /bin/ls, /bin/cat, and /usr/bin/zip
# from any machine (ALL).
# users of the group USERS_GROUP_B may run /bin/kill,/bin/cat and /usr/bin/zip
# from any machine (ALL).
Заметки:
- Проблема в примере: обычно
kill
- это встроенная команда оболочки (проверьте это с помощью команды type kill
). Если вы позволите пользователям иметь shell
я боюсь, вы не найдете способа избежать использования им kill
(если вы не измените исходный код оболочки должным образом и не перекомпилируете его ...).
Если команды, которые вы хотите закрыть для этих пользователей, имеют атрибуты read
и execution
установленные для всех (например, ls -l /usr/bin/zip
)
-rwxr-xr-x 1 root root 188296 Oct 21 2013 /usr/bin/zip
может быть, вы можете использовать обходной путь, ограничивая атрибут execution
только владельцем и его группой sudo chattr o-x /usr/bin/zip
,
-rwxr-xr-- 1 root root 188296 Oct 21 2013 /usr/bin/zip
добавление нового пользователя (например, cooluser) в эту группу (возможно, с /usr/sbin/nologin
качестве shell
) и запись следующих 2 строк вместо соответствующего выше:
USERS_GROUP_A ALL=(cooluser) NOPASSWD: COMMANDS_GROUP_A
USERS_GROUP_B ALL=(cooluser) NOPASSWD: COMMANDS_GROUP_B
# users of the USERS_GROUP_A may run /bin/ls, /bin/cat and /usr/bin/zip
# as the user cooluser from any machine (ALL).
# users of the USERS_GROUP_B may run /bin/kill,/bin/cat and /usr/bin/zip
# as the user cooluser from any machine (ALL).
Ключевое слово NOPASSWD:
чтобы избежать запроса пароля.
Ваши пользователи могут выполнять команды с
sudo -u cooluser /usr/bin/zip
Побочный эффект: другие пользователи не смогут запускать эту команду, пока вы не включите их в группу владельца файла ... и если это root
должно быть не так безопасно ...
Рекомендации: