Loading

七、用户管理

七、用户管理

在Linux系统中创建、增加,以及删除用户和用户组,实际上都是修改系统中对应的文件,与用户和用户组直接相关的文件主要有/etc/passwd、/etc/shadow、/etc/group、/etc/gshadow这四个文件。


7.1 Linux系统用户相关的配置文件

与用户相关的配置文件主要包含如下两个:

/etc/passwd   #存储用户信息的文件
/etc/shadow   #存储用户密码信息的文件

/etc/passwd内容之间通过“ :”号划分成了多个字段,共7部分,这7部分分别定义了用户的不同属性,/etc/passwd文件的实际内容具体如下:

image-20221111101916569


以passwd文件中root一行为例介绍各个字段的作用

image-20221111102111843


对passwd文件中每一行各个字段的详细说明

image-20221111102137950


看一下/etc/passwd文件的权限,所有用户都有读权限,因为每个用户登录时都需要取得UID与GID来判断权限,所以/etc/passwd文件的权限为644,但这样一来就会带来安全问题,即所有的用户都可以读/etc/passwd文件。即使文件内的密码是加密的,也还是存在一定的被攻击破解的安全隐患。因此,后来就将密码的信息移动到/etc/shadow文件了。

image-20221111105039763


可以发现,/etc/shadow的权限属性位置都是“ - ”,即所有用户都不可读(不包含root)

image-20221111105210230


与/etc/passwd文件一样,shadow文件中的每一行内容,也是以冒号( :)作为分隔符的,共包含9个字段

image-20221111105647269

image-20221111105344065


7.2 Linux系统用户组相关的配置文件

与用户组直接相关的主要配置文件也有两个:

/etc/group
/etc/gshadow

/etc/group文件是存储用户组相关信息的文件,内容包括用户组名称、用户组GID等属性。/etc/group文件与/etc/passwd文件的权限相同,也是644。

image-20221111110004481


/etc/group文件的实际内容格式具体如下:

image-20221111110142234


group文件中每一行各个字段的详细说明

image-20221111110219861


早期对于大型服务器,针对很多用户和用户组,定制一些关系结构比较复杂的权限模型,可以选择设置用户组密码。比如,如果不想让一些非用户组成员永久拥有用户组的权限和特性,那么可以通过密码验证的方式来让某些用户临时拥有一些用户组特性,这时就要用到用户组密码了,在实际运维工作中,一般是用不到这个功能的,所以gshadow文件了解即可。


7.3 用户管理常见命令汇总

image-20221111110648466


7.3.1 useradd命令

useradd命令的工作原理

Linux系统中添加用户的命令有useradd和adduser,这两个命令的功能是一样的。当然除了useradd和adduser命令以外,我们还可以通过修改用户配置文件/etc/passwd和/etc/group等文件的办法来直接添加用户,不过不推荐使用该方法。


当不带任何参数使用useradd命令添加用户时:

  1. 首先会读取配置文件/etc/login.defs和/etc/default/useradd中预先定义的规则,并根据设置的规则添加用户。
  2. 还会向/etc/passwd和/etc/group文件内添加新建的用户和用户组记录。
  3. 当然,/etc/shadow和/etc/gshadow也会同步生成记录。
  4. 同时系统还会根据/etc/default/useradd及/etc/login.defs文件中配置的信息建立用户的家目录。
  5. 并复制/etc/skel中所有隐藏的环境配置文件到新用户的家目录中,以完成对用户环境的初始化设置。

/etc/login.defs文件

/etc/login.defs文件的作用是预先定义创建用户时需要的一些用户默认配置信息。如创建用户时,是否需要家目录,以及UID和GID的取值起始值及取值范围,用户及密码的有效期限等等。


下面是/etc/logins.defs文件的内容及注释说明:

image-20221111112157058


/etc/default/useradd文件

/etc/default/useradd文件是在使用useradd添加用户时预先加载的默认用户信息配置文件,下面是/etc/default/useradd文件的内容及注释说明:

image-20221111113228889


当我们使用useradd添加用户时,用户家目录下的隐藏环境变量文件,都是从这里配置的/etc/skel目录中复制过去的。


/etc/skel目录

/etc/skel目录是用来存放新用户需要的所有基础环境变量文件的目录,当添加新用户时,这个目录下的所有文件都会被自动复制到新添加的用户的家目录下;默认情况下,/etc/skel目录下的所有文件都是隐藏文件(以点号开头的文件),通过修改、添加、删除/etc/skel目录下的环境变量文件,我们可为新创建的用户提供统一的、标准的、定制化的初始化用户环境。

image-20221111135039699


有关创建用户的工作原理总结

当不添加任何参数使用useradd添加用户时,默认配置就是读取/etc/default/useradd信息,并根据该文件的信息设定用户。这时,会从/etc/skel中复制用户需要的环境变量文件,同时还会读取/etc/login.defs,并根据该文件设定相关的默认信息。这是一个用户在创建过程中的实现过程,当然了,还可以加上参数选项以改变文件中的默认设定。


useradd命令常用参数

image-20221111135751393


常用语法示例:

uesradd yinjay  #默认创建yinjay用户,家目录默认在/home/下
uesradd yinjay -u 888 -g root  #创建用户yinjay,属于指定组root,UID为888
uesradd mysql -s /sbin/nologin -M  #创建一个虚拟用户mysql,禁止其登录,且不创建家目录
uesradd yinjay -e "2022/12/11"  #添加用户yinjay的操作,用户有效期1个月

