Как выполнить проверку sudo, которая длится достаточно долго для (непривилегированного) завершения?

Я часто использую следующую конструкцию для сборки и установки тарбола:

sudo -v && make && sudo make install

, который позволит мне сразу же ввести свой пароль и сделать все без присмотра. Это работает хорошо, за исключением редкого случая, когда сборка занимает больше времени, чем тайм-аут sudo, что может произойти на моей довольно медленной машине с большими проектами (даже при использовании make -j4).

Но когда сборка занимает много времени, это именно то, когда выполнение дел без присмотра имеет большое преимущество. Может кто-нибудь придумать конструкцию оболочки, которая позволяет мне сразу же вводить мой пароль и которая make выполняется с обычными разрешениями и make install с повышенными разрешениями?

По соображениям безопасности я не хочу настроить моего пользователя на использование sudo без пароля.

Жизнеспособный вариант - установить очень большой тайм-аут, но я надеюсь на что-то более элегантное.

5
задан 2 January 2013 в 20:51

3 ответа

После того как Вы - полученные полномочия пользователя root, можно использовать sudo снова выполнить команду как некорневого пользователя:

sudo bash -c "sudo -u $USER non-root-user-command ; root-command"

Обратите внимание, что необходимо использовать двойные кавычки, не одинарные кавычки. Если Вы используете одинарные кавычки, $USER будет заменен root, который не достигнет желаемого результата. Хотелось бы надеяться, эти команды проиллюстрируют мой тезис:

$ sudo bash -c "echo $USER"
david
$ sudo bash -c 'echo $USER'
root

Так, давайте возьмем пример, упомянутый в вопросе:

 make && sudo make install

Это стало бы:

 sudo bash -c "sudo -u $USER make && make install"
3
ответ дан 2 January 2013 в 20:51

Самый простой метод, который не требует от вас изменения системных файлов:

echo {password} | sudo -S -v && make && echo {password} | sudo -S make install

Это позволит сценарию работать без запроса пароля.

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


Некоторые другие методы можно найти здесь , но большинство из них касаются редактирования системных файлов.


edit: если вы добавите пробел перед первым эхом, команда не будет отображаться в истории bash.

0
ответ дан 2 January 2013 в 20:51

Я думаю, что это лучший способ сделать это:

make | sudo bash -c 'cat - && make install'

Это запустит одновременно make и sudo, с запросом sudo для вашего пароля. Между тем, make отправляет весь свой вывод в канал, который читается командой cat. После этого запускается make install. Он вызывается из процесса bash, который по-прежнему имеет повышенные разрешения, поэтому проблема с тайм-аутом отсутствует.

0
ответ дан 2 January 2013 в 20:51

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

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