Здравствуйте.
Одна из консольных утилит, используемых мною в работе, в обычных обстоятельствах не требует привилегий суперпользователя. Однако, иногда такие привилегии ей необходимы. Это происходит в тех случаях, когда данная утилита запускает другую утилиту, и запуск последней невозможен от лица обычного пользователя. Переход в режим суперпользователя осуществляется посредством sudo.
Поясните, пожалуйста, как должен выглядеть файл настройки sudo для того, чтобы гарантировать доступ обсуждаемой утилиты к ресурсам суперпользователя?
То есть, есть утилита A. Для её запуска не требуются привилегии. И есть утилита Б, для её запуска требуются привилегии. Как должен выглядеть файл /etc/sudoers, в случае, когда утилите A требуется запустить Б?
Спасибо.
Настройка sudo для использования сторонней утилитой
Как один из вариантов. Сделать рута хозяином программы и запускать ее с правами хозяина.
Дело в том, что утилита установлена локально. Рут не видит её и не знает ничего о ней. Фактически это просто сценарий, запускаемый из-под пользователя.
man expect?
Как один из вариантов. Сделать рута хозяином программы и запускать ее с правами хозяина.
для скриптов такое не прокатит...
man expect?
из интереса, зачем?
То есть, есть утилита A. Для её запуска не требуются привилегии. И есть утилита Б, для её запуска требуются привилегии. Как должен выглядеть файл /etc/sudoers, в случае, когда утилите A требуется запустить Б?
как-то так:
user ALL = NOPASSWD:/path/to/program_Б
но 7 раз подумай, прежде чем это писать, нельзя ли обойтись другими средствами....
И есть утилита Б, для её запуска требуются привилегии.
зачем они ей требуются?
То есть, есть утилита A. Для её запуска не требуются привилегии. И есть утилита Б, для её запуска требуются привилегии. Как должен выглядеть файл /etc/sudoers, в случае, когда утилите A требуется запустить Б?
В /etc/sudoers дать привилегии на запуск утилиты Б.
В параметрах запуска утилиты Б из утилиты А использовать sudo утилита_Б.
P.S. Лучше бы, конечно, без иносказаний — что это за утилиты А и Б?
из интереса, зачем?
Ну, когда утилита Б (в А: sudo Б) спросит пароль - подсунуть ей.. Иль я не так понял?
Ну, когда утилита Б (в А: sudo Б) спросит пароль - подсунуть ей.. Иль я не так понял?
sudo позволяет дать право беспарольного запуска определённой команды определённому пользователю или группе.
man expect?
из интереса, зачем?
Тоже не совсем понял...
зачем они ей требуются?
P.S. Лучше бы, конечно, без иносказаний — что это за утилиты А и Б?
Утилита называется RVM. Это менеджер версий интерпретатора языка Ruby. Менеджер позволяет локально установить несколько версий или реализаций интерпретатора (которые не всегда между собой совместимы), а также несколько наборов библиотек для какой-то конкретной версии Ruby. Очень удобно в разработке. Инструмент полезен также, если необходимо поддерживать какие-то устарелые продукты.
Утилита эта имеет интерактивный интерфейс: она вам задает вопросы, вы на них отвечаете, набирая ответы в консоли. Так вот, при установке какой-либо версии Ruby, она скачивает исходники интерпретатора и пытается осуществить сборку. Если не хватает каких-либо библиотек, необходимых для сборки, она самостоятельно их устанавливает в систему, используя, как я понимаю, штатный пакетный менеджер. Для этого она запрашивает пароль sudo.
То есть, утилита A — RVM, а Б —, надо полагать, штатный пакетный менеджер. Это Apt, в моём случае.
Как я понял, инструкция должна выглядеть вот так:
[console]
sam SAM-PC = NOPASSWD:/usr/bin/apt-get
[/console]
Что-то мне подсказывает, что это не совсем корректно, с точки зрения безопасности системы.
Что-то мне подсказывает, что это не совсем корректно, с точки зрения безопасности системы.
Чтобы чуть повысить безопасность ;) можно указать все возможные (и, соответственно, разрешённые) варианты опций использования команды apt-get.
ну если ТС, запускает скрипт руками, то как вариант это сделать так:
[console]
$sudo su -c "/path/script"
[/console]
-=Serj=-, ну нет, там, видимо, человек установил RVM системно, и при установке пакетов, пакетный менеджер у него требует пароль. (В Ruby свой пакетный менеджер — rubygems. Пакеты можно локально устанавливать, можно системно. В последнем случае менеджер будет требовать пароль суперпользователя.)
У меня же RVM запрашивает пароль, так как ему требуется доступ к Apt'у для системной установки пакетов, необходимых для сборки Ruby.
По поводу expect'а, вы, видимо, подумали, что у меня интерактивная консольная программа, работа которой требует автоматизации и, соответственно, написания сценария, где необходимо сымитировать пользовательский ввод. Нет, я вручную всё ввожу.
В общем, по сути вопроса я всё понял. Если непривилегированная программа А требует запуска привилегированной программы Б посредством sudo, необходимо прописать в /etc/sudoers беспарольный запуск Б. Однако, следует учитывать то, что подобные действия могут нанести ущерб безопасности системы.