Как сделать так, чтобы файл мог выполняться только 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 является:

  1. создать группу, назвать ее privileged,
  2. sudo chgrp privileged /usr/bin/myapp а потом sudo chmod 750 /usr/bin/myapp,
  3. добавьте пользователей ( непривилегированных!), которые вы хотите, чтобы иметь возможность запускать приложение в группу privileged

и теперь пользователь будет работать myapp как его пользователь, без необходимости иметь sudo привилегии.

Обратите внимание, что если вы хотите, чтобы приложение запускалось от имени другого пользователя, вы можете использовать механизм set-uid в сочетании с описанными выше методами.


Примечания:

(1): обратите внимание, что вы не можете сделать это, если у приложения есть флаг set-gid (например, это происходит с некоторыми почтовыми программами). Проверьте это перед изменением группы двоичных файлов.

(2): в большинстве конфигураций. sudo можно точно обрезать (см. man sudoers), поэтому эффективность этого простого взлома будет зависеть от того, насколько вы его настроили.

Другие вопросы по тегам