У меня есть скрипт, который может работать как sudo script.sh
илиpkexec script.sh
С точки зрения пользователя было бы намного лучше, если бы скрипт запрашивал пароль у пользователя при его запуске по имени script.sh
.
Как я могу «встроить» запрос pkexec
или sudo
запустить весь скрипт с привилегиями root?
Обратите внимание, что запуск всего с sudo sh -c
не может быть лучшим решением, так как у меня есть функции в сценарии.
command-line
bash
scripts
Сергей Колодяжный
источник
источник
exec
- вызывайте саму себя, но в то же время заменяя процесс, поэтому мы не порождаем несколько экземпляров сценария"$@"
расширится до нескольких слов, по одному для каждого параметра.Если вы хотите красивый диалог, попробуйте что-то вроде этого. Я извлек это прямо из чего-то еще, что написал, так что у него есть дополнительные вещи, которые вам могут не понадобиться или не хотеть, но это показывает общую идею:
Это использует whiptail, который вы можете установить, если у вас его еще нет:
источник
exec echo [PASSWORD]
! Это вызовет процесс с паролем в командной строке, который может увидеть любой пользователь. Либо используйте встроенную командуecho
(принудительноbuiltin echo
включите встроенную версию ), либо bashism<<<
(например, так :)sudo ... <<< "$pass"
; Ш и другие снаряды имеют здесь документы на эти случаи. Также укажите пароль, если он содержит специальные символы.whiptail
команду в отдельный скрипт и используйте что-то вроде того,SUDO_ASKPASS=/path/to/askpass-with-whiptail.sh sudo -A -p "My password prompt" -- "$0" "$@"
чтобы иметьsudo
дело с пользовательской подсказкой пароля.Ответ blade19899 - действительно путь, однако можно также вызвать
sudo bash
шебанг:Очевидное предостережение заключается в том, что это будет работать только до тех пор, пока вызывается сценарий,
./script
и завершается ошибкой, как только вызывается сценарийbash script
.источник
bash script
в командной строке, чтобы вызвать скрипт. Если сценарий определяет , что - нибудь другое , чемbash
в#!
линии, то применение егоbash script
будет терпеть неудачу. Если бы я попытался вызвать скрипт Python, используяbash script.py
его, я бы тоже не смог.perl script
, хотя. Perl, стараясь быть действительно хорошим, проверяет строку shebang, и если он не вызывает perl, он запускает правильную программу.Я предискажу команды внутри сценария, которым нужен root-доступ
sudo
- если пользователь еще не получил разрешения, сценарий запрашивает пароль в этой точке.пример
Этот скрипт может быть запущен как
sudo <scriptname>
или как<scriptname>
. В любом случае он будет запрашивать пароль только один раз.источник
sudo
25 различных команд с избыточностью - проще вызвать sudo один раз. Здесь, однако, причина, по которой ваш скрипт вызывает sudo только один раз, заключается в том, что у sudo есть время из 15 минут - команды, которые занимают больше времени, чем нужно, должны быть повторно обработаны. Твой путь работает просто. , , не так, как мне нужно, чтобы это работало.Похоже, что никто другой не обратил внимание на очевидную проблему здесь. Помещение
sudo
в ваш скрипт, который вы затем распространяете, продвигает вредные привычки пользователя . (Я предполагаю, что вы распространяете его, потому что упоминаете «с точки зрения пользователя».)Правда заключается в том, что в использовании приложений и сценариев существует руководство, аналогичное принципу безопасности в банковском деле: никогда не передавайте свою личную информацию тому, кто вам звонит и говорит, что он звонит «из вашего банка» , и который существует по тем же причинам.
Правило для приложений:
Никогда не вводите пароль при появлении запроса, если вы не уверены, что с ним делается. Это относится ко всем лицам, имеющим
sudo
доступ.Если вы вводите свой пароль, потому что вы запускаете
sudo
в командной строке, отлично. Если вы печатаете его, потому что вы запустили команду SSH, хорошо. Если вы набираете его при входе в свой компьютер, конечно, замечательно.Если вы просто запускаете сторонний скрипт или исполняемый файл и при необходимости вводите свой пароль, вы не знаете, что скрипт делает с ним. Это может быть хранение его во временном файле в незашифрованном виде, насколько вы знаете, и может даже не очистить после себя.
Очевидно, что существуют отдельные и дополнительные проблемы с запуском неизвестного набора команд
root
, но я говорю здесь о поддержании безопасности самого пароля . Даже если предположить, что приложение / скрипт не является вредоносным, вы все равно хотите, чтобы ваш пароль обрабатывался надежно, чтобы другие приложения не могли его использовать и использовать его злонамеренно.Итак, мой личный ответ на это, что лучше всего добавить в ваш скрипт, если ему нужны привилегии root, это:
источник
sudo script_name
же уязвим, но это то же самое. Может быть, эта идея продвигает вредные привычки - я ничего не скажу об этом. Но ключ в том, чтобы знать, что делает программа, и это ответственность пользователя. Вот и вся идея программного обеспечения с открытым исходным кодом. Что касается моего собственного сценария, хорошо. , , сценарий представляет собой простой текст - пользователи могут прочитать его, если они хотят знать, что он делаетЯ сделал это так:
источник