Linux用户和用户组管理相关文件内容详解

536 阅读5分钟

零、概览

文件位置内容格式
/etc/passwd存储用户信息用户名:密码占位符:用户编号(uid):归属组编号(gid):用户描述(可为空):家目录:shell路径
/etc/shadow存储用户的密码信息用户名:加密后的密码:上次修改密码日期:密码策略(4个数字):账号失效日期:保留位
/etc/group存储用户组信息组名:密码位:组编号:组内成员
/etc/gshadow存储组的密码信息组名:密码:组管理员:组内成员
/etc/sudoers配置命令执行权限用户名:权限定义:权限(sudo)

一、/etc/passwd

该文件是用户信息配置文件,存储了用户的基本信息,所有用户对该文件有读权限。

部分内容如下:
在这里插入图片描述
每行代表一个用户,每个用户有7个字段,其格式如下:

用户名:密码占位符:用户编号(uid):归属组编号(gid):用户描述(可为空):家目录:shell路径

其中,

用户编号

​ 系统用户:0-999(0为root用户)

​ 普通用户:1000-65535(2.6.x 内核之前)、1000-232{2^{32}}-1(2.6.x 内核之后)

密码占位符:以前的系统,用户加密形式的密码就在这里,但由于所有用户都可以读该文件,存在密码泄漏的风险,所以后来把用户加密形式的密码单独存在了/etc/shadow文件中,并且只有root用户才可以读该文件,保证了密码的安全性。而/etc/passwd中的这个位置用"x"占位,表示该用户有密码。

二、/etc/shadow

该文件只有 root 用户有读权限,保证了密码不被其他用户看到。

在这里插入图片描述

该文件部分内容如下:

在这里插入图片描述

每行代表一个用户,每个用户有9个字段,其格式如下:

用户名:加密后的密码:上次修改密码日期:密码策略(4个字段):账号失效日期:保留位

其中,

加密后的密码:如用户没有密码,则用“*”或“!!”表示,此时账户不能登录

上次修改密码日期: 修改日期,距1970-01-01的天数,使用命令:

​ date -d “1970-01-01 <num_of_days> day”可以查看,如:

​ date -d “1970-01-01 18755 days”

密码策略:包括4个字段,分别为

密码不可修改的天数:密码需要重新修改的天数:密码过期前提示的天数:密码过期后宽限的天数

其中,

密码不可修改的天数:密码修改后,在该天数内不可再次修改

密码需要重新修改的天数:密码修改后,在该天数以后需要重新修改,否组过期

密码过期前提示的天数:密码快过期该天数前会提示用户,你的密码还有n天过期,请修改密码。

密码过期后宽限的天数:用户密码过期后,该天数内还可以登录系统,还可以修改密码,过后就不登录了。

账号失效日期:不论密码是否过期,该日期后,用户不能登录。

保留位:为后续新功能保留。

三、/etc/group

部分内容如下:


每行代表一个组,每个组有4个字段,其格式如下:

组名:组密码占位符:组ID:组中用户(多个用户用","隔开)

其中,

组密码占位符:和用户密码占位符一样,加密形式的密码单独存放在/etc/gshadow文件中。

组中用户:如果该组是某用户的初始组,则改用户不写在这里

四、/etc/gshadow

该文件只有 root 用户有读权限,保证了密码不被其他用户看到。
在这里插入图片描述

部分内容如下:

每行代表一个组,每个组有4个字段,其格式如下:

组名:加密后的组密码:组管理员:组中用户(多个用户用","隔开)

其中,

加密后的组密码:如果没有密码,用"!"表示。

组管理员:组管理员用户名,可为空。

五、/etc/sudoers

由于涉及sudo权限的赋予,该文件只有 root 及同组用户有读权限。
在这里插入图片描述

该文件内容如下: 在这里插入图片描述

翻译及说明如下:

#
# This file MUST be edited with the 'visudo' command as root.
# 这个文件必须是'root'用户以'visudo'命令进行编辑
# 
# Please consider adding local content in /etc/sudoers.d/ instead of
# directly modifying this file.
# 请考虑在/etc/sudoers.d/中添加本地内容而不是直接修改该文件。  
# 
# See the man page for details on how to write a sudoers file.
# 有关如何编写sudoers文件的详细信息,请参阅手册页。(使用命令 man sudoers)
# 
Defaults	env_reset
Defaults	mail_badpass
Defaults	secure_path="/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin:/snap/bin"

# Host alias specification
# 主机别名规范

# User alias specification
# 用户别名规范

# Cmnd alias specification
# 驱动命令别名规范

# User privilege specification
# 用户权限规范
# 语法:
# 用户或用户组 登录的主机=(可以变换的身份)可以执行的命令
# 说明:
# 	加“%”代表用户组
#	命令部分(等号后面)可以有其他的格式,如下面例子:
# %sys ALL = NETWORKING, SOFTWARE, SERVICES, LOCATE, DRIVERS
# 允许sys用户组中的用户使用NETWORKING等所有别名(别名在上方别名规范中配置)中配置的命令
#
# %wheel    ALL=(ALL)    NOPASSWD: ALL
# 允许wheel用户组中的用户在不输入该用户的密码的情况下使用所有命令
#
# %users  ALL=/sbin/mount /mnt/cdrom, /sbin/umount /mnt/cdrom
# 允许users用户组中的用户像root用户一样使用mount、unmount、chrom命令 

# 允许root用户执行任意路径下的任意命令 
root	ALL=(ALL:ALL) ALL

# Members of the admin group may gain root privileges
# admin组的成员可以获得root权限  
%admin ALL=(ALL) ALL

# Allow members of group sudo to execute any command
# 允许sudo组的成员执行任何命令  
%sudo	ALL=(ALL:ALL) ALL

# See sudoers(5) for more information on "#include" directives:

#includedir /etc/sudoers.d