06-`Linux`的用户和用户组管理

Linux用户和用户组管理

用户和用户组管理,顾名思义就是添加用户和用户组、更改密码和设定权限等操作。可能有很多人觉得用户管理没有意义,因为我们在使用个人计算机的时候,不管执行什么操作,都以管理员账户登录,而从来没有添加和使用过其他普通用户。这样做对个人计算机来讲问题不大,但在服务器上是行不通的。

大家想象一下,我们是一个管理团队,共同维护一组服务器,难道每个人都能够被赋予管理员权限吗?显然是不行的,因为不是所有的数据都可以对每位管理员公开,而且如果在运维团队中有某位管理员对 Linux 不熟悉,那么赋予他管理员权限的后果可能是灾难性的。

因此,越是对安全性要求高的服务器,越需要建立合理的用户权限等级制度和服务器操作规范

Linux用户和用户组

Linux 是多用户多任务操作系统,换句话说,Linux 系统支持多个用户在同一时间内登陆,不同用户可以执行不同的任务,并且互不影响。

例如,某台 Linux 服务器上有 4 个用户,分别是 rootwwwftp mysql,在同一时间内,root 用户可能在查看系统日志、管理维护系统;www 用户可能在修改自己的网页程序;ftp 用户可能在上传软件到服务器;mysql 用户可能在执行自己的 SQL 查询,每个用户互不干扰,有条不紊地进行着自己的工作。与此同时,每个用户之间不能越权访问,比如 www 用户不能执行 mysql 用户的 SQL 查询操作,ftp 用户也不能修改 www 用户的网页程序。

不同用户具有不问的权限,毎个用户在权限允许的范围内完成不间的任务,Linux 正是通过这种权限的划分与管理,实现了多用户多任务的运行机制。

因此,如果要使用 Linux 系统的资源,就必须向系统管理员申请一个账户,然后通过这个账户进入系统(账户和用户是一个概念)。通过建立不同属性的用户,一方面可以合理地利用和控制系统资源,另一方面也可以帮助用户组织文件,提供对用户文件的安全性保护。

每个用户都有唯一的用户名和密码。在登录系统时,只有正确输入用户名和密码,才能进入系统和自己的主目录。

用户组是具有相同特征用户的逻辑集合。简单的理解,有时我们需要让多个用户具有相同的权限,比如查看、修改某一个文件的权限,一种方法是分别对多个用户进行文件访问授权,如果有 10 个用户的话,就需要授权 10 次,那如果有 100、1000 甚至更多的用户呢?

显然,这种方法不太合理。最好的方式是建立一个组,让这个组具有查看、修改此文件的权限,然后将所有需要访问此文件的用户放入这个组中。那么,所有用户就具有了和组一样的权限,这就是用户组。

将用户分组是 Linux 系统中对用户进行管理及控制访问权限的一种手段,通过定义用户组,很多程序上简化了对用户的管理工作

Linux用户和组的关系

用户和用户组的对应关系有以下 4 种:

  1. 一对一:一个用户可以存在一个组中,是组中的唯一成员;
  2. 一对多:一个用户可以存在多个用户组中,此用户具有这多个组的共同权限;
  3. 多对一:多个用户可以存在一个组中,这些用户具有和组相同的权限;
  4. 多对多:多个用户可以存在多个组中,也就是以上 3 种关系的扩展

uidgid

登陆 Linux 系统时,虽然输入的是自己的用户名和密码,但其实 Linux 并不认识你的用户名称,它只认识用户名对应的 ID 号(也就是一串数字)。Linux 系统将所有用户的名称与 ID 的对应关系都存储在 /etc/passwd 文件中

Linux 系统中,每个用户的 ID 细分为 2 种,分别是用户 IDUser ID,简称 UID)和组 IDGroup ID,简称 GID),这与文件有拥有者和拥有群组两种属性相对应

与用户相关的文件

用户信息文件: /etc/passwd

用户密码文件: /etc/shadow

分析/etc/passwd用户信息文件

打开/etc/passwd文件

在这里插入图片描述

:进行分隔,以上1共可以分为7列

  1. 第1列: 用户的登录名(帐号)

  2. 第2列:用户密码(x是占位符,真实的密码存放于/etc/shadow文件中)

  3. 第3列:表示用户id

    如果用户id=0表示root用户,该id不能修改,如果id>0表示系统自带或软件安装id或者自定义的用户Id

  4. 第4列:表示用户所属用户组的id

  5. 第5列:用户的备注名称,一般不要修改

  6. 第6列:表示用户的房间(宿主目录)

  7. 第7列:表示一个用户是否被冻结

    /bin/bash : 该用户没有被冻结,可以登录操作系统

    /sbin/nologin:表示该用户已经被冻结,无法登陆操作系统

分析/etc/shadow文件(用户密码文件)

用户密码文件我们只需记住其中2列可以了,打开/etc/shadow文件如下所示

在这里插入图片描述

:进行分隔,记住第1和第2列就足够了

  1. 第1列:表示用户名
  2. 第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. 第1列 : 用户组的名称
  2. 第2列 : x表示用户组的密码占位符(其真正的密码保存在/etc/gshadow,在centos中没有作用,只是一个历史的遗留问题)
  3. 第3列:表示用户组的id,组id是唯一的,不能重复 如果组Id=0表示超级管理员组,该组是不能被修改的,如果id>=1或者id<=499表示当前是linux的系统自带用户组,如果id>=500表示软件创建的用户组或者自定义的用户组
  4. 第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用户组的

创作不易,感谢支持

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值