记录用户及其属性信息(名称,UID,主GID)。每一行代表一个用户的相关信息,共计7个字段,用 :
隔开
[root@centos8 ~]#cat /etc/passwd
root:x:0:0:root:/root:/bin/bash
bin:x:1:1:bin:/bin:/sbin/nologin
……省略部分内容……
dawn:x:1000:1000::/home/dawn:/bin/bash
postfix:x:89:89::/var/spool/postfix:/sbin/nologin
字段说明
#以root 这行为例
root 用户名,即用户的登录名称
x 占位符,早期unix 用于存储用户密码。
后因安全考虑,密码转存于/etc/shadow 中并从该文件中获取
0 UID,用户编号,编号依次递增,范围:0-65535。每个用户拥有唯一编号,默认管理员为0。
centos6中1-499为系统用户,500开始为普通用户
centos7以后版本1-999为系统用户,1000开始为普通用户
0 GID,用户所属的主组ID
root 用户描述信息,如姓名,部门,电话等
/root 用户的家目录或初始化工作目录。root用户的家目录默认在/root,普通用户默认在/home/用户名
/bin/bash 用户默认使用的shell 类型,root和普通用户默认使用/bin/bash。
系统用户随计算机启动而运行,不需用户登录后执行,故为/sbin/nologin类型
记录用户密码及其相关属性。一行代表一个用户密码信息,共计9个字段,用 :
分割
[root@centos8 ~]#cat /etc/shadow
root:$6$WnWLCMu8JknR0pLN$dCFGP8ORn3TOBiD9hVcHNmERGpTetCCgPdHwaUjX55lglD2jyvzcaSsG7FITZE6oJRSnspEVUbeUwsXSvimEW0::0:99999:7:::
bin:*:18078:0:99999:7:::
……省略部分内容……
dawn:$6$zIcuT4BF9bZTKDo4$y..YDDwF.m8FzmYiWVM6IlB542Oukl76lBLMujFePSUeoe2Xt.Em64GdzutZU8JjkHPrSPNrdTkPf9Edwh0sS.:18473:0:99999:7:::
postfix:!!:18473::::::
字段说明
#以dawn 用户为例
dawn 用户名,对应/etc/passwd 文件中对应的同名用户的密码信息
$6$WnWLCMu8JknR0pLN$dCF... 使用3个$ 符号分隔
第一段 加密算法,使用数字表示。1:MD5算法,6:SHA512算法
第二段 盐,加密算法的随机因子,避免相同密码加密后的密文一样
第三段 密码密文
如果是以 ! 开头,表示密码已被锁定
18473 修改密码的日期,数值表示从1970年1月1日至修改密码那天的天数
0 再过几天可修改密码,0 表示随时可以修改密码,即最短密码有效期
99999 再过几天必须修改密码,99999表示永不过期,即最长密码有效期
7 密码过期的前几天系统提醒用户,默认为7天
空 宽限天数,密码过几天后还能使用的天数,超过后密码锁定,空表示密码过期后仍可登录
空 从1970年1月1日算,多少天后帐号失效,即账户有效期
空 保留
组及其属性信息。一行代表一个组的组信息,共4个字段,用 :
分隔
[root@centos8 ~]#cat /etc/group
root:x:0:
bin:x:1:
daemon:x:2:
……省略……
dawn:x:1000:
postdrop:x:90:
postfix:x:89:
字段说明
#
root 组名称
x 组密码,通常不需要设定,密码被记录在/etc/gshadow
GID 组ID
空 以当前组为附加组的用户列表(分隔符为逗号)
组密码及其相关属性。一行表示对应一个组的密码信息
[root@centos8 ~]#cat /etc/gshadow
root:::
bin:::
daemon:::
dawn:!::
postdrop:!::
postfix:!::
字段说明
#以root 为例
root 组名称
空 组管理密码,以 ! 开头的密码字段表示密码已被锁定
空 组管理员列表,多个用户之间用 , 分隔
空 属于此附加组的用户列表,多个用户之间用 , 分隔
由于/etc/passwd,/etc/shadow,/etc/group,/etc/gshadow 这4个文件的格式非常重要,若修改错误,可能导致系统无法启动。故建议使用以下命令进行修改和检测格式
vipw
用于编辑/etc/passwd 和/etc/shadow 文件,且具有文件格式的检查功能。如果格式错误,会有提示信息
# 编辑/etc/passwd
[root@centos8 ~]#vipw
root:x:0:0:root:/root:/bin/bash
bin:x:1:1:bin:/bin:/sbin/nologin
……省略部分内容……
dawn:x:1000:1000::/home/dawn:/bin/bash
postfix:x:89:89::/var/spool/postfix:/sbin/nologin
……省略部分内容……
# 编辑/etc/shadow
[root@centos8 ~]#vipw -s
root:$6$WnWLCMu8JknR0pLN$dCFGP8ORn3TOBiD9hVcHNmERGpTetCCgPdHwaUjX55lglD2jyvzcaSsG7F
ITZE6oJRSnspEVUbeUwsXSvimEW0::0:99999:7:::
bin:*:18078:0:99999:7:::
……省略部分内容……
dawn:$6$zIcuT4BF9bZTKDo4$y..YDDwF.m8FzmYiWVM6IlB542Oukl76lBLMujFePSUeoe2Xt.Em64Gdzu
tZU8JjkHPrSPNrdTkPf9Edwh0sS.:18473:0:99999:7:::
postfix:!!:18473::::::
……省略部分内容……
vigr
用于编辑/etc/group 和/etc/gshadow 文件,且具有文件格式的检查功能。若格式错误,会有格式错误
#编辑/etc/group
[root@centos8 ~]#vigr
root:x:0:
bin:x:1:
……省略部分内容……
dawn:x:1000:
postdrop:x:90:
postfix:x:89:
……省略部分内容……
#编辑/etc/gshadow
[root@centos8 ~]#vigr -s
root:::
bin:::
……省略部分内容……
dawn:!::
postdrop:!::
postfix:!::
……省略部分内容……
pwck
专用于检查用户相关的配置文件的格式和一致性
grpck
专用于检查组相关的配置文件的格式和一致性
#对/etc/passwd 文件进行格式检查
[root@centos8 ~]#pwck /etc/passwd
#对/etc/shadow 文件进行格式检查
[root@centos8 ~]#pwck /etc/shadow
user 'bin': directory '7' does not exist
user 'daemon': directory '7' does not exist
……省略部分内容……
#对/etc/group 文件进行格式检查
[root@centos8 ~]#grpck /etc/group
#对grpck /etc/gshadow 文件进行格式检查
[root@centos8 ~]#grpck /etc/gshadow
invalid group file entry
delete line 'root:::'?
……省略部分内容……
getent 获取的是配置文件中的原始数据
id 获取用户的uid 和gid 信息
groups 获取用户属于那个组
getent [passwd|shadow|group|gshadow] [username|groupname]
#查看root 的用户信息
[root@centos8 ~]#getent passwd root
root:x:0:0:root:/root:/bin/bash
#查看root 的密码信息
[root@centos8 ~]#getent shadow root
root:$6$WnWLCMu8JknR0pLN$dCFGP8ORn3TOBiD9hVcHNmERGpTetCCgPdHwaUjX55lglD2jyvzcaSsG7FITZE6oJRSnspEVUbeUwsXSvimEW0::0:99999:7:::
#查看dawn 的组信息
[root@centos8 ~]#getent group dawn
dawn:x:1000:
#查看dawn 组密码信息
[root@centos8 ~]#getent gshadow dawn
dawn:!::
#使用id 查看用户的uid和gid信息
[root@centos8 ~]#id dawn
uid=1000(dawn) gid=1000(dawn) groups=1000(dawn)
#使用groups 查看用户的组信息
[root@centos8 ~]#groups dawn
dawn : dawn
chfn 和finger 可修改和查看用户的描述信息
#编辑帐号dawn 的用户描述信息
[root@centos6 ~]#chfn dawn
Changing finger information for dawn.
Name []: dawn
Office []: IT
Office Phone []: 400-800-5623
Home Phone []:
Finger information changed.
#查看帐号dawn 的用户描述信息,centos6支持,以后的版本都不支持
[root@centos6 ~]#finger dawn
Login: dawn Name: dawn
Directory: /home/dawn Shell: /bin/bash
Office: IT, 400-800-5623
Never logged in.
No mail.
No Plan.
[root@centos6 ~]#getent passwd dawn
dawn:x:500:500:dawn,IT,400-800-5623:/home/dawn:/bin/bash
命令格式 useradd [options] LOGIN
常用参数说明
-u UID 指定创建用户的UID
-o 配合选项-u使用,不检查UID的唯一性
-g GID 指明用户所属主要组,可为组的名称,也可为GID
-d HOME_DIR 以指定的路径为家目录
-c COMMENT 用户的描述信息
-s SHELL 指明用户的默认shell程序,可用列表在/etc/shells 文件中
-G GROUP1 为用户指明附加组,组必须实现存在
-r 创建系统用户(centos6:id<500,centos7以上:id<1000)
-N 不创建和用户同名的组作为主组
-M 不创建家目录,一般用于非系统用户
-p --password 设置加密密码
范例
#增加系统用户apache,指定uid=48,gid=apache,shell=/sbin/nologin,
#家目录=/var/www,描述信息=Apache ,loginname=apache
[root@centos8 ~]#useradd -r -u 48 -g apache -s /sbin/nologin -d /var/www -c "Apache" apache
#创建用户haha 并设定加密密码
[root@centos8 ~]#useradd -p `openssl passwd -6 Ad123` haha
useradd 命令创建用户默认值设定由/etc/default/useradd 定义
[root@centos8 ~]#cat /etc/default/useradd
# useradd defaults file
GROUP=100 #创建用户不创建组时的默认组,为users
HOME=/home #设定家目录路径
INACTIVE=-1 #对应/etc/shadow 文件第7列,即用户密码过期的宽限期
EXPIRE= #对应/etc/shadow 文件第8列,即用户帐号的有效期
SHELL=/bin/bash #对应/etc/passwd 文件第7列,即用户默认的shell类型
SKEL=/etc/skel #设定家目录中的文件内容模板
CREATE_MAIL_SPOOL=yes #创建用户邮箱,存放目录 /var/spool/mail
创建用户的相关文件
/etc/login.defs 设定用户密码的加密算法,密码过期时间,密码长度等信息
/etc/skel/* 设定用户家目录内默认文件
/etc/default/useradd 创建用户默认值的设定
#usermod 常用用法
#锁定用户
[root@centos8 ~]#usermod -L dawn
#解锁用户-先设置用户密码为空,再解锁
[root@centos8 ~]#usermod -p '' dawn
[root@centos8 ~]#usermod -U '' dawn
#清空附加组
[root@centos8 ~]#usermod -G '' dawn
#追加附加组,-G 设置附加组,覆盖
[root@centos8 ~]#usermod -aG 'wheel' dawn #组必须实现存在
#修改shell类型的语法
[root@centos8 ~]#chsh -s /bin/csh dawn
[root@centos8 ~]#logout
[root@centos8 ~]#echo $SHELL
#userdel 的常用用法,默认不删除用户家目录和邮箱
[root@centos8 ~]#userdel -f wheel #强制删除
[root@centos8 ~]#userdel -r dawn #删除用户家目录和邮箱,慎用
常用命令参数
-e 修改shadow 的第三个内容为0,用户登录时要求重置
-l 锁定密码,效果等同于usermod -L,shadow文件中密码加上!
-u 取消锁定,效果等同于usermod -U,取消-l 命令添加的!
--stdin 使用管道时传入密码的方式,常用于shell 脚本
范例
[root@centos8 ~]#getent shadow dawn
dawn:$6$VPihv6VXqsqtWKq8$6lMH.l1cqV0L8m5RryGR.lSjRxGguUaYrva53ZwPuzddhyHfRUszAbIa0sWxultgCD0jB1JT5iThGrXO2K1Al1:18475:0:99999:7:::
[root@centos8 ~]#passwd -e dawn
Expiring password for user dawn.
passwd: Success
[root@centos8 ~]#getent shadow dawn
dawn:$6$VPihv6VXqsqtWKq8$6lMH.l1cqV0L8m5RryGR.lSjRxGguUaYrva53ZwPuzddhyHfRUszAbIa0sWxultgCD0jB1JT5iThGrXO2K1Al1:0:0:99999:7:::
[root@centos8 ~]#passwd -l dawn
Locking password for user dawn.
passwd: Success
[root@centos8 ~]#getent shadow dawn
dawn:!!$6$VPihv6VXqsqtWKq8$6lMH.l1cqV0L8m5RryGR.lSjRxGguUaYrva53ZwPuzddhyHfRUszAbIa0sWxultgCD0jB1JT5iThGrXO2K1Al1:0:0:99999:7:::
[root@centos8 ~]#passwd -u dawn
Unlocking password for user dawn.
passwd: Success
[root@centos8 ~]#getent shadow dawn
dawn:$6$VPihv6VXqsqtWKq8$6lMH.l1cqV0L8m5RryGR.lSjRxGguUaYrva53ZwPuzddhyHfRUszAbIa0sWxultgCD0jB1JT5iThGrXO2K1Al1:0:0:99999:7:::
#设定获取密文密码,-6表示sha512加密算法
[root@centos8 ~]#openssl passwd -6 Ad123
#加盐的加密密码,--salt 表示盐
[root@centos8 ~]#openssl passwd --salt NmXPPEP0NzAtPwzb -6 Ad123
#获取随机口令
[root@centos8 ~]#openssl rand -base64 10
#centos7不支持-6 的sha512的加密算法,只支持-1,即md5。可使用python实现
[root@centos7 ~]#python -c 'import crypt,getpass;pw="dawn";print(crypt.crypt(pw))'
#centos6 使用grub-crypt来生成
[root@centos6 ~]#grub-crypt
#修改口令 方法一 管道重定向实现(Ubuntu不支持,不能修改root)
[root@centos8 ~]#echo ad123 | passwd --stdin dawn
#修改口令 方法二 chpasswd
[root@centos8 ~]#echo dawn:AD123 | chpasswd
#修改口令 方法三
[root@ubuntu18:~]#echo -e 'Ad1234\nAd1234' | passwd dawn
#下一次登录强制重设密码
[root@centos8 ~]#chage -d 0 dawn
[root@centos8 ~]#getent shadow dawn
dawn:$6$VPihv6VXqsqtWKq8$6lMH.l1cqV0L8m5RryGR.lSjRxGguUaYrva53ZwPuzddhyHfRUszAbIa0sWxultgCD0jB1JT5iThGrXO2K1Al1:0:0:99999:7:::
#groupadd 的常用用法
#创建系统组mysql,并指定其的GID 为336
#-g 指定组的GID,-o 允许使用已存在的GID 创建新组,-r 创建系统组
[root@centos8 ~]#groupadd -g 336 -o -r mysql
#修改组,通常不会修改组信息,只会修改用户的组信息
[root@centos8 ~]#groupmod -g 2000 -n newapps -o apps
#删除组,必须保证被删除的组里不存在成员,或必须保证组内的用户未登录
[root@centos8 ~]#groupdel www
groupdel: cannot remove the primary group of user 'www'
[root@centos8 ~]#usermod -g dawn www
[root@centos8 ~]#groupdel www
命令格式:gpasswd [OPTION] GROUP
常见参数选项
-a user 将user 添加到指定组中
-d user 从指定附加组中移除用户user
-A user1,user2... 设置有管理权限的用户列表
范例
[root@centos8 ~]#id dawn
uid=1000(dawn) gid=1000(dawn) groups=1000(dawn)
[root@centos8 ~]#gpasswd -a dawn g1
Adding user dawn to group g1
[root@centos8 ~]#id dawn
uid=1000(dawn) gid=1000(dawn) groups=1000(dawn),1002(g1)
命令格式:groupmems [options] [action]
常见参数选项
-a --add username 将username 添加到指定组中
-g --group groupname 更改为指定组(只有root可操作)
-d --delete username 从组中删除用户
-p --purge 从组中清除所有成员
-l --list 显示组成员列表
范例
[root@centos8 ~]#groupmems -l -g g1
dawn haha
[root@centos8 ~]#groupmems -d haha -g g1
[root@centos8 ~]#id haha
uid=1001(haha) gid=1001(haha) groups=1001(haha)
临时切换主组,如果用户不属于此组,则需要组密码
命令格式:newgrp [-] [group]
如果使用 - 选项,可初始化用户环境
#临时有效,退出shell 就失效
[dawn@centos8 ~]$ touch dawn1.txt
[dawn@centos8 ~]$ ll
total 0
-rw-rw-r--. 1 dawn dawn 0 Aug 1 19:14 dawn1.txt
[dawn@centos8 ~]$ newgrp g1
[dawn@centos8 ~]$ id
uid=1002(dawn) gid=1002(g1) groups=1002(g1),1003(dawn) context=unconfined_u:unconfined_r:unconfined_t:s0-s0:c0.c1023
[dawn@centos8 ~]$ touch wang2.txt
[dawn@centos8 ~]$ ll
total 0
-rw-rw-r--. 1 dawn dawn 0 Aug 1 19:14 dawn1.txt
-rw-r--r--. 1 dawn g1 0 Aug 1 19:16 wang2.txt