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/bashbin:x:1:1:bin:/bin:/sbin/nologindaemon: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 1500 -g hello -d /home/hello -s /bin/bash -c "this is a test user" hello
usermod是用来修改用户相关信息的,和useradd使用的参数很多是相同的,用法也是一样的,除此之外usermod命令还有一些额外的参数
userdel删除用户,有一个常用参数-r,含义是删除用户的相关数据,包括家目录,邮箱。
id
[root@manage01 ~]# id hellouid=1000(hello) gid=1000(hello) 组=1000(hello)[root@manage01 ~]# id -u hello1000
whoami
[root@manage01 ~]# whoamiroot
三、组账号管理
本机的群组账号数据被储存在 /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: 组成员
一起来看下组管理的相关命令
四、密码管理
账号犹如一张通行证,有了账号你才能顺利的使用Linux。不过 Linux 怎么确认使用某账号的人,是这个账号的真正拥有者呢?此时Linux 会根据用户的密码,来确认用户的身份。Linux 的用户账号与群组账号都可设置密码。用户账号的密码用来验证用户的身份;而群组账号的密码则是用来确认用户是否为该群组的成员,以及确认是否为该群组的管理者。
在 Linux 中,使用 useradd 新建一个用户账号时,useradd 会锁定用户的密码,如此一来,用户暂时不能使用 。你必须要修改其密码后,新建的用户才能用他的账号登录。要修改用户账号的密码需要使用passwd命令
除了可以修改用户账号的密码外,你也可以为每一个群组设置一个密码,这个密码称为群组密码(Group Password)。Linux 的用户,可以通过 newgrp 暂时修改其主要群组的身份。执行 newgrp 时,会以指定的群组身份,开启一个登录 Shell,这样就可以获得暂时修改主要群组之功效。此时,如果该群组没有指定密码,那么 Linux 只允许群组的成员可以使用 newgrp修改主要群组的身份;如果群组设置了密码,群组成员仍可以不用密码就可切换主要群组身份,但非群组的成员,则必须要提供正确的密码才行。
密码管理使用的命令我们就说到这里,现在看一下相关工具
五、相关工具
说到相关工具,就不得不提到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 cockpithttp://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在密码过期之前警告的天数 :7chage -m 设置密码修改的最小天数 -M 设置密码修改的最大天数 -d 设置密码最后修改日期 -I 设置密码过期后,锁定账号的天数 -E 设置账号过期日期,0=立即过期,-1=永不过期 -W 设置密码过期前的警告天数-l 查看指定用户的相关信息-h 帮助
群组管理员
群组管理员可以
指派群组管理员,如果有多个管理员用“,”分隔,如果想删除群组管理员,保持位置为空gpasswd -A USER GROUPgpasswd -A hello test#将test组的管理员设置为hellogpasswd -A '' test #删除test组的管理员加入与删除群组成员gpasswd -a USER GROUPgpasswd -d USER GROUP