Ограничить пользователя на выполнение выборочных команд (Linux)

14

Как я могу ограничить моего пользователя выполнять только выборочные команды. У меня есть пользователь TOMC в группе TOMC. Мне нужно, чтобы этот пользователь был пользователем sudo, а затем имел ограниченный доступ к bash. Я пробовал следующий код в /etc/sudoersфайле, но он не работает, так как пользователь может выполнять другие команды, такие как mkdir,rm

%tomc ALL=/bin/bash,/usr/bin/vim /*
newbie17
источник
3
Хотя использование sudo может быть ограничено конкретными командами, это может быть сложно и требует некоторого доверия. Если вы не доверяете пользователю, то предоставление ему доступа к sudo - плохая идея. Он либо даст им привилегии root, либо даст им целевое приложение для атаки, чтобы получить привилегии root. Разрешение на запуск sudo bashв большинстве случаев эквивалентно наличию пароля root. Из sudo bashоболочки они могут запускать любую команду администратора, устанавливать или удалять программное обеспечение, удалять пользователей и каталоги и т. Д.
Paul
@Paul Можете ли вы предложить мне лучшие и практичные варианты для этого?
Во-первых, это не относится к теме переполнения стека. Лучшие места, чтобы спросить, включают superuser, или askubuntu, или linux & unix. Сначала выясните, что именно вы хотите разрешить tomc. TOMC должно быть разрешено делать _____, но не ________. Затем спроси. Sudo предназначен для команд, требующих root (admin) priv. Он уже может запустить bash, не используя его как root.
Пол

Ответы:

18

Вы можете пойти по этому неправильному пути. Вместо того, чтобы предоставлять пользователю «ограниченную» оболочку bash, вы должны предоставить им только доступ к командам, которые ему понадобятся для запуска от имени пользователя root. Например, в вашем файле sudoers:

tomc ALL=(root) /usr/bin/vim /etc/myapp.conf
tomc ALL=(root) /usr/bin/less /var/log/myapp/*.log

Будьте внимательны, разрешив пользователям запускать vim от имени пользователя root. Vim имеет множество встроенных функций, таких как экранирование в оболочку и возможность запуска команд из vim. В зависимости от вашего распространения, вы можете иметь в sudoeditналичии. Он работает так же, как обычный Vim, за исключением того, что он предназначен для обработки экранирования оболочки и тому подобного.

mtak
источник
7
Ни одна из этих линий не является безопасной. Как вы упоминаете,vimможете запускать произвольные команды оболочки. И вторая строка, вероятно, позволитless /var/log/myapp/../../../etc/shadow! Согласно моим экспериментам, безопасно использовать sudo ! Но если вы можете избежать*s и использоватьsudoeditвместо этого,vimто вы можете быть в порядке.
Joeytwiddle
Избегать *не достаточно! Попав в lessкачестве rootпользователя, попробуйте набрать !tail /var/log/secure. Как ты себя чувствуешь? Изучите NOEXECтег. Но примите к сведению сообщение @ joeytwiddle: безопасность sudo действительно трудна.
Бруно Броноски
3

На моей Synology Diskstation под управлением DSM 6 только пользователи с правами администратора могут последовательно подключаться к ssh (пользователи без прав администратора имеют оболочку как / sbin / nologin в / etc / passwd - вы можете установить ее в / bin / sh, чтобы временно разрешить ssh, но при перезагрузке файл / etc / passwd сбрасывается). По этой причине требуется некоторое ограничение sudo для учетной записи, которая в противном случае существует только для выполнения, например, / sbin / poweroff. Следующие строки в / etc / sudoers работали для меня:

# Allow guestx user to remote poweroff
guestx ALL=(ALL) !ALL
guestx ALL=NOPASSWD: /sbin/poweroff

Перевод: запретить все команды, затем разрешить только желаемую команду (без запроса пароля в этом случае).

При такой конфигурации sudo запрашивает пароль, а затем не выполняет команды, отличные от белого списка:

guestx@ds:~$ sudo su -
Password: 
Sorry, user guestx is not allowed to execute '/bin/su -' as root on ds.
guestx@ds:~$ 
robm
источник