2012-06-23 4 views
0

Я пытаюсь задействовать свою систему всякий раз, когда требую. Поэтому я использую приведенные ниже команды, которые успешно выполняются. Но когда я запускаю код, он запрашивает мой пароль, и я должен каждый раз указывать пароль вручную.Как запустить скрипт Python без запроса пароля?

os.system('sudo sh -c "echo 0 > /sys/class/rtc/rtc0/wakealarm"' % locals())  
os.system('sudo sh -c "echo %(turnontime)s > /sys/class/rtc/rtc0/wakealarm"' % locals())  

Как я могу запустить этот код без запроса моего пароля?

+0

Команда 'sudo' предоставит вам привилегии root и вам понадобится ваш пароль. Это действительно очень плохая идея предоставить root-доступ без пароля. –

+1

Кроме того, почему вы используете Python? Это просто системные вызовы. Вам будет намного лучше использовать сценарий оболочки. –

+0

Чувак, я понял, что команда sudo предоставит права root, но я знаю, что через supprocess.call() будет получать пароль из одной переменной (нужно определить пароль для переменной), и система будет автоматически читать. Но я не понимаю знаете, как это будет объявлено. – Viswa

ответ

2

sudo при запуске с опцией -S будет считывать пароль с помощью stdin.

В этом случае вы можете использовать его в сценарий, как:

#!/bin/bash 
echo my_awesome_password | sudo -S python awesome_script.py 

Как @David правильно говорит, почему вы с помощью питона просто выполнять системные вызовы? Вероятно, у вас может быть такой же скрипт.

+0

, но его не работает – Viswa

4

Наличие вашего корневого пароля в файле сценария просто глупо. Не делайте этого, есть лучшие альтернативы. 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, как указано выше.

Смежные вопросы