文章目录
Linux
用户和用户组管理
用户和用户组管理,顾名思义就是添加用户和用户组、更改密码和设定权限等操作。可能有很多人觉得用户管理没有意义,因为我们在使用个人计算机的时候,不管执行什么操作,都以管理员账户登录,而从来没有添加和使用过其他普通用户。这样做对个人计算机来讲问题不大,但在服务器上是行不通的。
大家想象一下,我们是一个管理团队,共同维护一组服务器,难道每个人都能够被赋予管理员权限吗?显然是不行的,因为不是所有的数据都可以对每位管理员公开,而且如果在运维团队中有某位管理员对 Linux
不熟悉,那么赋予他管理员权限的后果可能是灾难性的。
因此,越是对安全性要求高的服务器,越需要建立合理的用户权限等级制度和服务器操作规范
Linux
用户和用户组
Linux
是多用户多任务操作系统,换句话说,Linux
系统支持多个用户在同一时间内登陆,不同用户可以执行不同的任务,并且互不影响。
例如,某台 Linux
服务器上有 4 个用户,分别是 root
、www
、ftp
和 mysql
,在同一时间内,root
用户可能在查看系统日志、管理维护系统;www
用户可能在修改自己的网页程序;ftp
用户可能在上传软件到服务器;mysql
用户可能在执行自己的 SQL
查询,每个用户互不干扰,有条不紊地进行着自己的工作。与此同时,每个用户之间不能越权访问,比如 www
用户不能执行 mysql
用户的 SQL
查询操作,ftp
用户也不能修改 www
用户的网页程序。
不同用户具有不问的权限,毎个用户在权限允许的范围内完成不间的任务,Linux
正是通过这种权限的划分与管理,实现了多用户多任务的运行机制。
因此,如果要使用 Linux
系统的资源,就必须向系统管理员申请一个账户,然后通过这个账户进入系统(账户和用户是一个概念)。通过建立不同属性的用户,一方面可以合理地利用和控制系统资源,另一方面也可以帮助用户组织文件,提供对用户文件的安全性保护。
每个用户都有唯一的用户名和密码。在登录系统时,只有正确输入用户名和密码,才能进入系统和自己的主目录。
用户组是具有相同特征用户的逻辑集合。简单的理解,有时我们需要让多个用户具有相同的权限,比如查看、修改某一个文件的权限,一种方法是分别对多个用户进行文件访问授权,如果有 10 个用户的话,就需要授权 10 次,那如果有 100、1000 甚至更多的用户呢?
显然,这种方法不太合理。最好的方式是建立一个组,让这个组具有查看、修改此文件的权限,然后将所有需要访问此文件的用户放入这个组中。那么,所有用户就具有了和组一样的权限,这就是用户组。
将用户分组是 Linux
系统中对用户进行管理及控制访问权限的一种手段,通过定义用户组,很多程序上简化了对用户的管理工作
Linux
用户和组的关系
用户和用户组的对应关系有以下 4 种:
- 一对一:一个用户可以存在一个组中,是组中的唯一成员;
- 一对多:一个用户可以存在多个用户组中,此用户具有这多个组的共同权限;
- 多对一:多个用户可以存在一个组中,这些用户具有和组相同的权限;
- 多对多:多个用户可以存在多个组中,也就是以上 3 种关系的扩展
uid
和gid
登陆 Linux
系统时,虽然输入的是自己的用户名和密码,但其实 Linux
并不认识你的用户名称,它只认识用户名对应的 ID
号(也就是一串数字)。Linux
系统将所有用户的名称与 ID
的对应关系都存储在 /etc/passwd
文件中
Linux
系统中,每个用户的 ID
细分为 2 种,分别是用户 ID
(User ID
,简称 UID
)和组 ID
(Group ID
,简称 GID
),这与文件有拥有者和拥有群组两种属性相对应
与用户相关的文件
用户信息文件: /etc/passwd
用户密码文件: /etc/shadow
分析/etc/passwd
用户信息文件
打开/etc/passwd
文件
以:
进行分隔,以上1共可以分为7列
-
第1列: 用户的登录名(帐号)
-
第2列:用户密码(
x
是占位符,真实的密码存放于/etc/shadow
文件中) -
第3列:表示用户
id
如果用户
id=0
表示root
用户,该id
不能修改,如果id>0
表示系统自带或软件安装id
或者自定义的用户Id
-
第4列:表示用户所属用户组的
id
-
第5列:用户的备注名称,一般不要修改
-
第6列:表示用户的房间(宿主目录)
-
第7列:表示一个用户是否被冻结
/bin/bash
: 该用户没有被冻结,可以登录操作系统/sbin/nologin
:表示该用户已经被冻结,无法登陆操作系统
分析/etc/shadow
文件(用户密码文件)
用户密码文件我们只需记住其中2列可以了,打开/etc/shadow
文件如下所示
用:
进行分隔,记住第1和第2列就足够了
- 第1列:表示用户名
- 第2列:表示用户密码(加密形式来源于军事,使用
md5
+散列技术实现算法),密码的加密给普通的md5
不一样,如果在该文件中用!!
表示证明该用户没有设置密码,无法登陆操作系统,使用!!
的用户大多是系统用户
用户相关的指令
Linux
以安全性和稳定性在世界上自居,在Linux
发明之初就在安全领域做了很多手段,其中最简单就是提供了密码的登录和密码修改的功能,在Linux
系统当中无论什么用户都必须具有密码才能登录Linux
操作系统
passwd
命令
passwd [用户名]
作用:更新或者设置用户登录的密码
注意,普通用户只能使用
passwd
命令修改自己的密码,而不能修改其他用户的密码
与使用 root
账户修改普通用户的密码不同,普通用户修改自己的密码需要先输入自己的旧密码,只有旧密码输入正确才能输入新密码。不仅如此,此种修改方式对密码的复杂度有严格的要求,新密码太短、太简单,都会被系统检测出来并禁止用户使用
很多Linux
发行版为了系统安装,都使用了 PAM
模块进行密码的检验,设置密码太短、与用户名相同、是常见字符串等,都会被 PAM
模块检查出来,从而禁止用户使用此类密码
而使用 root
用户,无论是修改普通用户的密码,还是修改自己的密码,都可以不遵守 PAM
模块设定的规则,系统虽然会提示密码过短和过于简单,但依然可以设置成功。当然,在实际应用中,就算是 root
身份,在设定密码时也要严格遵守密码规范,因为只有好的密码规范才是服务器安全的基础
id
命令
id [存在的linux用户]
作用:显示用户的相关信息
用户间切换
su
是最简单的用户切换命令,通过该命令可以实现任何身份的切换,包括从普通用户切换为 root
用户、从 root
用户切换为普通用户以及普通用户之间的切换
普通用户之间切换以及普通用户切换至 root
用户,都需要知晓对方的密码,只有正确输入密码,才能实现切换;从 root
用户切换至其他用户,无需知晓对方密码,直接可切换成功
su [选项] 用户名
-
:当前用户不仅切换为指定用户的身份,同时所用的工作环境也切换为此用户的环境(包括PATH
变量、MAIL
变量等),使用-
选项可省略用户名,默认会切换为root
用户。-l
:同-
的使用类似,也就是在切换用户身份的同时,完整切换工作环境,但后面需要添加欲切换的使用者账号
su
和su -
的区别使用
su
命令时,有-
和没有-
是完全不同的,-
选项表示在切换用户身份的同时,连当前使用的环境变量也切换成指定用户的。我们知道,环境变量是用来定义操作系统环境的,因此如果系统环境没有随用户身份切换,很多命令无法正确执行
添加新的系统用户
Linux
系统中,可以使用 useradd
命令新建用户
useradd [选项] 用户名
作用:自定义添加一个用户(普通用户)
例子1:添加一个用户叫laoyang
如果添加一个用户,默认会以用户名创建一个宿主目录在/home
下。同时也会创建一个与用户名相同的组名称
这时laoyang
是无法登陆linux
操作系统的,因为laoyang
没有用户密码,所以我们想laoyang
可以正常的登录linux
必须使用passwd
命令为laoyang
创建一个用户密码
例子2:添加一个用户brucelee
,把brucelee
的宿主目录设置/home/lixiaolong
如果希望在添加用户的时候为用户指定一个宿主目录,那么我们就需要使用以下命令格式
useradd -d [/home/宿主目录名称] 用户名
例子3:添加一个用户jim,
把jim
归组到laoyang
当中
如果希望在添加用户的时候希望指定用户所在的用户组,那么我们就需要使用以下命令格式
useradd -g [存在的组名称] 用户名
修改用户信息
usermod[-选项][用户名称]
作用:修改用户的相关信息
例子:把用户laoyang
的修改为lao
,使用选项-l
,该选项用于修改用户的名称
usermod -l [新的名称] 用户名
如果进行了用户名的修改,新的用户不会被修改所在的用户组,同时也会运用原有宿主目录,用户Id
也不会发生改变
删除用户
userdel [-选项] 用户名
删除用户的相关数据。此命令只有 root
用户才能使用
userdel -r 用户名
-r
选项表示在删除用户的同时删除用户的家目录。
注意,在删除用户的同时如果不删除用户的家目录,那么家目录就会变成没有属主和属组的目录,也就是垃圾文件
禁止(冻结)或者解冻用户
在实际开发中,不删除用户,也不修改用户的密码,目的是保证公司对一个员工的信任和保证一个员工的工作文件得以继续运行和保存,这时我们就需要单方面禁止用户的登录,比如说禁止用罗鸿(lh520
)登录操作
第1步:添加一个叫做lh520
的用户,并且确保lh520
可以正常的登录
第2步:使用vim
打开/etc/passwd
文件,找到lh520
的用户信息,我们需要把/bin/bash
修改为/sbin/nologin
第3步:保存并退出(:x
)就马上生效了,发觉罗鸿无法进入操作系统
第4步:假设如果希望对用户进行解冻操作,我们只需把/sbin/nologin
进行修改,解冻后可以直接登录
whoami
: 用来打印当前执行操作的用户名
who am i
:后者则用来打印登陆当前 Linux 系统的用户名
用户组
在Linux
操作系统当中,Linux
是一个多用户,多任务的操作系统,Linux
为了方便的管理用户,所以Linux
把对应的很多用户都进行归组,任何一个用户在Linux
当中都必须存在于一个用户组当中,否则会导致很多软件无法正常的启动
与用户组相关的文件
组信息文件:/etc/group
组密码文件:/etc/gshadow
分析用户组文件(/etc/group
文件)
用:
号进行分隔,可以把上图分为4列:
- 第1列 : 用户组的名称
- 第2列 :
x
表示用户组的密码占位符(其真正的密码保存在/etc/gshadow
,在centos
中没有作用,只是一个历史的遗留问题) - 第3列:表示用户组的
id
,组id
是唯一的,不能重复 如果组Id=0
表示超级管理员组,该组是不能被修改的,如果id>=1
或者id<=499
表示当前是linux
的系统自带用户组,如果id>=500
表示软件创建的用户组或者自定义的用户组 - 第4列:表示组内附属成员用户,一般在开发者没用
用户组相关的指令
在Linux
当中我们可以通过命令对用户组进行管理,主要可以管理用户组的增删查该功能
添加用户组
groupadd [-选项] 组名称
添加用户组,一般使用该命令添加的用户组id
大于或者等于500
例子1:添加一个名为zzt
的用户组
[root@localhost ~]# groupadd zzt
例子2:添加一个名为python666
的用户组,id=701
这时如果希望自定义用户组的id
,那么其命令规则如下
groupadd -g [id][组名]
[root@localhost ~]# groupadd -g 701 python666
修改用户组
groupmod
命令用于修改用户组的相关信息
groupmod [选现] 组名
-g
:修改组ID
;-n
新组名:修改组名
groupmod -n 新组名 旧组名
groupmod -g [id][组的名称]
不过大家还是要注意,用户名不要随意修改,组名和 GID
也不要随意修改,因为非常容易导致管理员逻辑混乱。如果非要修改用户名或组名,则建议大家先删除旧的,再建立新的
刪除用户组
groupdel
命令用于删除用户组
groupdel 组名
注意:现实开发中很少有人会删除用户组,因为删除用户组会导致用户失去所在组的依靠,导致某些软件无法正常启动,所以删除组需谨慎操作,另外是
linux
中默认是无法删除root
用户组的
创作不易,感谢支持