Почему только sudo'ers могут выполнить файл?

Как это возможно, чтобы иметь возможность выполнять двоичный файл с разрешением 755, он должен быть в списке sudo'ers? Я пытаюсь запустить программу пользователем, не являющимся пользователем sudo. Этого не происходит, но если я выполняю через sudo или как root, он работает как надо.

Разрешение на файл 755 root root.
Весь каталог программ находится в /opt.

Некоторые подробности:
Сервер Ubuntu 12.04, 64-битный
Программное обеспечение в основном представляет собой старую 32-битную версию Firefox 1.9, кое-что модифицированное для подключения к серверу Tomcat.

обновить
пользователь, не указанный в списке sudo'ers, может запустить программу.
только мой пользователь sudo не может, то есть, просто запустив ./program,
sudo ./programm, работает нормально.

3
задан 22 November 2013 в 00:56

2 ответа

Я бы попробовал переместить файл в группу, отличную от root ... Если вы прочитаете это: https://help.ubuntu.com/community/FilePermissions

и вы -ll и видеть XXXX root root

Означает, что ваш файл / программа принадлежит «root» и способен на 755 членов «корневой» группы. Поэтому либо

1) добавьте других пользователей без полномочий root в корневую группу, либо 2) создайте совершенно новую группу и назначьте эту группу для файлов / программ, которые вы запускаете.

Здесь для создания групп и прочего: https://wiki.archlinux.org/index.php/Users_and_Groups

Надеюсь, это поможет!

0
ответ дан 22 November 2013 в 00:56

Наиболее вероятная причина заключается в том, что программа, когда-то работавшая от имени обычного пользователя, пытается прочитать какой-либо файл или выполнить какую-либо операцию, которая зарезервирована для привилегированных пользователей (в основном, root).

Например, если ваша программа пытается использовать (привязку) к одному из нижних интернет-портов (менее 1024), для этого необходимы права суперпользователя (1). Или попытайтесь прочитать файл или используйте библиотеку, которая помечена только для пользователя root.

Решение hammer (2) состоит в том, чтобы отметить программу set-uid root (SUID-root). Это довольно опасно, его следует избегать, кодируя программу, чтобы она не нуждалась в ней, и ее практически невозможно распространять - я бы никогда не принял программы set-uid из неофициальных источников на моем компьютере, и даже тогда я не надену они тоже не нравятся. Я отправляю ответ, потому что я думаю, что хорошо знать, что они существуют.

Поэтому обеспечение того, чтобы все службы / файлы, которые использует программа, было доступно для нее, является правильным решением, в противном случае, вероятно, программа должна запускаться с правами root со всеми вытекающими последствиями.

Большое полное предупреждение: это опасно, и программы с SUID-root могут делать с системой все, что захотят. Если у них есть ошибки, пользователь может легко взять под контроль всю систему или уничтожить ее.

Если вы сделаете программный корень set-uid, любой может его запустить, и он будет работать как root. Это будет работать только для двоичного исполняемого файла ; бит set-uid не работает для сценариев (shell, python или что-либо еще).

Если вы действительно хотите запустить скрипт от имени пользователя root, вам нужна оболочка, как показано в этого ответа на stackoverflow . Но прежде чем это сделать, прочитайте все вопросы и обязательно поймите (не очень) тонкие моменты в отношении безопасности. Если вы действительно хотите, чтобы этот сценарий выполнялся как root для каждого пользователя, я бы выбрал для редактирования sudoers, чтобы они могли запускать его с sudo без запроса пароля . В этом ответе на stackoverflow перечислено много идей.

Пример использования set-uid : я делаю копию cat (вывод содержимого файла на терминал), меняю ее на владение root и пытаюсь прочитать файл, принадлежащий пользователю root и который может читать только этот пользователь root:

(0)asus-romano:~/tmp/suidtest% cp /bin/cat .              
(0)asus-romano:~/tmp/suidtest% ls -l ./cat
-rwxr-xr-x 1 romano romano 46884 Nov 21 09:49 ./cat
(0)asus-romano:~/tmp/suidtest% sudo chown root.root ./cat
(0)asus-romano:~/tmp/suidtest% ls -l
total 48
-rwxr-xr-x 1 root root 46884 Nov 21 09:49 cat
(1)asus-romano:~/tmp/suidtest% ./cat /etc/shadow- > /dev/null
./cat: /etc/shadow-: Permission denied

Теперь я изменил программу на suid-root (обратите внимание на s в флагах разрешений):

(0)asus-romano:~/tmp/suidtest% sudo chmod u+s ./cat
(0)asus-romano:~/tmp/suidtest% ls -l ./cat
-rwsr-xr-x 1 root root 46884 Nov 21 09:49 ./cat
(0)asus-romano:~/tmp/suidtest% ./cat /etc/shadow- > /dev/null

Нет ошибок ...

Опять же, не делайте этого, пока вы полностью не доверяете программе и пользователям.

(1) хорошо, в Linux есть тонкодисперсные привилегии, называемые возможностями , но они редко используются и довольно сложны ...

(2) когда у вас есть молоток, все начинает выглядеть как гвозди ...

0
ответ дан 22 November 2013 в 00:56

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

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