Смена пароля, python, linux - PullRequest
       18

Смена пароля, python, linux

1 голос
/ 18 апреля 2011

Как я могу изменить пароль пользователя root ubuntu с помощью скрипта Python? Спасибо.

Ответы [ 3 ]

5 голосов
/ 18 апреля 2011

Есть два основных способа сделать это -

Один из них вызывает инструмент командной строки passwd из python (например, с помощью модуля подпроцесса stdlib). Если ваш сценарий не запускается от имени пользователя root, вам нужно выполнить перенос с помощью команд «su» или «sudo», чтобы повысить привилегию пользователя root. Запись ожидаемых данных в stdin должна быть достаточной, но если вы обнаружите, что вам нужно выполнить различные действия, в зависимости от того, что именно подсказывает sudo / passwd, модуль pexpect может быть полезен.

Второй - запись непосредственно в файл / etc / shadow , в котором хранятся хэши паролей. определенно потребует, чтобы ваш скрипт запускался от имени пользователя root, чтобы иметь права на чтение / запись в / etc / shadow. Stdlib предлагает модуль spwd для доступа к / etc / shadow, но он доступен только для чтения, поэтому вам придется свернуть свой собственный читатель / писатель ... модуль csv может быть полезно, / etc / shadow близко к файлу csv с разделителем ":", но с некоторыми небольшими отличиями.

Если вы выберете второй маршрут, вам нужно будет сгенерировать новые хэши заменяющего пароля и вставить их в теневой файл. Самый быстрый способ в Linux - использовать модуль stdlib crypt , но вам нужно позаботиться о генерации соли и установке соответствующего префикса хэша пароля ("$ 5 $", "$ 6 $" и т. Д.) , С другой стороны, объект host_context в библиотеке Passlib может позаботиться о большей части этого за вас (отказ от ответственности: я являюсь автором этой библиотеки).

В общем, я бы порекомендовал первый маршрут, если это возможно - изменение / etc / shadow напрямую сопряжено с опасностью - если вы испортите файл / etc / shadow, вы не сможете войти в систему. иди по этому пути, много архивируй файл .

2 голосов
/ 18 апреля 2011

Вы можете изменить /etc/passwd (/etc/shadow) с помощью скрипта Python, для которого потребуются права root sudo python modify.py /etc/passwd (где modify.py - ваш скрипт, который изменит пароль)

0 голосов
/ 18 апреля 2011

Вы можете использовать команды для передачи данных на терминал.

x = commands.getstatusoutput("passwd root")

Однако вам придется проявить изобретательность, пытаясь ввести значения для «Старый пароль:» и «Новый пароль:». Переменная x не будет назначена, пока команда не будет завершена, и команда не будет завершена, пока не будут введены старый и новый пароли. Если вы просто используете командный модуль во второй раз, то он просто создаст новый подпроцесс. Итак, как уже говорили другие, просто напишите в / etc / shadow, используя функцию open .

...