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

1

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

  • 1
    зачем использовать питон?
  • 1
    Потому что, я люблю его, его компилируемость, и он уже внес большой вклад в python, это всего лишь часть. Я пытаюсь выучить этот язык.
Показать ещё 1 комментарий
Теги:
change-password

3 ответа

5
Лучший ответ

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

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

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

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

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

2

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

0

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

x = commands.getstatusoutput("passwd root")

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

Ещё вопросы

Сообщество Overcoder
Наверх
Меню