Linux 系统中的用户和组

Linux 系统中的用户和组

    • 用户和组相关文件
      • /etc/passwd
      • /etc/shadow
      • /etc/group
      • /etc/gshadow
      • 管理配置文件相关命令
        • vipw 和vigr
        • pwck 和 grpck
    • 用户和组管理命令
      • 查看用户和用户组信息
      • 用户管理命令
        • useradd 创建用户
        • usermod 和userdel
        • passwd
        • 使用加密口令
        • 修改用户口令
      • 组账号维护命令
        • groupadd 、groupmod 和groupdel
        • gpasswd 更改组口令
        • groupmems 管理指定组的成员
        • newgrp

用户和组相关文件

/etc/passwd

记录用户及其属性信息(名称,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类型

/etc/shadow

记录用户密码及其相关属性。一行代表一个用户密码信息,共计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日算,多少天后帐号失效,即账户有效期

空		保留

/etc/group

组及其属性信息。一行代表一个组的组信息,共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
空		以当前组为附加组的用户列表(分隔符为逗号)

/etc/gshadow

组密码及其相关属性。一行表示对应一个组的密码信息

[root@centos8 ~]#cat /etc/gshadow
root:::
bin:::
daemon:::
dawn:!::
postdrop:!::
postfix:!::

字段说明

#以root 为例
root	组名称
空		组管理密码,以 ! 开头的密码字段表示密码已被锁定
空		组管理员列表,多个用户之间用 , 分隔
空		属于此附加组的用户列表,多个用户之间用 , 分隔

管理配置文件相关命令

由于/etc/passwd,/etc/shadow,/etc/group,/etc/gshadow 这4个文件的格式非常重要,若修改错误,可能导致系统无法启动。故建议使用以下命令进行修改和检测格式

vipw 和vigr

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

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 创建用户

命令格式 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 和userdel

#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	#删除用户家目录和邮箱,慎用

passwd

常用命令参数
-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 、groupmod 和groupdel

#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 更改组口令

命令格式: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 管理指定组的成员

命令格式: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

临时切换主组,如果用户不属于此组,则需要组密码
命令格式: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

你可能感兴趣的:(常用命令,概念,linux,centos)