LinuxForum.Fans
Тема

Настройка sudo для использования сторонней утилитой

Автор: SamuelLinux 13 сообщений 1348 просмотров
#313108

Здравствуйте.

Одна из консольных утилит, используемых мною в работе, в обычных обстоятельствах не требует привилегий суперпользователя. Однако, иногда такие привилегии ей необходимы. Это происходит в тех случаях, когда данная утилита запускает другую утилиту, и запуск последней невозможен от лица обычного пользователя. Переход в режим суперпользователя осуществляется посредством sudo.

Поясните, пожалуйста, как должен выглядеть файл настройки sudo для того, чтобы гарантировать доступ обсуждаемой утилиты к ресурсам суперпользователя?

То есть, есть утилита A. Для её запуска не требуются привилегии. И есть утилита Б, для её запуска требуются привилегии. Как должен выглядеть файл /etc/sudoers, в случае, когда утилите A требуется запустить Б?

Спасибо.

#313116

Как один из вариантов. Сделать рута хозяином программы и запускать ее с правами хозяина.

#313118

Дело в том, что утилита установлена локально. Рут не видит её и не знает ничего о ней. Фактически это просто сценарий, запускаемый из-под пользователя.

#313128
"marikk⇓" написал:
Как один из вариантов. Сделать рута хозяином программы и запускать ее с правами хозяина.

для скриптов такое не прокатит...

"-=Serj=-⇓" написал:
man expect?

из интереса, зачем?

"SamuelLinux⇓" написал:
То есть, есть утилита A. Для её запуска не требуются привилегии. И есть утилита Б, для её запуска требуются привилегии. Как должен выглядеть файл /etc/sudoers, в случае, когда утилите A требуется запустить Б?

как-то так:
user ALL = NOPASSWD:/path/to/program_Б

но 7 раз подумай, прежде чем это писать, нельзя ли обойтись другими средствами....

"SamuelLinux⇓" написал:
И есть утилита Б, для её запуска требуются привилегии.

зачем они ей требуются?

#313129
"SamuelLinux⇓" написал:
То есть, есть утилита A. Для её запуска не требуются привилегии. И есть утилита Б, для её запуска требуются привилегии. Как должен выглядеть файл /etc/sudoers, в случае, когда утилите A требуется запустить Б?

В /etc/sudoers дать привилегии на запуск утилиты Б.
В параметрах запуска утилиты Б из утилиты А использовать sudo утилита_Б.

P.S. Лучше бы, конечно, без иносказаний — что это за утилиты А и Б?

#313135
"Fat-Zer⇓" написал:
из интереса, зачем?

Ну, когда утилита Б (в А: sudo Б) спросит пароль - подсунуть ей.. Иль я не так понял?

#313138
"-=Serj=-⇓" написал:
Ну, когда утилита Б (в А: sudo Б) спросит пароль - подсунуть ей.. Иль я не так понял?

sudo позволяет дать право беспарольного запуска определённой команды определённому пользователю или группе.

#313145
"-=Serj=-⇓" написал:
man expect?
"Fat-Zer⇓" написал:
из интереса, зачем?

Тоже не совсем понял...

"Fat-Zer⇓" написал:
зачем они ей требуются?
"Lupo Alberto⇓" написал:
P.S. Лучше бы, конечно, без иносказаний — что это за утилиты А и Б?

Утилита называется RVM. Это менеджер версий интерпретатора языка Ruby. Менеджер позволяет локально установить несколько версий или реализаций интерпретатора (которые не всегда между собой совместимы), а также несколько наборов библиотек для какой-то конкретной версии Ruby. Очень удобно в разработке. Инструмент полезен также, если необходимо поддерживать какие-то устарелые продукты.

Утилита эта имеет интерактивный интерфейс: она вам задает вопросы, вы на них отвечаете, набирая ответы в консоли. Так вот, при установке какой-либо версии Ruby, она скачивает исходники интерпретатора и пытается осуществить сборку. Если не хватает каких-либо библиотек, необходимых для сборки, она самостоятельно их устанавливает в систему, используя, как я понимаю, штатный пакетный менеджер. Для этого она запрашивает пароль sudo.

То есть, утилита A — RVM, а Б —, надо полагать, штатный пакетный менеджер. Это Apt, в моём случае.

Как я понял, инструкция должна выглядеть вот так:

[console]
sam SAM-PC = NOPASSWD:/usr/bin/apt-get
[/console]

Что-то мне подсказывает, что это не совсем корректно, с точки зрения безопасности системы.

#313147
"SamuelLinux⇓" написал:
Что-то мне подсказывает, что это не совсем корректно, с точки зрения безопасности системы.

Чтобы чуть повысить безопасность ;) можно указать все возможные (и, соответственно, разрешённые) варианты опций использования команды apt-get.

#313148

ну если ТС, запускает скрипт руками, то как вариант это сделать так:
[console]
$sudo su -c "/path/script"
[/console]

#313160

-=Serj=-, ну нет, там, видимо, человек установил RVM системно, и при установке пакетов, пакетный менеджер у него требует пароль. (В Ruby свой пакетный менеджер — rubygems. Пакеты можно локально устанавливать, можно системно. В последнем случае менеджер будет требовать пароль суперпользователя.)

У меня же RVM запрашивает пароль, так как ему требуется доступ к Apt'у для системной установки пакетов, необходимых для сборки Ruby.

По поводу expect'а, вы, видимо, подумали, что у меня интерактивная консольная программа, работа которой требует автоматизации и, соответственно, написания сценария, где необходимо сымитировать пользовательский ввод. Нет, я вручную всё ввожу.

В общем, по сути вопроса я всё понял. Если непривилегированная программа А требует запуска привилегированной программы Б посредством sudo, необходимо прописать в /etc/sudoers беспарольный запуск Б. Однако, следует учитывать то, что подобные действия могут нанести ущерб безопасности системы.

Войдите или зарегистрируйтесь, чтобы ответить.