用户管理(Linux运维)

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了用户管理(Linux运维)相关的知识,希望对你有一定的参考价值。

一、用户和组的相关概念
账号的概念和分类
账号:是一种用来记录单个用户或是多个用户的数据。Linux中每一个合法的用户都必须要拥有账号,才能使用 。它不仅可以用来验证用户身份,还决定了一个用户在系统中可以从事什么工作

在Linux 上的账号可以分成两类:

用户账号 用来储存单一用户的数据,你可以使用一个用户账号,来储存某一个用户的数据。

群组账号 用来储存多个用户的信息,每一个群组账号可以用来记录一组用户的数据。

我们可以把 Linux 的所有账号依照下面两种方法进行分类:

依照账号的位置。

依照账号的功能。

依照账号的位置

账号数据存放在不同的地方,其可使用的范围就会不太一样,账号的使用范围我们称为视野。依照账号储存的位置与视野不同,我们可以区分本机账号与网域账号两种:

本机账号: 储存于本机硬盘中的账号数据,我们称为本机账号。本机账号使用范围局限在账号建立的 Linux 系统上,如果超出范围时,本机账号将无法使用。比如你在自己电脑上登录用的账号和密码,正常是无法在其它的电脑上使用的。

本机账号的优点是简单易用,你无须作额外的设置,就可以直接建立本机账号;但缺点则是无法具备延展性(Scalability)。比如你在一个拥有很多主机的环境中,想拥有一个在每台主机都可以登录的账号时,你就需要在所有的主机上都建立相关的用户

网域账号: 你也可以把大量的计算机组织成为一个网域,然后在网域中的某一台 Linux 上建立账号数据,并且通过某些通信协议,将账号数据分享出来。当其他计算机需要取得账号数据时,再通过网络调用这些分享的账号即可。这种账号我们称为网域账号 (Domain Account)。

网域账号的优点在于具备延展性。在大规模的环境中,使用网域账号往往能节省管理账号的时间;但网域账号也有缺点,其最大的缺点就是要配置网域账号前,你必须先建立“域”的环境才行。

依照账号的功能

不管是本机账号或是网域账号,我们还可以把所有账号依照功能分成下面几类

技术图片

用户账号部分:包含了超级用户、普通用户;而普通用户中还可细分为系统用户、真实用户两种。

超级用户: 在Linux 系统上拥有完整的控制能力,常被称为系统管理员,在 系统上拥有完整的控制能力,你可以利用超级用户读取或写入 上任何文件、安装或删除软硬件、启动或停止服务,甚至关机与停止系统的执行。 通常只有在管理系统时才会使用超级用户账号登录,所以超级用户常被称为系统管理员 (System Administrator)。由于超级用户的权限不受任何限制,你可以使用该账号来管理 系统;但是,也可能因为操作错误,或者打错命令而造成无法挽救的伤害。在此,强烈建议你“除非有必要,否则请不要轻易以超级用户身份使用 Linux”!

在 Linux 系统中,超级用户的用户名称通常为 root,其 UID(用户ID号)一定为 0。

普通用户账号:行为能力会受到限制,只能调用具备权限的文件,如果没有足够的权限,普通用户是完全无法调用的;所以,普通用户账号不太容易危害 Linux 系统。普通用户账号中,我们又可分为两大类:

系统账号

这种类型的账号仅提供给Linux 系统本身使用。在某些软件执行的时候,需要你提供一个普通用户类型的账号。为了满足这些软件而建立的账号,我们称为系统账号 (System Account)。

真实用户

系统用户账号是给软件或程序使用的,那么,什么账号是让我们登录Linux 时使用的呢?答案就是真实用户(Real User)。真实用户账号是为了让其他人登录系统使用的

群组账号部分:包含了超级用户群组、系统群组以及用户自定义组三大类。

超级用户群组:Linux 有一个叫做 root 的群组,因为这个群组的名称与 root 这个超级用户的名称相同,所以,我们习惯把 root 群组叫做超级用户群组。超级用户群组的 GID 为 0。

系统群组: 与系统账号一样,系统群组是给 Linux 系统本身,或是某个软件所使用

用户自定义组: 除了上述的群组外其余的所有群组,皆是由管理者自行定义,因此我们把这些群组称之为用户自定义组

另外,Linux 系统的“用户自定义组“类型中,还有一种名为用户私有群组 (UPG, User Private Group)的群组。什么是 “用户私有群组”呢?用户私有群组(UPG, User Private Group)是指 “与用户账号名称相同,且为用户的主要群组”的群组。当你建立新的用户账号时,Linux 会自动建立该用户的私有群组。如,当你建立 test 这个用户账号时,Linux 会自动建立了一个名为 test 的群组,并且让 test群组成为 test 用户账号的主要群组,test 群组即是 test 的私有群组。

了解完账号的基本概念后,我们一起来看下账号到底记录了哪些信息

二、用户账号管理
本机的用户账号数据储存于/etc/passwd文件中。与其他的配置文件一样,passwd 也是一个文本文件,因此,你可以直接使用文字处理程序,例如 cat 或 less 浏览其中的内容。

