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

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

7
задан 25 August 2015 в 07:07

2 ответа

Попытайтесь использовать 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.

7
ответ дан 23 November 2019 в 06:16

Этот ответ дополнителен к 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:

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

и теперь пользователь будет работать myapp как ее пользователь, без любой потребности иметь sudo полномочия.

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


Сноски:

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

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

8
ответ дан 23 November 2019 в 06:16

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

Похожие вопросы: