python模块介绍-pwd:密码数据库

pwd

pwd简介

平台 *inux

pwd可以访问Unix用户帐户和密码数据库。

密码数据库项由结构体passwd(类似元组)表示,参见pwd.h:

属性 含义
pw_name Login name
pw_passwd Optional encrypted password
pw_uid Numerical user ID
pw_gid Numerical group ID
pw_gecos User name or comment field
pw_dir User home directory
pw_shell User command interpreter

除了pw_uid和pw_gid是整数外,其他都是字符串。

pwd方法

pwd.getpwuid(uid) Return the password database entry for the given numeric user ID.
pwd.getpwnam(name) Return the password database entry for the given user name.
pwd.getpwall() Return a list of all available password database entries, in arbitrary order.

简单示例:

In [4]: import pwd

In [5]: pwd.getpwuid(os.getuid())
Out[5]: pwd.struct_passwd(pw_name='root', pw_passwd='x', pw_uid=0, pw_gid=0, pw_gecos='root', pw_dir='/root', pw_shell='/bin/bash')

In [6]: pwd.getpwnam('root')
Out[6]: pwd.struct_passwd(pw_name='root', pw_passwd='x', pw_uid=0, pw_gid=0, pw_gecos='root', pw_dir='/root', pw_shell='/bin/bash')

In [7]: pwd.getpwall()
Out[7]: 
[pwd.struct_passwd(pw_name='root', pw_passwd='x', pw_uid=0, pw_gid=0, pw_gecos='root', pw_dir='/root', pw_shell='/bin/bash'),
 pwd.struct_passwd(pw_name='adm', pw_passwd='x', pw_uid=3, pw_gid=4, pw_gecos='adm', pw_dir='/var/adm', pw_shell='/sbin/nologin'),
 ...
 pwd.struct_passwd(pw_name='dockerroot', pw_passwd='x', pw_uid=992, pw_gid=986, pw_gecos='Docker User', pw_dir='/var/lib/docker', pw_shell='/sbin/nologin')]

这种方式通常已经看不到密码,因为密码大多存在/etc/shadows,建议使用spwd。

spwd

spwd简介

平台 *inux
版本 2.5以上

spwd可以访问Unix shadow密码数据库。通常需要root权限。

密码数据库项由结构体spwd(类似元组)表示,参见shadow.h:

属性 含义
sp_pwd Encrypted password
sp_lstchg Date of last change
sp_min Minimal number of days between changes
sp_max Maximum number of days between changes
sp_warn Number of days before password expires to warn user about it
sp_inact Number of days after password expires until account is blocked
sp_expire Number of days since 1970-01-01 until account is disabled
sp_flag Reserved

除了sp_nam和sp_pwd是字符串外,其他都是整数。

spwd方法

spwd.getspnam(name) Return the shadow password database entry for the given user name.
spwd.getspall() Return a list of all available shadow password database entries, in arbitrary order.

简单示例:

In [1]: import spwd

In [2]: spwd.getspnam('root')
Out[2]: spwd.struct_spwd(sp_nam='root', sp_pwd='$6$heqCVK0U$MDsVT5qoyhgFnE2vlzK4geQzjS/nEVuQfQslhsYX.prJUpqP8SlZbFF6vOZjdgzpnA2YgOx/Hc461mHFSOaLm0', sp_lstchg=16548, sp_min=0, sp_max=99999, sp_warn=7, sp_inact=-1, sp_expire=-1, sp_flag=-1)

In [3]: spwd.getspall()
Out[3]: 
[spwd.struct_spwd(sp_nam='root', sp_pwd='$6$heqCVK0U$MDsVT5qoyhgFnE2vlzK4geQzjS/nEVuQfQslhsYX.prJUpqP8SlZbFF6vOZjdgzpnA2YgOx/Hc461mHFSOaLm0', sp_lstchg=16548, sp_min=0, sp_max=99999, sp_warn=7, sp_inact=-1, sp_expire=-1, sp_flag=-1),
...
 spwd.struct_spwd(sp_nam='dockerroot', sp_pwd='!!', sp_lstchg=16555, sp_min=-1, sp_max=-1, sp_warn=-1, sp_inact=-1, sp_expire=-1, sp_flag=-1)]

grp

grp简介

平台 *inux

spwd可以访问Unix组数据库。

密码数据库项由结构体group(类似元组)表示,参见pwd.h:

属性 含义 类型
gr_name the name of the group 字符串
gr_passwd the (encrypted) group password; often empty 字符串
gr_gid the numerical group ID integer
gr_mem all the group member’s user names 字符串列表

注意gr_mem可能不完整

pwd方法

grp.getgrgid(gid) Return the group database entry for the given numeric group ID. KeyError is raised if the entry asked for cannot be found.
grp.getgrnam(name) Return the group database entry for the given group name. KeyError is raised if the entry asked for cannot be found.
grp.getgrall() Return a list of all available group entries, in arbitrary order.

简单示例:

In [1]: import grp

In [2]: grp.getgrgid(72)
Out[2]: grp.struct_group(gr_name='tcpdump', gr_passwd='x', gr_gid=72, gr_mem=[])

In [3]: grp.getgrnam('tmux')
Out[3]: grp.struct_group(gr_name='tmux', gr_passwd='x', gr_gid=1009, gr_mem=['tmux', 'test'])

In [4]: grp.getgrall()
Out[4]: 
[grp.struct_group(gr_name='root', gr_passwd='x', gr_gid=0, gr_mem=[]),
...
 grp.struct_group(gr_name='dockerroot', gr_passwd='x', gr_gid=986, gr_mem=[])]

注意一些用户没有在/etc/group中注明所属组,另外以+或-开头的组名可能也不适用。


参考资料

  • python2 pwd 英文文档

  • 作者博客:http://my.oschina.net/u/1433482

  • python2 spwd英文文档

  • python2 grp英文文档



你可能感兴趣的:(python模块介绍-pwd:密码数据库)