这篇我们讲一讲用户管理的相关内容,涉及到/etc/passwd,/etc/shadow,/etc/group三个用户账号相关的文件以及以下命令:
①用户管理相关命令:useradd, userdel,usermod,id,w,who,whoami,su,chsh,chfn,finger,pwck
②用户组管理相关命令:groupadd, groupdel,groupmod,gpasswd,newgrp,groups
③用户密码管理相关命令:passwd,chage
一、passwd文件
①account:用户名
②password:密码占位符
③UID:用户ID号
④GID:基本组ID号
⑤GECOS:注释信息
⑥directory:家目录
⑦shell:默认shell
二、shadow文件
①login name:用户名
②encrypted password:加密的密码
③days since Jan 1, 1970 that password was last changed:最近一次修改密码的时间
④days before password may be changed:最短使用期限
⑤days after which password must be changed:最长使用期限
⑥days before password is to expire that user is warned:警告时间
⑦days after password expires that account is disabled:非活动时间
⑧days since Jan 1, 1970 that account is disabled:过期时间
⑨a reserved field:保留区域,未使用
①从1970年1月1日到上次修改密码时间所走过的天数,也即/etc/shadow文件中第3字段所示
②上次密码修改日期到今天所走过的天数,也即密码修改之后用了多少天
③今天到密码警告期还有多少天
④密码警告期和密码过期时间的中间差,也即/etc/shadow文件中第6字段所示
⑤密码非活动期时间,也即/etc/shadow文件中第7字段所示
⑥密码的失效时间,也即/etc/shadow文件中第8字段所示
三、group文件
①group_name:组名
②password:密码占位符
③GID:基本组ID号
④user_list:以此组为其附加组的用户列表
四、用户管理相关命令
1.useradd
useradd - create a new user or update default new user information # 创建新用户或更新 新用户的账户信息 SYNOPSIS useradd [options] LOGIN useradd -D useradd -D [options] -u UID:指定UID -g GID:指定GID,即用户的基本组,但GID要事先存在 -G GID:指定用户的额外组,但GID要事先存在 -d 目录: 指定家目录 -c 备注:备注 -s:shell:指定默认shell,应该指定使用/etc/shells文件中出现的shell -m:创建用户时,强制给用户创建家目录,一般常跟-k选项一起使用,-k后面指定复制到家目录下的SKEL目录路径 -M:创建用户时,但不创建家目录 -D:改变其默认shell -r:创建系统用户 特点:id为1-499之间且不会为用户创建家目录 [root@soysauce ~]# useradd -r nginx # 添加一个系统用户nginx,系统用户默认就没有家目录,相当于指定了-M选项 [root@soysauce ~]# useradd -u 530 -c "hadoop user" -s /sbin/nologin hadoop [root@soysauce ~]# tail -1 /etc/passwd hadoop:x:530:530:hadoop user:/home/hadoop:/sbin/nologin # UID为530,注释信息为"hadoop user" 默认shell为nologin,即不允许登陆系统
2.userdel
userdel - delete a user account and related files # 删除用户账号及其相关的文件 SYNOPSIS userdel [options] LOGIN -r:一并删除家目录 [root@soysauce ~]# userdel -r hadoop # 删除用户nginx,其家目录及文件一并删除 [root@soysauce ~]# tail -1 /etc/passwd # hadoop用户已经被删除了,nginx没有删除 nginx:x:103:160::/home/nginx:/bin/bash [root@soysauce ~]# ls /home/ # 此时家目录下已经没有了hadoop目录
3.usermod
usermod - modify a user account # 修改一个用户的账户信息 SYNOPSIS usermod [options] LOGIN -u UID: 修改UID -g GID:修改GID -G GID:默认会覆盖原有的附加组,如果要是添加,可以同时使用-a选项 -c string:修改注释信息,多个的话则以,分割 -d new home:默认不会迁移用户的家目录,如果要迁移,同时使用-m选项 -s SHELL:修改默认shell -l New_login_name:修改用户登录名称 -e:修改过期期限,格式YYYY-MM-DD -f:修改非活动期限 -L:锁定用户账号,即被锁定的账户不能登陆系统 -U:解锁用户账号 [root@soysauce ~]# usermod -l redhat nginx # 修改nginx用户的登录名为redhat [root@soysauce ~]# echo "redhat"|passwd --stdin redhat # 利用标准输入给redhat用户加上密码 [root@soysauce ~]# tail -1 /etc/passwd redhat:x:103:160::/home/nginx:/bin/bash # 此时登陆名已经修改成了redhat [root@soysauce ~]# usermod -L redhat # 锁定redhat用户,即redhat用户不能登陆系统 [root@soysauce ~]# usermod -U redhat # 解锁redhat用户,此时就可以再登陆系统了
4.id
id - print user identity # 显示用户的ID,以及所属群组的ID SYNOPSIS id [OPTION]... [USERNAME] -n:显示名称 -u:显示UID -g:显示基本组ID -G:显示所有组ID [root@soysauce ~]# id redhat # 显示redhat用户的uid,gid,附加组信息 uid=103(redhat) gid=160(nginx) groups=160(nginx) [root@soysauce ~]# id -u redhat # 显示redhat用户的uid 103 [root@soysauce ~]# id -un redhat # 显示名称,一般-n选项同ugG选项一起使用 redhat
5.w
w - Show who is logged on and what they are doing. # 显示谁登陆了系统,并且他们在做什么 SYNOPSIS w - [husfV] [user] [root@soysauce ~]# w 11:48:35 up 10 days, 20:35, 1 user, load average: 0.00, 0.00, 0.00 USER TTY FROM LOGIN@ IDLE JCPU PCPU WHAT root pts/0 27.23.192.82 09:28 0.00s 0.13s 0.00s w 11:48:35 现在的时间 up 10 days 20:35 系统开机运转到现在经过的时间 1users 登陆系统用户总人数 load average: 0.00, 0.00, 0.00 平均负载,最近一分钟,五分钟和十五分钟的队列长度
6.who
who - show who is logged on # 显示哪些用户登陆了系统 SYNOPSIS who [OPTION]... [ FILE | ARG1 ARG2 ] -b:显示上次系统重启的时间 -r:显示当前系统运行级别 -q或--count:只显示登入系统的帐号名称和总人数 -H或--heading:显示各栏位的标题信息列 [root@soysauce ~]# who # 显示当前登陆的用户,运行终端,登陆时间,IP root pts/0 2015-11-07 09:28 (27.23.192.82) [root@soysauce ~]# who -r # 显示当前系统运行级别 run-level 3 2015-10-27 15:13 last=S [root@soysauce ~]# who -b # 显示上次系统重启时间 system boot 2015-10-27 15:13 [root@soysauce ~]# who -q # 显示登陆系统的用户和用户总数 root # users=1 [root@soysauce ~]# who -H # 显示状态信息栏,方便理解每一列所代表的意思 NAME LINE TIME COMMENT root pts/0 2015-11-07 09:28 (27.23.192.82)
7.whoami
whoami - print effective userid # 显示当前用户的有效用户名 SYNOPSIS whoami [OPTION]... [root@soysauce ~]# whoami # 输出效果与id-un命令相同 root
8.su
su - run a shell with substitute user and group IDs # 切换当前用户身份到其他用户身份 SYNOPSIS su [OPTION]... [-] [USER [ARG]...] -l:切换用户时,同时变更工作目录,以及HOME,SHELL,USER,logname,PATH环境变量 -c<指令>或--command=<指令>:执行完指定的指令后,即恢复原来的身份 [redhat@soysauce ~]# su -c ifconfig root # 切换帐号为root并在执行ifconfig指令后退出变回redhat
9.chsh
chsh - change your login shell # 改变登陆shell SYNOPSIS chsh [ -s shell ] [ -l ] [ -u ] [ -v ] [ username ] -s或--shell:更改用户默认shell -l或--list-shells:列出目前系统可用的shell列表 [root@soysauce ~]# tail -1 /etc/passwd # 此时redhat用户默认shell为/bin/bash redhat:x:500:500::/home/redhat:/bin/bash [root@soysauce ~]# chsh -s /sbin/nologin redhat # 修改redhat用户默认shell为/sbin/nologin Changing shell for redhat. Shell changed. [root@soysauce ~]# tail -1 /etc/passwd redhat:x:500:500::/home/redhat:/sbin/nologin # 此时redhat用户的默认shell已经改为了/sbin/nologin [root@soysauce ~]# chsh -l # 查看当前系统上可用的shell列表 /bin/sh /bin/bash /sbin/nologin /bin/tcsh /bin/csh /bin/ksh [root@soysauce ~]# cat /etc/shells # 同上个命令一样 /bin/sh /bin/bash /sbin/nologin /bin/tcsh /bin/csh /bin/ksh
10.chfn
chfn - change your finger information # 改变finger指令显示的信息 SYNOPSIS chfn [ -f full-name ] [ -o office ] [ -p office-phone ] [ -h home-phone ] [ -u ] [ -v ] [ username ] [root@soysauce ~]# tail -1 /etc/passwd redhat:x:500:500::/home/redhat:/sbin/nologin [root@soysauce ~]# chfn redhat # 修改redhat用户的finger信息 Changing finger information for redhat. Name []: redhat Office []: redhat.com Office Phone []: 110 Home Phone []: 120 Finger information changed. [root@soysauce ~]# tail -1 /etc/passwd redhat:x:500:500:redhat,redhat.com,110,120:/home/redhat:/sbin/nologin
11.finger
finger - user information lookup program # 用户信息查找程序 SYNOPSIS finger [-lmsp] [user ...] [user@host ...] -l:列出该用户的帐号名称,真实姓名,用户专属目录,登入所用的Shell,登入时间,转信地址,电子邮件状态,还有计划文件和方案文件内容 -m:排除查找用户的真实姓名 -s:列出该用户的帐号名称,真实姓名,登入终端机,闲置时间,登入时间以及地址和电话 -p:列出该用户的帐号名称,真实姓名,用户专属目录,登入所用的Shell,登入时间,转信地址,电子邮件状态,但不显示该用户的计划文件和方案文件内容 [root@soysauce ~]# finger # 不加任何参数显示当前登陆系统用户 Login Name Tty Idle Login Time Office Office Phone Host root root pts/0 Nov 7 14:33 (27.23.192.82) [root@soysauce ~]# finger hadoop # 显示hadoop用户的信息 Login: hadoop Name: (null) Directory: /home/hadoop Shell: /bin/bash Never logged in. No mail. No Plan.
12,pwck
pwck - verify integrity of password files # 验证系统认证文件/etc/passwd和/etc/shadow内容和格式的完整性 SYNOPSIS pwck [-q] [-s] [passwd shadow] pwck [-q] [-r] [passwd shadow] [root@soysauce ~]# [root@iZ23fi07mooZ web_zc]# pwck /etc/passwd user adm: directory /var/adm does not exist user news: directory /etc/news does not exist user uucp: directory /var/spool/uucp does not exist user gopher: directory /var/gopher does not exist user ftp: directory /var/ftp does not exist user pcap: directory /var/arpwatch does not exist user oprofile: directory /home/oprofile does not exist user avahi-autoipd: directory /var/lib/avahi-autoipd does not exist user mysql: directory /home/mysql does not exist user apache: directory /home/apache does not exist pwck: no changes
五、用户组管理相关命令
1.groupadd
groupadd - create a new group # 创建一个新组 SYNOPSIS groupadd [-g gid [-o]] [-r] [-f] [-K KEY=VALUE] group -g:指定新建工作组的id -r:创建系统工作组,系统工作组的组ID小于500 [root@soysauce ~]# groupadd -r -g 304 nginx # 添加一个系统组nginx,gid为304 [root@soysauce ~]# tail -1 /etc/group nginx:x:304:
2.groupdel
groupdel - delete a group # 删除一个组 SYNOPSIS groupdel group [root@soysauce ~]# groupdel nginx # 删除nginx组
3.groupmod
groupmod - modify a group # 修改组信息 SYNOPSIS groupmod [-g gid [-o ]] [-n new_group_name] group -g<群组识别码>:设置欲使用的群组识别码 -o:重复使用群组识别码 -n<新群组名称>:设置欲使用的群组名称 [root@soysauce ~]# tail -1 /etc/group hadoop:x:501: # 组名为hadoop [root@soysauce ~]# groupmod -n hadoopgroup hadoop # 修改hadoop用户组新组名为hadoopgroup [root@soysauce ~]# tail -1 /etc/group hadoopgroup:x:501: # 此时已经变成了hadoopgroup
4.gpasswd
gpasswd - administer the /etc/group file # 管理/etc/group文件 SYNOPSIS gpasswd group gpasswd -a user group gpasswd -d user group gpasswd -R group gpasswd -r group gpasswd [-A user,...] [-M user,...] group -a:添加用户到组 -d:从组删除用户 -r:删除密码 -R:限制用户登入组,只有组中的成员才可以用newgrp加入该组 [root@soysauce ~]# gpasswd nginx # 给组添加组密码,组临时切换时,使用newgrp需要用到此时添加的密码 Changing the password for group nginx New Password: Re-enter new password: [root@soysauce ~]# gpasswd -a redhat nginx # 添加redhat用户到nginx组,redhat用户以nginx组为附加组 Adding user redhat to group nginx [root@soysauce ~]# gpasswd -d redhat nginx # 将redhat用户从nginx组中删除 Removing user redhat from group nginx
5.newgrp
newgrp - log in to a new group # 登陆到一个新组 SYNOPSIS newgrp [-] [group] [root@soysauce ~]# gpasswd redhat # 给redhat组添加密码 Changing the password for group redhat New Password: Re-enter new password: [root@soysauce ~]# id hadoop uid=501(hadoop) gid=501(hadoop) groups=501(hadoop) # 此时基本组和附加组都是hadoop [root@soysauce ~]# usermod -a -G redhat hadoop # 将hadoop用户添加到redhat组中 [root@soysauce ~]# id hadoop # 此时hadoop有个附加组为redhat uid=501(hadoop) gid=501(hadoop) groups=501(hadoop),500(redhat) [root@soysauce ~]# su - hadoop # 切换到hadoop用户 [hadoop@soysauce ~]$ id # 此时基本组还是hadoop uid=501(hadoop) gid=501(hadoop) groups=501(hadoop),500(redhat) [hadoop@soysauce ~]$ newgrp redhat # 基本组临时切换成redhat,如本来就属于redhat组,切换时不需要密码 [hadoop@soysauce ~]$ id uid=501(hadoop) gid=500(redhat) groups=500(redhat),501(hadoop) # 此时基本组已经切换成了redhat [hadoop@soysauce ~]$ exit # 退出切换到redhat基本组状态 exit [hadoop@soysauce ~]$ id # 此时基本组恢复成hadoop uid=501(hadoop) gid=501(hadoop) groups=500(redhat),501(hadoop)
6.groups
groups - print the groups a user is in # 显示一个用户所在的组 SYNOPSIS groups [OPTION]... [USERNAME]... [root@soysauce ~]# groups root root : root bin daemon sys adm disk wheel # 显示root用户所属的组,包括基本组和附加组
六、用户密码管理相关命令
1.passwd
passwd - update user’s authentication tokens # 更新账户的密码相关信息 SYNOPSIS passwd [-k] [-l] [-u [-f]] [-d] [-n mindays] [-x maxdays] [-w warndays] [-i inac- tivedays] [-S] [--stdin] [username] -n:设置密码最小使用期限 -x:设置密码最长使用期限 -w:设置密码警告期限 -i:设置密码非活动期 -d:删除密码,仅有系统管理者才能使用 -f:强制执行 -k:设置只有在密码过期失效后,方能更新 -l:锁住账户密码 -u:解锁账户密码 -s:列出密码的相关信息,仅有系统管理者才能使用 [root@soysauce ~]# echo "redhat"|passwd --stdin hadoop # 修改hadoop用户密码为redhat Changing password for user hadoop. passwd: all authentication tokens updated successfully. [root@soysauce ~]# passwd -l hadoop # 锁定hadoop用户,使之不能修改密码 Locking password for user hadoop. passwd: Success [root@soysauce ~]# su - hadoop # 切换至hadoop [hadoop@soysauce ~]$ passwd Changing password for user hadoop. Changing password for hadoop (current) UNIX password: passwd: Authentication token manipulation error # 不能修改密码,提示错误 [hadoop@soysauce ~]$ exit # 退出,回到root用户 [root@soysauce ~]# passwd -S hadoop # 查看hadoop密码状态信息 hadoop LK 2015-11-07 0 99999 7 -1 (Password locked.) [root@soysauce ~]# passwd -u hadoop # 先解锁hadoop用户,使之可以修改自己的密码 Unlocking password for user hadoop. passwd: Success. [root@soysauce ~]# passwd -S hadoop hadoop PS 2015-11-07 0 99999 7 -1 (Password set, MD5 crypt.) # 此时可以看到hadoop密码是MD5加密存放的 [root@soysauce ~]# passwd -d hadoop # 清空hadoop密码,此时hadoop将不能远程登陆系统 Removing password for user hadoop. passwd: Success [root@soysauce ~]# passwd -S hadoop hadoop NP 2015-11-07 0 99999 7 -1 (Empty password.) # 此时密码已经清空了
2.chage
chage - change user password expiry information # 修改用户账号和密码的有效期限 SYNOPSIS chage [options] user -d:上一次更改的日期,日期格式为YYYY-MM-DD -m:密码最短使用期限,为0代表任何时候都可以更改密码 -M:密码最长使用期限 -W:密码警告期限,指的是用户密码到期前,提前多少天收到警告信息 -I:密码非活动期。指的是如果一个密码已过期这些天,那么此帐号将不可用 -E:帐号失效的日期。过了这天,此帐号将不可用 -l:例出当前的设置。由非特权用户来确定他们的密码或帐号何时过期 [root@soysauce ~]# tail -1 /etc/shadow hadoop::16746:0:99999:7::: # hadoop最近一次修改密码时间为2015-11-7 [root@soysauce ~]# chage -d 2015-11-05 hadoop # 修改最近一次密码修改日期为两天前 [root@soysauce ~]# tail -1 /etc/shadow hadoop::16744:0:99999:7::: # 此时第3位16746变为了16744 [root@soysauce ~]# chage -E 2015-11-9 hadoop # 设置密码失效时间为2015-11-9 [root@soysauce ~]# tail -1 /etc/shadow hadoop::16744:0:99999:7::16748: # 此时第8位变为了16748 [root@soysauce ~]# chage -m 3 -M 15 hadoop # 设置密码最短使用期限3天,最长使用期限15天 [root@soysauce ~]# tail -1 /etc/shadow hadoop::16744:3:15:7::16748: # 此时第4位变为了3,第5位变为了15 [root@soysauce ~]# chage -W 8 -I 4 hadoop # 设置密码警告期限为8天,非活动期为4天 [root@soysauce ~]# tail -1 /etc/shadow # hadoop用户密码在上面的示例中清除了,所以此处显示为空 hadoop::16744:3:15:8:4:16748: # 此时第6位变为了8,第7位变为了4 [root@soysauce ~]# chage -l hadoop # 显示hadoop用户账号密码状态信息 Last password change : Nov 05, 2015 Password expires : Nov 20, 2015 Password inactive : Nov 24, 2015 Account expires : Nov 09, 2015 Minimum number of days between password change : 3 Maximum number of days between password change : 15 Number of days of warning before password expires : 8
总结:
/etc/passwd 用户账户信息文件
/etc/shadow 安全的用户账户信息文件
/etc/group 用户所属组信息文件
/etc/gshadow 安全的用户组信息文件
/etc/default/useradd 创建用户时默认属性定义文件
/etc/skel/ 创建用户家目录时默认复制的文件夹
/etc/login.defs 影子文件配套配置文件
/etc/sudoers 授权用户使用sudo命令文件
/etc/shells 系统上合法的shell列表