1、用户和组的相关概念
帐号的概念和分类
帐号:是一种用来记录单个用户或是多个用户的数据。Linux中每个合法的用户都必需要拥有帐号,才能使用 。它不只能够用来验证用户身份,还决定了一个用户在系统中能够从事什么工做shell
在Linux 上的帐号能够分红两类:安全
用户帐号 用来储存单一用户的数据,你可使用一个用户帐号,来储存某一个用户的数据。bash
群组帐号 用来储存多个用户的信息,每个群组帐号能够用来记录一组用户的数据。网络
咱们能够把 Linux 的全部帐号依照下面两种方法进行分类:less
依照帐号的位置。运维
依照帐号的功能。ide
依照帐号的位置 工具
帐号数据存放在不一样的地方,其可以使用的范围就会不太同样,帐号的使用范围咱们称为视野。依照帐号储存的位置与视野不一样,咱们能够区分本机帐号与网域帐号两种:ui
本机帐号: 储存于本机硬盘中的帐号数据,咱们称为本机帐号。本机帐号使用范围局限在帐号创建的 Linux 系统上,若是超出范围时,本机帐号将没法使用。好比你在本身电脑上登陆用的帐号和密码,正常是没法在其它的电脑上使用的。this
本机帐号的优势是简单易用,你无须做额外的设置,就能够直接创建本机帐号;但缺点则是没法具有延展性(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 的私有群组。
了解完帐号的基本概念后,咱们一块儿来看下帐号到底记录了哪些信息
2、用户帐号管理
本机的用户帐号数据储存于/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
3、组帐号管理
本机的群组帐号数据被储存在 /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 删除群组帐号
用户和组的相关命令咱们介绍完了,如今来看下密码管理
4、密码管理
帐号犹如一张通行证,有了帐号你才能顺利的使用Linux。不过 Linux 怎么确认使用某帐号的人,是这个帐号的真正拥有者呢?此时Linux 会根据用户的密码,来确认用户的身份。Linux 的用户帐号与群组帐号均可设置密码。用户帐号的密码用来验证用户的身份;而群组帐号的密码则是用来确认用户是否为该群组的成员,以及确认是否为该群组的管理者。
在 Linux 中,使用 useradd 新建一个用户帐号时,useradd 会锁定用户的密码,如此一来,用户暂时不能使用 。你必需要修改其密码后,新建的用户才能用他的帐号登陆。要修改用户帐号的密码须要使用passwd命令
passwd 修改用户密码
参数
说明
-d
删除用户密码,亦即把文件中的密码字段清空。
-l
这个参数用来锁定帐号,帐号一经锁定,用户再怎样输入密码,都会被判断为错误。这个参数只能由 root 使用,普通用户没法用来锁定本身的帐号。
除了能够修改用户帐号的密码外,你也能够为每个群组设置一个密码,这个密码称为群组密码(Group Password)。Linux 的用户,能够经过 newgrp 暂时修改其主要群组的身份。执行 newgrp 时,会以指定的群组身份,开启一个登陆 Shell,这样就能够得到暂时修改主要群组之功效。此时,若是该群组没有指定密码,那么 Linux 只容许群组的成员可使用 newgrp修改主要群组的身份;若是群组设置了密码,群组成员仍能够不用密码就可切换主要群组身份,但非群组的成员,则必需要提供正确的密码才行。
gpasswd 修改组密码
参数
说明
-r
用来删除群组的密码。
-R
锁定 GROUP 的群组密码。
密码管理使用的命令咱们就说到这里,如今看一下相关工具
5、相关工具
说到相关工具,就不得不提到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
管理密码的有效期限
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 GROUPgpasswd -A hello test#将test组的管理员设置为hellogpasswd -A '' test #删除test组的管理员加入与删除群组成员gpasswd -a USER GROUPgpasswd -d USER GROUP