2015-12-10 13 views
0

Я пытаюсь сохранить пароли, которые обычно пишутся в файле py, отделенном от скрипта, и делают так, чтобы эти пароли были доступны только root и python всякий раз, когда это необходимо скрипту. Я пришла в голову мысль, читая это: https://stackoverflow.com/a/158248/3892678Linux/Python Как импортировать корневой модуль доступа root как пользователь без полномочий root?

Чтобы сделать это, я пытаюсь скрыть пароли, которые будут использоваться в a_script в другом файле passwords ру. passwords может быть прочитан, написан и выполнен (-rwxrwx---) от пользователя root: root. Как другой пользователь tomato, я хочу запустить a_script, который импортирует пароль с passwords для использования в файле. Чтобы сделать это так, чтобы этот пользователь мог запускать файл с правами root, я увеличил файлы setuid и setgid с помощью chmod 6777 a_script.py, так что у файла есть разрешения -rwsrwsrwx. Теперь, как пользователь tomato, я запускаю python a_script.py, но я возвращаюсь ImportError: No module named passwords. Я думал, что установка uid и groupid как s будет запускать файл как root, у которого должны быть разрешения читать passwords. Что я делаю не так?

Вот a_script.py

import os 
print "uid: %s" % os.getuid() 
print "euid: %s" % os.getgid() 
print "gid: %s" % os.geteuid() 
print "egid: %s" % os.getegid() 
from passwords import MYPASS 

print MYPASS 

Все операторы печати, прежде чем я получаю ImportError являются 1001 что tomato. Спасибо за вашу помощь. Может ли быть лучший способ «скрыть» пароли в другом файле, чтобы только root и программы, в которых он нуждается, были единственными, у которых есть доступ к нему?

+0

УИП флаг устанавливает EUID для пользователя, владеющего исполняемым. Вы пытаетесь это просто для удовольствия, или вы хотите получить то, что на самом деле безопасно? –

+0

@SvenMarnach Можете ли вы рассказать об этом немного? Это то, что должно быть на самом деле безопасным. Я не уверен, что это лучший способ сделать это. – pyramidface

+0

Итак, если это должно быть на самом деле безопасно, с чем он должен быть защищен? Есть ли локальные пользователи на машине Linux, которые не должны видеть пароли? –

ответ

0

как бой

os.popen("echo ROOT_PASSWORD | sudo -s -p '' cat /path/to/secure/file.txt").read() 

(отметьте его, вероятно, лучше использовать модуль подпроцесс ... но это требует большего набора)

+0

Не работает. Он повесил трубку, пытаясь запустить эту команду в качестве пользователя моего помидора, но с моим другим пользователем, указанным в sudoers, он работал нормально. Не совсем то, что я хочу, но спасибо. – pyramidface