вы должны просто проверить, запущен ли ваш скрипт «root».
Повторять
4
Гораздо лучше sudoправильно настроить, чтобы он не запрашивал пароль для определенной программы / пользователей / группы, чтобы избежать таких грязных взломов.
Rush
Ответы:
186
Ключ -S заставляет sudo читать пароль из STDIN. Это означает, что вы можете сделать
echo mypassword | sudo -S command
передать пароль в sudo
Однако предложения других, которые не включают передачу пароля как часть команды, например, проверка того, является ли пользователь root, вероятно, намного лучше по соображениям безопасности.
Как насчет положить его в специальной папке дает и то и папку только для выполнения разрешений: sudo chmod -R 0100 myScriptFolder? Разве это не решило бы проблемы безопасности (при условии, что никто, кроме вас, не использует ваш компьютер как root)?
Brōtsyorfuzthrāx
Или могут хакеры из-за пределов моей локальной сети каким-то образом видеть текст скрипта при его выполнении при определенных обстоятельствах?
Brōtsyorfuzthrāx
Это сработало для меня как чемпион на моем OSX-боксе! Большое спасибо за то, что поделились решением!
Wulf
51
Вы можете установить sбит для своего скрипта, чтобы он не требовался sudoи запускался от имени пользователя root (и вам не нужно было писать свой пароль root в скрипте):
+1. Это намного лучше (и безопаснее), чем другие методы.
Burkhard
1
липкий бит - это плохая практика, нет?
kbdjockey
@kbdjockey - +sбит setuid. +tэто липкий кусочек.
Robᵩ
@Rob - спасибо за разъяснения
kbdjockey
4
Обратите внимание, что большинство операционных систем игнорируют этот флаг для интерпретируемых файлов сценариев. Это хорошо работает с двоичными файлами.
Это не работает, когда у меня есть аргумент для моей команды. например. echo -e "YOURPASSWORD\n" | sudo -S "run -x". Это говорит sudo: run -x: command not found. Есть идеи, как это обойти?
Пчела
1
@Bhathiya просто не используйте "кавычки", например: echo -e "ВАШ ПАРОЛЬ \ n" | sudo -S ls -l / root
matteomattei
Отлично, спасибо ...
Bee
3
Один из вариантов - использовать флаг -A для sudo. Это запускает программу, которая запрашивает пароль. Вместо того, чтобы спрашивать, у вас может быть сценарий, который просто выдаст пароль, чтобы программа могла продолжить.
sudo
правильно настроить, чтобы он не запрашивал пароль для определенной программы / пользователей / группы, чтобы избежать таких грязных взломов.Ответы:
Ключ -S заставляет sudo читать пароль из STDIN. Это означает, что вы можете сделать
echo mypassword | sudo -S command
передать пароль в sudo
Однако предложения других, которые не включают передачу пароля как часть команды, например, проверка того, является ли пользователь root, вероятно, намного лучше по соображениям безопасности.
источник
sudo chmod -R 0100 myScriptFolder
? Разве это не решило бы проблемы безопасности (при условии, что никто, кроме вас, не использует ваш компьютер как root)?Вы можете установить
s
бит для своего скрипта, чтобы он не требовалсяsudo
и запускался от имени пользователя root (и вам не нужно было писать свой пароль root в скрипте):источник
+s
бит setuid.+t
это липкий кусочек.echo -e "YOURPASSWORD\n" | sudo -S yourcommand
источник
echo -e "YOURPASSWORD\n" | sudo -S "run -x"
. Это говоритsudo: run -x: command not found
. Есть идеи, как это обойти?Один из вариантов - использовать флаг -A для sudo. Это запускает программу, которая запрашивает пароль. Вместо того, чтобы спрашивать, у вас может быть сценарий, который просто выдаст пароль, чтобы программа могла продолжить.
источник
# Make sure only root can run our script if [ "$(id -u)" != "0" ]; then echo "This script must be run as root" 1>&2 exit 1 fi
источник