有没有方法用Python脚本更改Linux用户密码?如果有,怎么做?
我正在尝试用Python写一些脚本,结果发现需要做一个东西来更新Linux系统中某个用户的密码...
更新:我的目标是让这个脚本能够自动更新密码,使用给定的数据或算法。最重要的是不需要人工干预...
有没有办法做到这一点?还是我应该寻找其他方法?
谢谢!
4 个回答
2
我今天又需要做这个,下面是我的解决方案。这个方法完全自动化,并且使用了系统自带的密码工具,所以遵循了系统的安全政策。
#!/usr/bin/python3
username = 'joe'
# generate passphrase
pw_length = 6
phrase = subprocess.check_output(['pwgen', str(pw_length), '1'])
phrase = phrase.decode('utf-8').strip()
dev_null = open('/dev/null', 'w')
passwd = subprocess.Popen(['sudo', 'passwd', user], stdin=subprocess.PIPE,
stdout=dev_null.fileno(),
stderr=subprocess.STDOUT)
passwd.communicate( ((phrase + '\n')*2).encode('utf-8') )
if passwd.returncode != 0:
raise OSError('password setting failed')
(这个方法也生成了密码。如果你觉得前面的部分没用,可以跳过。)
5
你可以使用crypt来进行密码的加密,而不是用openssl passwd
(那样的话,你是在命令行中直接输入明文密码)。
调整Juliusz的脚本:
#!/usr/bin/env python
import subprocess,crypt,random
login = 'username'
password = 'somepassword'
ALPHABET = "0123456789abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ"
salt = ''.join(random.choice(ALPHABET) for i in range(8))
shadow_password = crypt.crypt(password,'$1$'+salt+'$')
r = subprocess.call(('usermod', '-p', shadow_password, login))
if r != 0:
print 'Error changing password for ' + login
这样的话,密码在命令行中传递时已经是加密过的(传给usermod
)。
我在ubuntu+python2.6.6+pycrypto2.5上测试过这个方法。
8
你可以使用 openssl
和 usermod
呢:
#!/usr/bin/env python
import subprocess
login = 'username'
password = 'somepassword'
# OpenSSL doesn't support stronger hash functions, mkpasswd is preferred
#p = subprocess.Popen(('openssl', 'passwd', '-1', password), stdout=subprocess.PIPE)
p = subprocess.Popen(('mkpasswd', '-m', 'sha-512', password), stdout=subprocess.PIPE)
shadow_password = p.communicate()[0].strip()
if p.returncode != 0:
print 'Error creating hash for ' + login
r = subprocess.call(('usermod', '-p', shadow_password, login))
if r != 0:
print 'Error changing password for ' + login