1、用户和组简介
Linux 是多用户多任务操作系统。换句话说,Linux 系统支持多个用户在同一时间内登陆,不同用户可以执行不同的任务,并且互不影响。不同用户具有不问的权限,毎个用户在权限允许的范围内完成不同的任务。
用户组是具有相同特征用户的逻辑集合。有时我们需要让多个用户具有相同的权限,比如查看、修改某一个文件的权限,一种方法是分别对多个用户进行文件访问授权,如果有 10 个用户的话,就需要授权 10 次,显然,这种方法不太合理。最好的方式是建立一个组,让这个组具有查看、修改此文件的权限,然后将所有需要访问此文件的用户放入这个组中。那么,所有用户就具有了和组一样的权限,这就是用户组。(每个用户至少属于一个用户组,新建用户时如果不指定组,则会新建一个组,组名跟用户名相同,并且把该用户添加到该组中。)
将用户分组是 Linux 系统中对用户进行管理及控制访问权限的一种手段
2、用户分类
- 超级用户(root):linux默认的超级用户账号,对于本操作系统拥有至高无上的权利,类似于windows中的Administrator用户。当要进行系统管理、维护任务的时候才会使用root账号,日常事务,启动某个软件等,都使用普通用户。
- 普通用户:一般都是由root或者其他普通用户创建而成,在权限上是有限制的,一般只在自己的home家目录中,有至高无上的权限。
- 程序用户:安装linux以及某些软件的时候,会自动添加一些权限较低的用户,这些程序用户是不能登录到系统中,shell的窗口来输入命令,只能维持系统某个软件的正常运行,比如:bin,deamon,ftp,mail等。
3、UID与GID
Linux 系统中,每个用户的 ID 细分为 2 种,分别是 UID(User ID)
和 GID(Group ID)
,对于操作系统来说,UID就是用来区分用户的基本依据,每个用户的UID是唯一的。GID和UID类似是组的一个标识号,这与文件有拥有者和拥有群组两种属性相对应。
UID 范围 | 用户身份 |
---|---|
0 | 超级用户。UID 为 0 就代表这个账号是管理员账号 |
1~499 | 系统用户(程序用户)。此范围的 UID 保留给系统使用。其中,1~99 用于系统自行创建的账号;100~499 分配给有系统账号需求的用户。其实,除了 0 之外,其他的 UID 并无不同,这里只是默认 500 以下的数字给系统作为保留账户 |
500~65535 | 普通用户。通常这些 UID 已经足够用户使用了。2.6.x 内核之后的 Linux 系统已经可以支持 232个 UID |
使用id
命令可以查询用户的UID、GID 和附加组的信息。格式如下:
[root@localhost ~]# id 用户名
4、有关用户和组的配置文件
1)、/etc/passwd
Linux 系统中的 /etc/passwd
文件,是系统用户配置文件,存储了系统中所有用户的基本信息,并且所有用户都可以对此文件执行读操作。
这些用户中的绝大多数是系统或服务正常运行所必需的用户,这些用户通常称为系统用户或伪用户。系统用户无法用来登录系统,但也不能删除,因为一旦删除,依赖这些用户运行的服务或程序就不能正常执行,会导致系统问题。
使用cat /etc/passwd
命令查看文件内容,可以看到,每行记录对应一个用户
每行用户信息都以 :
作为分隔符,划分为 7 个字段,每个字段所表示的含义如下:
用户名:密码:UID(用户ID):GID(组ID):描述性信息:主目录:默认Shell
-
用户名
用户名,就是一串代表用户身份的字符串。
-
密码
“x” 表示此用户设有密码,但不是真正的密码,真正的密码保存在
/etc/shadow
文件中在早期的 UNIX 中,这里保存的就是真正的加密密码串,但由于所有用户都能读取此文件,非常容易造成用户数据被窃取。
现在 Linux 系统把真正的加密密码串放置在
/etc/shadow
文件中,此文件只有 root 用户可以浏览和操作,这样就最大限度地保证了密码的安全。 -
UID
UID,也就是用户 ID。每个用户都有唯一的一个 UID,Linux 系统通过 UID 来识别不同的用户。
-
GID
全称“Group ID”,简称“组ID”,表示用户初始组的组 ID 号。
-
描述性信息
这个字段并没有什么重要的用途,只是用来解释这个用户的意义而已。
-
主目录
也就是用户登录后有操作权限的访问目录,通常称为用户的主目录。例如:root 超级管理员账户的主目录为
/root
,普通用户的主目录为/home/yourIDname
,即在 /home/ 目录下建立和用户名相同的目录作为主目录 -
默认Shell
Shell 就是 Linux 的命令解释器,是用户和 Linux 内核之间沟通的桥梁。Shell 命令解释器的功能就是将用户输入的命令转换成系统可以识别的机器语言。通常情况下,Linux 系统默认的解释器是
bash(/bin/bash)
,当然还有其他命令解释器,例如 sh、csh 等。
2)、/etc/shadow
/etc/shadow
文件,用于存储 Linux 系统中用户的密码信息,又称为“影子文件”。
/etc/shadow 文件只有 root 用户拥有读权限,其他用户没有任何权限,这样就保证了用户密码的安全性。
使用cat /etc/shadow
命令查看文件内容
同 /etc/passwd
文件一样,文件中每行代表一个用户,同样使用 :
作为分隔符,不同之处在于,每行用户信息被划分为 9 个字段。每个字段的含义如下:
用户名:加密密码:最后一次修改时间:最小修改时间间隔:密码有效期:密码需要变更前的警告天数:密码过期后的宽限时间:账号失效时间:保留字段
-
用户名
同 /etc/passwd 文件的用户名有相同的含义。
-
加密密码
这里保存的是真正加密的密码。目前 Linux 的密码采用的是
SHA512
散列加密算法,原来采用的是MD5
或DES
加密算法。SHA512
散列加密算法的加密等级更高,也更加安全。所有伪用户的密码都是
!!
或*
,代表没有密码是不能登录的。当然,新创建的用户如果不设定密码,那么它的密码项也是!!
,代表这个用户没有密码,不能登录。 -
最后一次修改时间
此字段表示最后一次修改密码的时间(Linux 计算日期的时间是以 1970 年 1 月 1 日作为 1 不断累加得到的时间,这里以天为单位)。
那么,到底 18353 代表的是哪一天呢?可以使用如下命令进行换算:
[root@localhost ~]# date -d "1970-01-01 18353 days" 2020年 04月 01日 星期三 00:00:00 PDT
-
最小修改时间间隔
最小修改间隔时间,也就是说,该字段规定了从第 3 字段(最后一次修改密码的日期)起,多长时间之内不能修改密码。如果是 0,则密码可以随时修改;如果是 10,则代表密码修改后 10 天之内不能再次修改密码。
-
密码有效期
密码最长有效天数,这个字段可以指定距离第 3 字段(最后一次更改密码)多长时间内需要再次变更密码,否则该账户密码进行过期阶段。
该字段的默认值为 99999,也就是 273 年,可认为是永久生效。如果改为 90,则表示密码被修改 90 天之后必须再次修改,否则该用户即将过期。管理服务器时,通过这个字段强制用户定期修改密码。
-
密码需要变更前的警报天数
与第 5 字段相比较,当账户密码有效期快到时,系统会发出警告信息给此账户,提醒用户 “再过 n 天你的密码就要过期了,请尽快重新设置你的密码!”。该字段的默认值是 7。
-
密码过期后的宽限天数
也称为“口令失效日”,简单理解就是,在密码过期后,用户如果还是没有修改密码,则在此字段规定的宽限天数内,用户还是可以登录系统的;如果过了宽限天数,系统将不再让此账户登陆,也不会提示账户过期,是完全禁用。
比如说,此字段规定的宽限天数是 10,则代表密码过期 10 天后失效;如果是 0,则代表密码过期后立即失效;如果是 -1,则代表密码永远不会失效。
-
账号失效时间
同第 3 个字段一样,使用自 1970 年 1 月 1 日以来的总天数作为账户的失效时间。该字段表示,账号在此字段规定的时间之外,不论你的密码是否过期,都将无法使用!该字段通常被使用在具有收费服务的系统中。
-
保留
3)、/etc/group
/ect/group
文件是用户组配置文件,即用户组的所有信息都存放在此文件中。
通过cat /etc/group
命令查看文件内容
文件中每一行各代表一个用户组,各用户组中以 :
作为字段之间的分隔符,分为 4 个字段,每个字段对应的含义为:
组名:密码:GID:该用户组中的用户列表
5、用户管理
-
创建用户
使用
useradd
命令新建用户,此命令的基本格式如下:[root@localhost ~]#useradd [选项] 用户名
常用选项:
选项 含义 -u UID 指定用户的 UID,注意 UID 的范围(不要小于 500) -d 主目录 指定用户的主目录(主目录必须写绝对路径)。默认指定的用户家目录在 /home/下 -c 用户说明 指定/etc/passwd文件中各用户信息中第 5 个字段的描述性内容,可随意配置 -g 组名 指定用户的初始组。在创建用户时会默认建立初始组(组名和用户名相同) -G 组名 指定用户的附加组 -s shell 指定用户的登录 Shell,默认是 /bin/bash; -e 曰期 指定用户的失效曰期,格式为 “YYYY-MM-DD”。也就是 /etc/shadow 文件的第8个字段; 通常情况创建用户,可以不指定任何选项,直接使用
useradd zhangsan
,大部分情况下,使用默认值就可以满足我们的要求 -
删除用户
使用
userdel
命令删除用户,此命令只有 root 用户才能使用基本格式如下:
[root@localhost ~]# userdel -r 用户名 # -r 选项表示在删除用户的同时删除用户的家目录
-
修改用户密码
使用
passwd
命令为用户配置密码基本格式如下:
[root@localhost ~]#passwd [选项] 用户名 # 省略"选项"和"用户名"时,修改当前系统已登录用户的密码
常用选项:
选项 含义 -S 查看用户账户的状态(是否被锁定) -l 暂时锁定用户(在 /etc/shadow 文件中指定用户的加密密码串前添加 “!”),使密码失效 -u 解锁用户,和 -l 选项相对应 –stdin 可以将通过管道符输出的数据作为用户的密码。主要在批量添加用户时使用 -n 天数 设置用户修改密码后,多长时间不能再修改密码,对应 /etc/shadow 文件中的第 4 个字段; -x 天数 设置用户的密码有效期,对应 /etc/shadow 文件中密码的第 5 个字段 -w 天数 设置用户密码过期前的警告天数,对于 /etc/shadow 文件中密码的第 6 个字段 -i 日期 设置用户密码失效日期,对应 /etc/shadow 文件中密码的第 7 个字段 普通用户修改自己的密码时,密码必须符合复杂性要求,新密码太短、太简单,都会被系统检测出来并禁止用户使用。
很多Linux 发行版为了系统安装,都使用了PAM 模块
进行密码的检验,设置密码太短、与用户名相同、是常见字符串等,都会被PAM 模块
检查出来,从而禁止用户使用此类密码。为了方便系统管理,passwd 命令提供了
--stdin
选项,用于批量给用户设置初始密码。[root@localhost ~]# echo "123"|passwd --stdin zhangsan
这样设定的密码会把密码明文保存在历史命令中,如果系统被攻破,别人可以在
/root/.bash_history
中找到设置密码的这个命令,存在安全隐患。
因此,如果使用这种方式修改密码,那么应该记住两件事情:第一,手工清除历史命令;第二,强制这些新添加的用户在第一次登录时必须修改密码( “chage” 命令)。 -
修改用户信息
使用
usermod
命令可以修改用户的信息,此命令的基本格式:[root@localhost ~]#usermod [选项] 用户名
常用选项:
选项 含义 -c 用户说明 修改用户的说明信息,即修改 /etc/passwd 文件中的第 5 个字段 -d 主目录 修改用户的主目录,即修改 /etc/passwd 文件中的第 6 个字段(主目录必须写绝对路径) -e 日期 修改用户的失效日期,格式为 “YYYY-MM-DD”, -g 组名 修改用户的初始组,即修改 /etc/passwd 文件目标用户信息的第 4 个字段(GID) -u UID 修改用户的UID,即修改 /etc/passwd 文件目标用户信息的第 3 个字段(UID) -G 组名 修改用户的附加组,其实就是把用户加入其他用户组,即修改 /etc/group 文件 -l 用户名 修改用户名称 -L 临时锁定用户(Lock) -U 解锁用户(Unlock),和 -L 对应 -s shell 修改用户的登录 Shell,默认是 /bin/bash
6、组管理
-
添加用户组
使用
groupadd
命令添加用户,命令格式如下:[root@localhost ~]# groupadd [选项] 组名
-
删除用户组
使用
groupdel
删除用户组,命令格式如下:[root@localhost ~]#groupdel 组名
如果有群组还是某用户的初始群组,则无法使用 groupdel 命令成功删除。
-
将用户添加进组或从组中删除
将用户添加进组或从组中删除使用
gpasswd
命令,其基本格式如下:[root@localhost ~]# gpasswd [选项] 组名
常用选项:
选项 含义 -a user 将 user 用户加入到群组中 -d user 将 user 用户从群组中移除 - 查看用户所属的组
使用
groups
命令可以查询用户所属的组。格式如下:[root@localhost ~]# groups 用户名
参考文档:http://c.biancheng.net/view/839.html