Linux⽤户和⽤户组管理命令
1. ⽤户管理命令
(1) ⽤户添加命令 useradd
命令格式:useradd [选项] ⽤户名
选项:
-u UID:⼿⼯指定⽤户的UID号
-d 家⽬录:⼿⼯指定⽤户的家⽬录
-c ⽤户说明:⼿⼯指定⽤户的说明
-g 组名:⼿⼯指定⽤户的初始组
-G 组名:指定⽤户的附加组
-s shell:⼿⼯指定⽤户的登录shell,默认是/bin/bash
例如,简单地添加⼀个⽤户 xiaobao,则执⾏ useradd xiaobao 即可。现在看⼀下添加⽤户 xiaobao 后会产⽣什么影响:①通过 grep 命令查看 /etc/passwd、/etc/shadow、/etc/group、/etc/gshadow 这4个配置⽂件的变化
可以看到每个⽂件中都分别出现了⼀个⽤户名为 xiaobao 的记录。
②查看是否产⽣了家⽬录 /home/xiaobao 和邮箱 /var/spool/mail/xiaobao
可以看到已经产⽣了 xiaobao 这个⽤户的家⽬录和邮箱。
当然我们也可以指定选项添加⽤户,如:
先创建⼀个⽤户组 dabao: groupadd dabao
创建⼀个⽤户dabao: useradd -u 550 -g dabao -G root -d /home/dabao  -c "test user" -s /bin/bash dabao
此时通过 grep 命令查看 /etc/passwd 和 /etc/group ⽂件:
③定义⽤户默认设置值的两个⽂件 /etc/default/useradd 和 /etc/login.defs
/etc/default/useradd ⽂件:
GROUP=100          # ⽤户默认组
HOME=/home      # ⽤户家⽬录
INACTIVE=-1        # 密码过期宽限天数(对应于影⼦⽂件/etc/shadow的第7字段)
EXPIRE=                # 密码失效时间(对应于影⼦⽂件/etc/shadow的第8字段)
SHELL=/bin/bash  #默认shell
SKEL=/etc/skel      #模板⽬录
CREATE_MAIL_SPOOL=yes    #是否建⽴邮箱/etc/login.defs ⽂件:
/etc/login.defs ⽂件内容相对较多,去掉注释后的主要内容如下:
PASS_MAX_DAYS 99999  # 密码有效期(对应于影⼦⽂件/etc/shadow的第5字段)
PASS_MIN_DAYS 0  # 密码修改间隔(对应于影⼦⽂件/etc/shadow的第4字段)
PASS_MIN_LEN 5  # 密码最⼩5位( PAM)
PASS_WARN_AGE 7  # 密码到期警告(对应于影⼦⽂件/etc/shadow的第6字段)
UID_MIN 1000  # 最⼩和最⼤UID范围
UID_MAX 60000
GID_MIN 1000  # 最⼩和最⼤GID范围
GID_MAX 60000
ENCRYPT_METHOD SHA512  # 加密模式
(2) 修改⽤户密码 passwd
只执⾏ useradd 命令添加⽤户,这样的⽤户是不能正常使⽤的,还需要给⽤户设置密码,这就需要⽤到 passwd 命令。
命令格式:passwd [选项] ⽤户名
选项:
-S    查询⽤户密码的密码状态。仅root⽤户可⽤。
-l    暂时锁定⽤户。仅root⽤户可⽤。
-u  解锁⽤户。仅root⽤户可⽤。
--stdin  可以通过管道符输出的数据作为⽤户的密码。
①查看密码状态:
各字段如下:
⽤户名
密码设定时间(2016-01-07)
linux登录命令密码修改间隔时间(0)
密码有效期(99999)
密码修改到期前的警告时间(7)
密码过期后的宽限天数(-1:表⽰密码永远不会失效)
②锁定⽤户和解锁⽤户:
锁定sky⽤户:passwd -l sky
查看 /etc/shadow ⽂件可以看出锁定后在 sky ⽤户真正的密码串之前加上了两个感叹号,导致原始密码失效,从⽽锁定了 sky ⽤户。当然⼿⼯修改 /etc/shadow ⽂件中该⽤户的密码串也可以锁定⽤户。
锁定 sky ⽤户后再登陆 sky ⽤户会发现登陆失败,显⽰密码验证错误:
解锁sky⽤户:passwd -u sky
解锁后发现 sky ⽤户的密码串的前两个感叹号消失了,此时 sky ⽤户⼜可以恢复登陆了。
③使⽤字符串作为⽤户的密码:
echo "<;字符串>" | passwd --stdin <⽤户名>
(3) 修改⽤户信息 usermod
useradd 是添加新⽤户时同时进⾏设置,⽽ usermod 是修改已经存在的⽤户信息。
命令格式:usermod [选项] ⽤户名
选项:
-u UID:修改⽤户的UID号
-c ⽤户说明:修改⽤户的说明信息
-G 组名:修改⽤户的附加组
-L:临时锁定⽤户(Lock)
-U:解锁⽤户锁定(Unlock)
例如:修改已存在的⽤户 sky 的说明为test user,修改 sky 的 UID 为1024,并把 sky 加⼊ root 组
先查看⽤户 sky 的信息:
⽤ usermod 命令进⾏修改:
通过查看 /etc/passwd 和 /etc/group ⽂件,可以看出⽤户信息修改成功。
⽤usermod 的 -L 和 -U 选项来锁定、解锁⽤户与 passwd 命令的作⽤是⼀样的:
可以看出⽤ usermod 命令和 passwd 命令相⽐,前者在密码串前加了⼀个感叹号,⽽后者在密码串钱加了两个感叹号,但作⽤是⼀样的。
(4) 修改⽤户密码状态 chage
命令格式:chage [选项] ⽤户名
选项:
-l:列出⽤户的详细密码状态
-d ⽇期:修改密码最后⼀次更改⽇期(对应于/etc/shadow的第3字段)
-m 天数:两次密码修改间隔(对应于/etc/shadow的第4字段)
-M 天数:密码有效期(对应于/etc/shadow的第5字段)
-W 天数:密码过期前警告天数(对应于/etc/shadow的第6字段)
-I 天数:密码过期后宽限天数(对应于/etc/shadow的第7字段)
-E ⽇期:账号失效时间(对应于/etc/shadow的第8字段)
看⼀下 -l 选项:
所显⽰的信息即为 /etc/shadow 中相关信息。
上⾯⽤命令来修改信息的都可以在 /etc/shadow ⽂件中⽤ vi 进⾏修改,但有⼀个重要的命令需要说明⼀下:
chage -d 0 <⽤户名>
这个命令其实是把密码修改⽇期归0了,这样⽤户⼀登陆就要修改密码,修改密码后密码修改⽇期就不再是0了,下次便可以正常登陆了。
对⽤户 sky 执⾏此命令后,/etc/shadow ⽂件中⽤户 sky 的第三个字段变为0。此时登陆⽤户 sky 时便要求修改密码:
修改密码后,密码修改时期就不再是0了:
所以,下次再登陆⽤户 sky 输⼊修改后的密码就可以正常登陆了。
(5) 删除⽤户 userdel
命令格式:userdel [-r] ⽤户名
选项:
-r  删除⽤户的同时删除⽤户家⽬录
当然也可以进⾏⼿⼯删除⽤户:删除  /etc/passwd、/etc/shadow、/etc/group、/etc/gshadow  4个配置⽂件中要删除⽤户的⾏,删除邮件
/var/spool/mail/<;要删除的⽤户名>和家⽬录  /home/<;要删除的⽤户名>。⼿⼯删除⽤户时要想确定⽤户是否已经被删除,可通过 useradd <;要删除的⽤户名> 命令来判断,若出现已存在该⽤户则表⽰⼿⼯删除未成功,若⽆提⽰则表⽰⼿⼯删除完成。
(6) 查看⽤户ID id
命令格式: id <⽤户名>
显⽰⽤户的⽤户ID,初始组ID,所属组的ID(包括初始组ID)
(7) 切换⽤户⾝份 su
命令格式:su [选项] ⽤户名
选项:
- :选项只使⽤“-”代表连带⽤户的环境变量⼀起切换
-c 命令:仅执⾏⼀次命令,⽽不切换⽤户⾝份
su root      # 只能获得root的执⾏权限,不能获得环境变量
su - root    # 切换到root并获得root的环境变量及执⾏权限
上⾯两个命令可以省略 root,因为 su 命令默认切换到 root。
注意:有些命令即使你使⽤ su root 切换到 root ⽤户,仍⽆法执⾏,所以切换到 root 时,建议使⽤su - root。
su - root -c "useradd user1"    # 不切换成root,但是执⾏ useradd 命令添加 user1 ⽤户
2. ⽤户组管理命令
(1) 添加⽤户组 groupadd
命令格式: groupadd [选项] 组名
选项:
-g GID:指定⽤户组ID