Мне нужно добавить привилегии root в сценарий bash, который использует sudo
; так что всякий раз, когда мы запускаем скрипт с терминала; независимо от того, является ли пользователь root или нет, он не должен запрашивать пароль. Пожалуйста помоги! Выполнение Запуск сценария Bash от имени root не помогло.
Имея в виду, что, делая это, вы позволяете любому запускать его, я считаю, что вам нужно изменить его, предоставив ему соответствующее разрешение, 0755 должен сделать это.
Лучшим решением будет использование visudo
(этот инструмент был создан для этого и позволит избежать раскрытия пароля root ), я предлагаю вам покопаться в том, что с этим происходит.
В качестве обходного пути вы можете запустить это :
echo <password> | sudo -S some-script
(начните команду с пробела, чтобы она не сохранялась в истории bash ).
С Уважением.
Вы пытались установить липкий бит в файле, чтобы при запуске он запускался от имени пользователя root?
Вы можете запустить chmod 2777
для файла и chown root
для файла, чтобы передать его пользователю root.
Теперь любой, кто запускает файл, будет запускать его как root.
Очень неразумно создавать дыру в безопасности путем повышения прав (чего-то, против чего я выступаю )без какой-либо формы проверки личности, но если ваш скрипт не -интерактивен и система полностью контролирует сам скрипт (это означает, что пользователь не может возиться с ним )есть несколько способов сделать это безопасным способом. Я приведу вам несколько примеров использования импровизированных «триггеров событий»
(. да, немного растянув определение )
Этот скрипт должен быть запущен заранее сервером (в /etc/rclocal или что-то в этом роде )у этого скрипта права "root".
#!/bin/bash
CMD="/path/to/a/directory/the/user/has/rights/to/write/into"
mkdir -p "$CMD"
while :
do
inotifywait -q -e moved_to "$CMD" >/dev/null
/path/to/script/you/want/to/run.sh
done
Второй — это скрипт, который вызывает пользователь, у него нет root-прав :
#!/bin/bash
CMD="/path/to/a/directory/the/user/has/rights/to/write/into"
touch dummyfile ; mv dummyfile "$CMD"
. Как видите, у пользователя нет повышенных прав, а также он ничего не может сделать, кроме как «нажать на кнопку». Если клиент перемещает что-то в подготовленный каталог, серверный скрипт получает сигнал, что он должен запустить ваш скрипт.
Другой (менее безопасный )способ сделать это — использовать сокеты :
. Во-первых, снова скрипт, вызываемый сервером (, как и в первом примере )
#!/bin/bash
PORTNUMBER="12345" #or whatever you like and not in use
while :
do
nc -l localhost $PORTNUMBER >/dev/null
/path/to/script/you/want/to/run.sh
done
. затем клиентский скрипт
#!/bin/bash
PORTNUMBER="12345" #or whatever you like and not in use
echo "something" | nc localhost $PORTNUMBER
последнюю строку также можно заменить на :
echo "something" >/dev/tcp/localhost/$PORTNUMBER
Здесь снова :эхо в сокет будет сигнализировать серверному скрипту о запуске вашего скрипта.
И, конечно, это также можно сделать с помощью именованных каналов, но вы поняли идею :-)