Наличие вашего корневого пароля в файле сценария просто глупо. Не делайте этого, есть лучшие альтернативы. This описывает, как создать сценарий оболочки с установленным битом setuid, и как обойти ограничение, которое большинство современных дистрибутивов Linux имеют на setuid на сценариях оболочки.
Вкратце резюмируйте основные детали здесь, чтобы соответствовать рекомендациям stackoverflow. Сначала сделайте .c
файл (скажем, это называется runscript.c
) с этим содержимым:
#include <stdio.h>
#include <stdlib.h>
#include <sys/types.h>
#include <unistd.h>
int main()
{
setuid(0);
system("/path/to/script.sh");
return 0;
}
Установка GCC (apt-get install gcc
на Debian основе дистрибутива), а затем введите
gcc -o runscript runscript.c
Теперь, как корень, тип
chown root:root runscript script.sh
chmod 4755 runscript script.sh
Теперь любой пользователь должен иметь возможность запускать runscript
, и он выполнит script.sh
, как если бы пользователь w как корень.
До тех пор, пока оба файла принадлежат root и не могут быть записаны кем-либо другим, кроме root, это довольно безопасно и безопаснее, чем вложение корневого пароля в открытый текст в файле сценария.
Я не удалось сделать эту работу для script.py
файл по какой-то причине, так что если вы действительно хотите запустить питон скрипт, есть файл script.sh
запустить его косвенно. Если вы это сделаете, не забудьте установить владельца и разрешения для скрипта python, используя chown
и chmod
, как указано выше.
Команда 'sudo' предоставит вам привилегии root и вам понадобится ваш пароль. Это действительно очень плохая идея предоставить root-доступ без пароля. –
Кроме того, почему вы используете Python? Это просто системные вызовы. Вам будет намного лучше использовать сценарий оболочки. –
Чувак, я понял, что команда sudo предоставит права root, но я знаю, что через supprocess.call() будет получать пароль из одной переменной (нужно определить пароль для переменной), и система будет автоматически читать. Но я не понимаю знаете, как это будет объявлено. – Viswa