Как сделать так, чтобы файл мог выполняться только root, но не как root?

7

Есть определенные приложения, которые я не хочу, чтобы люди могли открывать, если у них нет прав root, однако я не хочу предоставлять привилегии для root. Итак, как я могу это сделать, чтобы только root мог запускать определенные приложения, но чтобы приложения фактически не выполнялись как root (я не хочу, чтобы они были из соображений безопасности)? Я запускаю Ubuntu GNOME 15.04, с GNOME Shell и GNOME 3.16.

    
задан Paranoid Panda 25.08.2015 в 14:07
источник

2 ответа

7

Попробуйте использовать 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 (если это не приложение, которое выполняется в GUI, а скорее CLI, вероятно, не будет иметь файл .desktop ), так что после этого Exec= имеет sh /path/to/shell/script или имя псевдонима, если вы решили его создать. Вы найдете .desktop файлов в /usr/share/applications и ~/.local/share/applications .

    
ответ дан user323419 25.08.2015 в 14:56
источник
8

Этот ответ дополняет один из Хизер (который будет работать).

Прежде всего , учтите, что в 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 ) в дваллионах способов, поэтому эффективность этого простого взлома будет варьироваться в зависимости от того, насколько вы ее настроили.     

ответ дан Rmano 26.08.2015 в 07:25
источник

Ознакомьтесь с другими вопросами по меткам