Как сделать так, чтобы файл мог выполняться только root, но не как root?
Существуют определенные приложения, которые я не хочу, чтобы люди могли открывать, если у них нет привилегий root, однако я не хочу давать программам привилегии root. Итак, как я могу сделать так, чтобы только root мог запускать определенные приложения, но чтобы приложения на самом деле не запускались от имени root (я не хочу, чтобы они были из соображений безопасности)? Я использую Ubuntu GNOME 15.04 с GNOME Shell и GNOME 3.16.
2 ответа
Попробуйте использовать setuid
из пакета super
, Делать sudo apt-get install super
, а затем создайте сценарий оболочки, который может быть запущен только от имени пользователя root. Пусть этот сценарий оболочки запускает только одну команду:
#!/bin/sh
setuid $ORIG_USER applicationcommand
exit 0
Затем установите псевдоним для каждого из пользователей, чтобы applicationcommand
указывает на сценарий оболочки, который вы создали, добавив в каждый из .bashrc
файлы:
alias applicationcommand="sh /path/to/shell/script"
В качестве альтернативы или создания alias
Вы можете редактировать .desktop
файл приложения, которое вы хотите запустить, при условии, что ваши приложения имеют .desktop
файл (если это не приложение, которое работает в графическом интерфейсе, а скорее CLI, скорее всего, не будет иметь .desktop
файл), так что Exec=
линия имеет sh /path/to/shell/script
после него или псевдоним, если вы решили создать это. Ты найдешь .desktop
файлы в /usr/share/applications
а также ~/.local/share/applications
,
Этот ответ дополняет ответ Хизер (который будет работать).
Прежде всего, примите во внимание, что в Unix (и Linux), если кто-то может получить привилегии root, он может делать все что угодно. В случае ответа Хизер, ничто не остановит вашего пользователя просто sudo /usr/bin/applicationcommand
(с небольшим поиском реального пути или чего-то еще). Но я полагаю, с тобой все в порядке.
В таком случае, почему бы просто(1):
sudo chgrp sudo /usr/bin/applicationcommand
sudo chmod 750 /usr/bin/applicationcommand
? Если пользователи могут использовать sudo
, это означает, что(2) они находятся в sudo
группа; вышеуказанные команды делают applicationcommand
читаемый / исполняемый только для членов sudo
группа. Однако, когда они запускают его, они запускают его как своего реального пользователя, как и любую другую команду.
Однако "классическим" решением Unix является:
- создать группу, назвать ее
privileged
, sudo chgrp privileged /usr/bin/myapp
а потомsudo chmod 750 /usr/bin/myapp
,- добавьте пользователей ( непривилегированных!), которые вы хотите, чтобы иметь возможность запускать приложение в группу
privileged
и теперь пользователь будет работать myapp
как его пользователь, без необходимости иметь sudo
привилегии.
Обратите внимание, что если вы хотите, чтобы приложение запускалось от имени другого пользователя, вы можете использовать механизм set-uid в сочетании с описанными выше методами.
Примечания:
(1): обратите внимание, что вы не можете сделать это, если у приложения есть флаг set-gid (например, это происходит с некоторыми почтовыми программами). Проверьте это перед изменением группы двоичных файлов.
(2): в большинстве конфигураций. sudo
можно точно обрезать (см. man sudoers
), поэтому эффективность этого простого взлома будет зависеть от того, насколько вы его настроили.