Существуют определенные приложения, которые я не хочу, чтобы люди смогли открыть, если у них нет полномочий пользователя root, однако я не хочу давать полномочия пользователя root программ. Таким образом, как я могу сделать его так, чтобы только корень мог запустить определенные приложения, но так, чтобы приложения не были на самом деле запущены как корень (я не хочу, чтобы они были из соображений безопасности)? Я выполняю Ubuntu GNOME 15.04 с GNOME Shell и GNOME 3.16.
Попытайтесь использовать setuid
от пакета super
. Сделать sudo apt-get install super
, затем создайте сценарий оболочки, который может только быть выполнен как корень. Имейте тот сценарий оболочки, выполненный только одна команда:
#!/bin/sh
setuid $ORIG_USER applicationcommand
exit 0
Затем установите псевдоним для каждого из пользователей так, чтобы applicationcommand
точки к сценарию оболочки Вы созданный путем добавления в каждый из их .bashrc
файлы:
alias applicationcommand="sh /path/to/shell/script"
С другой стороны, или а также создание alias
можно отредактировать .desktop
файл приложения, которое Вы хотите запустить, предполагая, что Ваши приложения имеют a .desktop
файл (если это не приложение, которое работает в GUI, а скорее CLI, это вероятно не иметь a .desktop
файл), так, чтобы Exec=
строка имеет sh /path/to/shell/script
после него, или название псевдонима, если Вы решили создать это. Вы найдете .desktop
файлы в /usr/share/applications
и ~/.local/share/applications
.
Этот ответ дополнителен к Heather один (который будет работать).
В первую очередь, примите во внимание, что в Unix (и Linux), если Вы можете пустить корни полномочия, они могут сделать что-либо. В случае ответа Вереска ничто не остановит Вашего пользователя только к 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
полномочия.
Заметьте, что, если Вы хотите, чтобы приложение работало как другой пользователь, можно использовать механизм набора-uid, объединенный с вышеупомянутыми методами.
Сноски:
(1): Заметьте, что Вы не можете сделать этого, если приложение имеет флаг ценуроза набора (это происходит с некоторой почтовой программой, например). Проверьте его прежде, чем изменить группу двоичного файла.
(2): в большинстве конфигураций. sudo
может быть прекрасно обрезан (см. man sudoers
) огромным количеством способа, таким образом, эффективность этого простого взлома будет варьироваться в зависимости от того, насколько Вы настроили его.