root:x:0:0:root:/root:/bin/bash
bin:x:1:1:bin:/bin:/sbin/nologin
daemon:x:2:2:daemon:/sbin:/sbin/nologin
/etc/passwd 权限必须是0644,每一行代表一个用户的账号数据,每一行又使用冒号(:)分隔为几个部分

USERNAME:PASSWORD:UID:GID:COMMENT:HOMEDIR:SHELL

USERNAME: 用户识别名称,也是登录的名称

PASSWORD: 密码位,用于存储用户的密码,为了安全起见,密码放在另一个文件中,这里统一用x

UID: 用户识别号,0表示为管理员,非0为普通用户

GID: 组识别号,用来识别用户组的身份,同样0为管理员组,非0为系统群组或者自定义组

COMMENT: 描述信息

HOMEDIR: 家目录位置

SHELL: shell类型

这个文件我们就介绍完了,现在我们来看下用户管理的相关命令

useradd

参数

说明

-u UID

用来指定账号的 UID,如果省略这个参数,useradd会自动以最后一个可用的 UID 作为新账号的 UID。 如果你指定的 UID 已经使用过,useradd 将会显示错误信息,此时你可以配合 -o 参数,告诉 useradd 允许重复的 UID。

-g GROUP

定义用户的主要群组。使用 -g 参数前,GROUP 必须已经存在。

-d HOME

指定用户的主目录。默认的主目录是建立在 /home/ 目录下,而且目录名称与用户名称相同。

-s SHELL

指定用户登录执行的程序。

-c COMMENT