useradd chen -u 806 -G root,yinjay,sa -s /bin/sh -d /home/chensir  
#添加用户chen,UID指定为806,分别属于用户组root、yinjay、sa的成员,其Shell解释器类型为/bin/sh,设置家目录为/home/chensir

chage -l 用户名 可查看用户设置情况


7.3.2 usermod命令

usermod的作用是修改用户,而useradd的作用是添加用户,本质上都是对用户进行操作,因此,这两个命令大部分的参数作用都是一样的,只不过命令不同而已。


usermod常用参数

image-20221111144732137


常用语法示例:

usermod -u 999 -G sa -s /sbin/nologin -d /home/chen
#修改chen用户属性,UID改为999,所属的附加组改为sa,同时禁止其登录,家目录改为/home/chen

7.3.3 userdel命令

userdel命令的参数

image-20221111145310179


在企业场景中,如果不能确认用户相关的目录有没有重要数据,就不能使用-r,可以进行以下两种方法:

  • vi /etc/passwd,然后注释掉用户,观察1个月,这样若出问题还可以还原。相当于进行操作前备份。
  • 将登录Shell修改为/sbin/nologin。

处于登录状态中的用户无法被删除!


7.3.4 groupadd命令

groupadd命令的常见参数

image-20221111145650632


常用语法示例:

groupadd -g 803 yinjay_group

7.3.5 groupdel命令

常用语法示例:

groupdel yinjay

groupdel不能删除还有用户归属的主用户组!


7.3.6 passwd命令

passwd命令常见参数

image-20221111150352530


常用语法示例:

passwd yinjay   #更改yinjay用户密码
passwd -S yinjay   #显示账号密码信息(仅root能执行)
echo “123456" | passwd --stdin yinjay  #--stdin从标准输入读取密码

passwd -n 7 -x 60 -w 10 -i 30 test
#要求test用户7天之内不能更改密码,60天以后必须修改密码,过期前10天通知用户,过期后30天禁止用户登录。

1、root用户可以修改任何用户的密码,普通用户只能修改自身的密码。

2、root用户修改密码时,如果不符合系统密码规则,则会给出警告信息,但密码设置仍然有效。而普通用户修改密码时,如果使用的是弱密码,则会给出告警信息,且修改无效。


7.3.7 chage命令

chage命令用于查看或修改用户密码的有效期。


chage命令的参数

image-20221111152105496


常用语法示例:

chage -m7 -M60 -W10 -I30 yinjay
#要求该yinjay用户在7天之内不能更改密码,60天以后必须修改密码,过期前10天通知用户,过期30天之后禁止用户登录。

chage -E 2022-12-11 yinjay   #设置yinjay账户过期时间

7.3.8 su命令

su命令就是切换用户身份的命令,su命令可以在用户之间进行切换,超级权限用户root向普通用户切换不需要密码验证(这就是超级权限所在),其他普通用户之间或者从普通用户切换到root,都需要切换用户的密码验证。


su命令的参数

image-20221111192127172


su命令比较常用的参数为“-”和“-c”,生产环境中常用su - 用户名,因为虽然是切换到root用户了,但并没有改变root用户登录后的环境,有些登录的环境设置还是登录前的用户的。(env命令可查看,但CentOS6以后的系统已经不存在这个环境变量问题了)


chen用户使用root身份执行命令,最后退出root用户,这也是-c的作用。

image-20221111192602083


7.3.9 visudo命令

visudo命令是专门用来编辑/etc/sudoers这个文件的,同时它还提供了语法检查等功能。/etc/sudoers文件是sudo命令的配置文件。


visudo命令的参数

image-20221111192939712


使用示例:

[root@localhost ~]# visudo    <=使用该命令,即打开/etc/sudoers,下面内容在100行左右
## Next comes the main part: which users can run what software on
## which machines (the sudoers file can be shared between multiple
## systems).
## Syntax:
##
##      user    MACHINE=COMMANDS
##
## The COMMANDS section may have other options added to it.
##
## Allow root to run any commands anywhere
root    ALL=(ALL)       ALL
chen    ALL=(ALL)       ALL              <=将chen用户提权为root身份。
yinjay  ALL=(ALL)       /usr/bin/ls      <=将yinjay用户提权为可以root权限执行ls。

## Allows members of the 'sys' group to run networking, software,
## service management apps and more.

通过sudo命令进行系统的授权管理的目的是,既能让运维人员正常工作,又不会威胁到系统的安全,还可以审计用户使用sudo的提权操作命令,默认的用户是无法获得root权限的。


7.3.10 sudo命令

sudo命令可以让普通用户在执行指定的命令或程序时,拥有超级用户(也可以是其他用户)的权限,并且可以有针对性地(精细)将不同命令或程序授予指定的普通用户,同时普通用户不需要知道root密码就可以得到授权,这个授权可以使用visudo配置管理。


sudo命令的参数

image-20221111195117949


使用示例:

前面已经在visudo(/etc/sudoers)中授权了chen用户是拥有root权限,下面在chen用户的终端看看,可以看到直接ls /root是没有权限的,但是执行sudo就能查看到/root目录底下的情况,这是因为在/etc/sudoers中给chen用户授权了。

image-20221111195629915


posted @ 2023-07-17 21:18  YinJayChen  阅读(21)  评论(0编辑  收藏  举报