Мне нужно добавить права root в скрипт bash, который использует sudo
; так что всякий раз, когда мы запускаем скрипт из терминала; независимо от того, является ли пользователь root или нет, он не должен запрашивать пароль. Пожалуйста помоги! Выполнение Run Bash Script от имени Root не помогло.
Лучшим решением было бы использовать visudo
(этот инструмент был создан для этого и позволит избежать раскрытия пароля root), я предлагаю вам разобраться, что с этим не так.
В качестве обходного пути вы можете запустить это:
echo <password> | sudo -S some-script
(запустите команду с пробелом, чтобы она не сохранялась в истории Bash).
С уважением.
Вы пытались установить залипший бит для файла, чтобы при запуске он запускался с правами root?
Вы можете запустить chmod 2777
для файла и chown root
для файла, чтобы получить его. к корню.
Теперь любой, кто запустит файл, будет запускать его как root.
Имея в виду, что, делая это, вы позволяете кому-либо запускать его, я полагаю, что вам нужно изменить его, предоставив ему соответствующее разрешение, 0755 должен это сделать.
Очень неразумно создавать дыру в безопасности путем повышения прав (что я против) без какой-либо формы проверки личности, но если ваш сценарий неинтерактивен и система полностью контролирует сам сценарий (это означает, что что пользователь не может возиться с этим) есть несколько способов сделать это безопасным способом. Я приведу несколько примеров, использующих временные «триггеры событий»
(да, немного растянув определение)
Этот сервер должен быть предварительно запущен сервером (в / 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
, затем clientcript
#!/bin/bash
PORTNUMBER="12345" #or whatever you like and not in use
echo "something" | nc localhost $PORTNUMBER
последняя строка также может быть заменена на:
echo "something" >/dev/tcp/localhost/$PORTNUMBER
И снова: эхо к сокету будет сигнализировать серверному сценарию о запуске вашего скрипта.
И, конечно, это также можно сделать с именованными каналами, но вы поняли: -)