指定用户的批注说明。如果批注文字包含空白,请记得使用双引号 (") 包起来。

-r

这个参数用来指出建立一个系统用户的账号。

这些参数大多数可以同时使用,可以根据自己的需求指定,如:

useradd -u 1500 -g hello -d /home/hello -s /bin/bash -c "this is a test user" hello
usermod 是用来修改用户相关信息的,和useradd使用的参数很多是相同的,用法也是一样的,除此之外usermod命令还有一些额外的参数

参数

说明

-l NEWNAME

修改账号的用户名称,NEWNAME 即是新的账号名称。

-L

锁定账号,一经锁定的账号将无法用来登录系统。

-U

解除锁定。

userdel 删除用户,有一个常用参数-r,含义是删除用户的相关数据,包括家目录,邮箱。

id

[root@manage01 ~]# id hello
uid=1000(hello) gid=1000(hello) 组=1000(hello)
[root@manage01 ~]# id -u hello
1000
whoami

[root@manage01 ~]# whoami
root

三、组账号管理
本机的群组账号数据被储存在 /etc/group 文件中,权限也必须为0644,与 /etc/passwd 一样,这也是一个文本文件。

root:x:0:
bin:x:1:
daemon:x:2:
这与/etc/passwd文件的格式类似

GROUPNAME:PASSWORD:GID:MEMBERS

GROUPNAME: 组名

PASSWORD: 组密码,这里也和passwd文件一样是个x

GID: 群组识别号

MEMBERS: 组成员

一起来看下组管理的相关命令

groupadd 建立组

参数

说明

-g GID

指定群组账号的标识符

-r

指定添加的群组成为系统群组

-f

强制执行。 在一般的情况下,groupadd 不允许建立一个与使用过的 GID 相同的群组账号,而使用这个参数时,groupadd 将会建立相同 GID 的 群组账号。

groupmod 修改群组信息

参数

说明

-g GID

修改群组账号的标识符。GID 就是新的标识符。

-n NEWNAME

用来修改群组的名称。NEWNAME 就是新的组名。

groupdel 删除群组账号

用户和组的相关命令我们介绍完了,现在来看下密码管理

四、密码管理
账号犹如一张通行证,有了账号你才能顺利的使用Linux。不过 Linux 怎么确认使用某账号的人,是这个账号的真正拥有者呢?此时Linux 会根据用户的密码,来确认用户的身份。Linux 的用户账号与群组账号都可设置密码。用户账号的密码用来验证用户的身份;而群组账号的密码则是用来确认用户是否为该群组的成员,以及确认是否为该群组的管理者。

在 Linux 中,使用 useradd 新建一个用户账号时,useradd 会锁定用户的密码,如此一来,用户暂时不能使用 。你必须要修改其密码后,新建的用户才能用他的账号登录。要修改用户账号的密码需要使用passwd命令

passwd 修改用户密码

参数

说明

-d

删除用户密码,亦即把文件中的密码字段清空。

-l

这个参数用来锁定账号,账号一经锁定,用户再怎样输入密码,都会被判断为错误。这个参数只能由 root 使用,普通用户无法用来锁定自己的账号。

除了可以修改用户账号的密码外,你也可以为每一个群组设置一个密码,这个密码称为群组密码(Group Password)。Linux 的用户,可以通过 newgrp 暂时修改其主要群组的身份。执行 newgrp 时,会以指定的群组身份,开启一个登录 Shell,这样就可以获得暂时修改主要群组之功效。此时,如果该群组没有指定密码,那么 Linux 只允许群组的成员可以使用 newgrp修改主要群组的身份;如果群组设置了密码,群组成员仍可以不用密码就可切换主要群组身份,但非群组的成员,则必须要提供正确的密码才行。

gpasswd 修改组密码

参数

说明

-r

用来删除群组的密码。

-R

锁定 GROUP 的群组密码。

密码管理使用的命令我们就说到这里,现在看一下相关工具

五、相关工具
说到相关工具,就不得不提到shadow这个组件,shadow有三个功能:隐藏密码、扩充密码的功能、提供账号管理工具

隐藏密码:因为/etc/passwd和/etc/group文件的权限必须是0644,这意味着所有的用户都能读取到内容,所以为了安全起见,我们通过shaodw把用户和组的密码分别隐藏在/etc/shadow,/etc/gshadow文件中,且这两个文件只有管理员,也就是root能调用

提供账号管理工具 :我们之前所介绍的用户和组管理的相关命令,都是shadow所提供的工具

扩充密码功能: 这个扩充密码功能就是除了密码之外的额外功能,如,密码的有效期限,设置群组管理员(组长)等,这些都是记录在/etc/shadow,/etc/gshadow文件中

/etc/shadow: 存储用户密码及密码额外功能的文件

root:$6$T52Xvk7zu84.tDXp$nfXcm6LTfUx.ZviEo7Eq1bPjDO...::0:99999:7:::
bin:*:18027:0:99999:7:::
/etc/shadow文件的格式与/etc/passwd类似,也是每一行代表一个账号的数据,使用:进行分隔

USERNAME:PASSWORD:LASTCHANGED:MINDAYS:MAX_DAYS:WARNNING:EXPIRES:INVALID:RESERVED

1 USERNAME:用户账号名称。

2 PASSWORD:加密后的密码。

3 LAST_CHANGED:密码最后一次修改的日期。

4 MIN_DAYS:密码修改的最小间隔天数。

5 MAX_DAYS:密码修改的最大天数。

6 WARNNING:密码过期前警告的天数。

7 EXPIRES:密码过期的日期

8 INVALID: 账号失效日期

9 RESERVED:保留位,未定义功能

这里面我们所提到的日期都是从1970年1月1日起经过的天数,所以我们看到的不是日期的格式,而是一组数字,我们接下来看下另一个文件

/etc/gshadow: 存储组密码及密码额外功能的文件

root:::
bin:::
daemon:::

GROUPNAME:PASSWORD:ADMINISTRATORS:MEMBERS

GROUPNAME: 组名

PASSWORD: 组密码

ADMINISTRATORS: 组长

MEMBERS: 组成员

除此之外用户管理还有一个简单的方法,那就是以root用户身份登录图形界面

技术图片
技术图片

cockpit

systemctl start cockpit

http://localhost:9090

技术图片
技术图片

管理密码的有效期限

Shadow除了会把密码数据隐藏到其他文件、提供许多账号管理工具外,还允许你为账号或密码设置有效期限,以提高Linux 的安全性。目前的 Shadow 可以设置下列两种期限:

密码过期

一旦超过密码过期日期,用户成功的登录Linux 时,会强迫用户设置一个新的密码。设置完毕后,才会开启用户的 Shell 程序。设置密码过期的目的,在于提高 Linux 的安全性。

账号过期

若超过账号过期日期,Linux 会禁止用户登录系统,即使输入正确的密码,也无法登录。当账号过期时,Linux 会提示用户联系管理员修改账号过期日期。

Your account has expired; please contact your system administrator
我们可以使用chage命令来查看或调整这些相关的期限

[root@manage01 ~]# chage -l hello
最近一次密码修改时间 :从不
密码过期时间 :从不
密码失效时间 :从不
帐户过期时间 :从不
两次改变密码之间相距的最小天数 :0
两次改变密码之间相距的最大天数 :99999
在密码过期之前警告的天数 :7

chage
-m 设置密码修改的最小天数
-M 设置密码修改的最大天数
-d 设置密码最后修改日期
-I 设置密码过期后,锁定账号的天数
-E 设置账号过期日期,0=立即过期,-1=永不过期
-W 设置密码过期前的警告天数
-l 查看指定用户的相关信息
-h 帮助

技术图片
群组管理员

群组管理员可以

指派群组管理员,如果有多个管理员用“,”分隔,如果想删除群组管理员,保持位置为空
gpasswd -A USER GROUP
gpasswd -A hello test#将test组的管理员设置为hello
gpasswd -A ‘‘ test #删除test组的管理员
加入与删除群组成员
gpasswd -a USER GROUP
gpasswd -d USER GROUP

以上是关于用户管理(Linux运维)的主要内容,如果未能解决你的问题,请参考以下文章

linux运维用户管理并赋管理员权限

linux运维用户管理并赋管理员权限

用户管理(Linux运维)

用户管理(Linux运维)

Linux运维六:用户管理及用户权限设置

Linux运维基础-系统管理之权限管理