文件、用户、用户组管理
- 0.linux的目录结构
- 1.用户和用户组的信息存储
- 1.1. 用户的基本信息文件
/etc/passwd
- 1.2. 用户的密码信息文件
/etc/shadow
- 1.2.1. 用户名
- 1.2.2. 加密密码
- 1.2.3. 最后一次修改时间
- 1.2.4. 最小修改时间间隔
- 1.2.5. 密码有效期
- 1.2.6. 密码需要变更前的警告天数
- 1.2.7. 密码过期后的宽限天数
- 1.2.8. 账号失效时间
- 1.2.9. 保留
- 1.2.10. 忘记密码怎么办
- 1.3. 组信息文件
/etc/group
- 1.4. /etc/gshadow文件
- 1.5. 创建用户的默认设置文件
/etc/login.defs
- 1.6. 添加新系统用户:useradd
- 1.7. 修改用户密码:passwd命令
- 1.8. 修改用户信息:usermod
- 1.9. 修改用户密码状态:chage
- 1.10. 删除用户:userdel
- 1.11. 查看用户的UID和GID
- 1.12. linux用户间的切换su和su -
- 1.13. whoami和who am i
- 1.14. 添加用户组:groupadd
- 1.15. 修改用户组:groupmod
- 1.16. 删除用户组:groupdel
- 1.17. 把用户添加进组或从组中删除:gpasswd
- 1.18. 切换用户的有效组:newgrp
- 1.1. 用户的基本信息文件
linux的目录结构
linux中,所有的文件和目录都被组织成一个一根节点/
开始的倒置的树状结构
文件系统的最顶层是由根目录开始的,再0往下既可以是目录也可以是文件,而每一个目录中又可以包含(子目录)或文件,如此反复即为目录
注意:目录和文件名是区分大小写的
Linux采用文件系统层次标准(FHS标准),规定了什么目录下应该放什么文件,可以在Linux文件目录结构一览表中查看
linux的用户和用户组管理
1. 用户和用户组的信息存储
1.1. 用户的基本信息文件/etc/passwd
通过 cat /etc/passwd
命令来查看/etc/passwd
配置文件的信息如下:
/etc/passwd
文件中每行纪录一个用户,其中很多是系统或服务正常运行所必需的用户,称为系统用户或伪用户,系统用户无法用来登录,但是也不能删除,删除了之后,依赖这些用户运行的服务或程序就不能正常执行,会导致系统问题
以root用户信息为例,共7个字段,并以:
进行了分割
root:x:0:0:root:/root:/bin/bash
用户名:密码位:UID(用户ID):GID(组ID):注释性描述:宿主目录:默认shell
1.1.1. 用户名
用户登录系统是使用的用户名,一串代表身份字符串
1.1.2. 密码
x代表此用户设有密码,但不是真的密码,真的在/etc/shandow
文件中,早期的 UNIX 中,这里就是真正的加密密码串,但由于所有程序都能读取此文件,非常容易造成用户数据被窃取,虽然密码是加密的,但是采用暴力破解的方式也是能够进行破解的,因此,现在 Linux 系统把真正的加密密码串放置在 /etc/shadow
文件中,此文件只有 root 用户可以浏览和操作,注意不可以删除x,删了就会认为是无密码的
1.1.3. UID
用户ID,是一个0~65535之间的数值,不同范围代表不同的用户
UID 范围 | 用户身份 |
---|---|
0 | 超级用户。UID 为 0 就代表这个账号是管理员账号。在 Linux 中,如何把普通用户升级成管理员呢?只需把其他用户的 UID 修改为 0 就可以了,这一点和 Windows 是不同的。不过不建议建立多个管理员账号。 |
1~499 |
系统用户(伪用户)。也就是说,此范围的 UID 保留给系统使用。其中,1~99 用于系统自行创建的账号;100~499 分配给有系统账号需求的用户。 其实,除了 0 之外,其他的 UID 并无不同,这里只是默认 500 以下的数字给系统作为保留账户,只是一个公认的习惯而已。 |
500~65535 | 普通用户。通常这些 UID 已经足够用户使用了。但不够用也没关系,2.6.x 内核之后的 Linux 系统已经可以支持 232 个 UID 了。 |
1.1.4. GID
全称”Group ID”,简称组ID,用户初始组的组ID号
初始组: 指用户登陆时就拥有这个用户组的相关权限。每个用户的初始组只能有一个,通常就是将和此用户的用户名相同的组名作为该用户的初始组
附加组: 指用户可以加入多个其他的用户组,并拥有这些组的权限。每个用户只能有一个初始组,除初始组外,用户再加入其他的用户组,这些用户组就是这个用户的附加组。附加组可以有多个,而且用户可以有这些附加组的权限
附加组和初始组是可以更改的,在 /etc/passwd 文件的第四个字段中看到的 ID 是这个用户的初始组
1.1.5. 注释性描述
例如存放用户名全名等信息
1.1.6. 宿主目录
用户登录之后有操作权限的访问目录,也叫用户的主目录
1.1.7. 默认shell
Linux的命令解释器
1.2. 用户的密码信息文件/etc/shadow
该文件仅root用户拥有权限如果发生了改变,需要注意是否有了恶意攻击
查看一下这个文件的内容
和passwd文件一样,不同的是被分为了9个字段
root:$6$ZFZ38JaA$r48EyIT9/4XcybjzAlNcudL/GslvyTpozzXUbHl1xC2DWEz9bdEy4utgSp5RR7ujMm4GtNn8NP96eQLXBqAiW1:19462:0:99999:7:::
用户名:加密密码:最后一次修改时间:最小修改时间间隔:密码有效期:密码需要变更前的警告天数:密码过期后的宽限时间:账号失效时间:保留字段
1.2.1. 用户名
和passwd文件一样
1.2.2. 加密密码
这里存的是真正的加密的密码,使用的sha512散列加密算法,原本采用的是md5或des加密
这个加密不能手工修改,如果修改,那么系统将无法识别密码,导致密码是失效,可以通过在这个密码串前面加上! * x使密码暂时失效
所有的伪用户的密码都是" !! "或" * " 代表没有密码是不能登录的,新创建的用户如果没有设定密码,它的密码项也是" !! "代表这个用户没有密码,不能登录
1.2.3. 最后一次修改时间
如果root显示的是19462是因为什么
因为,Linux计算日期的时间是以1970年1月1日作为1不断累加得到的时间,到1970年1月1日,则为366天。这里显示19462天,也就是说,此root账号在1970年1月1日之后的第19462天修改的root用户密码
可以使用如下命名查看1942代表那一天
1.2.4. 最小修改时间间隔
该字段规定了从第3字段(最后一次修改密码的日期)起,多长时间之内不能修改密码
- 0:随时都可以修改
- 10:代表10天内不能修改
1.2.5. 密码有效期
这个字段可以指定距离第 3 字段(最后一次更改密码)多长时间内需要再次变更密码,否则该账户密码进行过期阶段,强制用户更改密码,默认为99999,也就是273年
1.2.6. 密码需要变更前的警告天数
与第5字段 相比较,当账户有效期快到时 ,系统会发出警告信息给此账户,默认字段为7
1.2.7. 密码过期后的宽限天数
密码过期之后在此时间内还可以登录,超过之后不会提示而是完全禁用
1.2.8. 账号失效时间
同第3个字段一样,使用字1970年1月1日以来的总天数作为账户的失效时间,表示在此字段固定的时间之外,无论密码是否过期,都无法使用
1.2.9. 保留
1.2.10. 忘记密码怎么办
- 普通用户:利用root用户更改
- root用户:如果 root 账号的密码遗失,则需要重新启动进入单用户模式,系统会提供 root 权限的 bash 接口,此时可以用 passwd 命令修改账户密码;也可以通过挂载根目录,修改 /etc/shadow,将账户的 root 密码清空的方法,此方式可使用 root 无法密码即可登陆,建议登陆后使用 passwd 命令配置 root 密码
1.3. 组信息文件/etc/group
是用户的用户组配置文件,即用户组的所有信息都存在此文件中,记录着组ID(GID)和组名相对应的文件,查看该文件
用户组中还是以" : "作为字段之间的分隔符,分为四段
组名:密码:GID:该用户组中的用户列表
1.3.1. 组名
也就是用户组的名称,以字母或数字构成,不能重复、
1.3.2. 组密码
与passwd文件一样
不过,用户设置密码是为了验证用户的身份,那用户组设置密码是用来做什么的呢?
用户组密码主要是用来指定组管理员的,由于系统中的账号可能会非常多,root 用户可能没有时间进行用户的组调整,这时可以给用户组指定组管理员,如果有用户需要加入或退出某用户组,可以由该组的组管理员替代 root 进行管理。但是这项功能目前很少使用,我们也很少设置组密码
如果需要赋予某用户调整某个用户组的权限,则可以使用 sudo 命令代替。
1.3.3. 组ID(GID)
就是群组的ID号,Linux通过GID来区分用户组的,同用户名一样,这里的组 GID 与/etc/passwd
文件中第 4 个字段的 GID 相对应,实际上,/etc/passwd
文件中使用 GID 对应的群组名,就是通过此文件对应得到的
1.3.4. 组中的用户
此字段列出每个群组包含的所有用户,注意,如果该用户组是这个用户的初始组,则该用户不会写入这个字段,也可以说,该字段显示的用户都是这个用户组的附加用户
每个用户都可以加入多个附加组,但是只能属于一个初始组,一般情况下,用户的初始组就是在建立用户的同时建立的和用户名相同的组
passwd、shadow、group之间的关系可以这样理解,即先在 /etc/group 文件中查询用户组的 GID 和组名;然后在 /etc/passwd 文件中查找该 GID 是哪个用户的初始组,同时提取这个用户的用户名和 UID;最后通过 UID 到 /etc/shadow 文件中提取和这个用户相匹配的密码
1.4. /etc/gshadow文件
查看该文件
文件中每行代表一个组用户的密码信息
组名:加密密码:组管理员:组附加用户列表
1.4.1. 组名
和/etc/group
文件中相对应
1.4.2. 组密码
通常不设置密码。因此字段为空,但有时为!指的是该群没有组密码也没有群组管理员
1.4.3. 组管理员
该文件的最大功能就是创建群组管理员,由于目前sudo之类的工具,群组管理员很少用了
1.4.4. 组中的附加用户
和/etc/group
文件的附加组一样
1.5. 创建用户的默认设置文件/etc/login.defs
该文件在创建用户时,对用户的一些基本属性做默认设置,该文件对root用户无效,当此文件中的配置与 /etc/passwd
和 /etc/shadow
文件中的用户信息有冲突时,系统会以/etc/passwd
和 /etc/shadow
为准
设置项 | 含义 |
---|---|
MAIL_DIR /var/spool/mail | 创建用户时,系统会在目录 /var/spool/mail 中创建一个用户邮箱,比如 lamp 用户的邮箱是 /var/spool/mail/lamp。 |
PASS_MAX_DAYS 99999 | 密码有效期,99999 是自 1970 年 1 月 1 日起密码有效的天数,相当于 273 年,可理解为密码始终有效。 |
PASS_MIN_DAYS 0 | 表示自上次修改密码以来,最少隔多少天后用户才能再次修改密码,默认值是 0。 |
PASS_MIN_LEN 5 | 指定密码的最小长度,默认不小于 5 位,但是现在用户登录时验证已经被 PAM 模块取代,所以这个选项并不生效。 |
PASS_WARN_AGE 7 | 指定在密码到期前多少天,系统就开始通过用户密码即将到期,默认为 7 天。 |
UID_MIN 500 | 指定最小 UID 为 500,也就是说,添加用户时,默认 UID 从 500 开始。注意,如果手工指定了一个用户的 UID 是 550,那么下一个创建的用户的 UID 就会从 551 开始,哪怕 500~549 之间的 UID 没有使用。 |
UID_MAX 60000 | 指定用户最大的 UID 为 60000。 |
GID_MIN 500 | 指定最小 GID 为 500,也就是在添加组时,组的 GID 从 500 开始。 |
GID_MAX 60000 | 用户 GID 最大为 60000。 |
CREATE_HOME yes | 指定在创建用户时,是否同时创建用户主目录,yes 表示创建,no 则不创建,默认是 yes。 |
UMASK 077 | 用户主目录的权限默认设置为 077。 |
USERGROUPS_ENAB yes | 指定删除用户的时候是否同时删除用户组,准备地说,这里指的是删除用户的初始组,此项的默认值为 yes。 |
ENCRYPT_METHOD SHA512 | 指定用户密码采用的加密规则,默认采用 SHA512,这是新的密码加密模式,原先的 Linux 只能用 DES 或 MD5 加密。 |
1.6. 添加新系统用户:useradd
名称
useradd - 创建一个新用户或更新默认新用户信息
大纲
useradd [选项] 登录
useradd -D
useradd -D [选项]
描述
When invoked without the -D option, the useradd command creates a new user
account using the values specified on the command line plus the default
values from the system. Depending on command line options, the useradd
command will update system files and may also create the new user''s home
directory and copy initial files.
By default, a group will also be created for the new user (see -g, -N, -U,
and USERGROUPS_ENAB).
命令常用选项
选项 | 含义 |
---|---|
-u UID | 手工指定用户的 UID,注意 UID 的范围(不要小于 500)。 |
-d 主目录 | 手工指定用户的主目录。主目录必须写绝对路径,而且如果需要手工指定主目录,则一定要注意权限; |
-c 用户说明 | 手工指定/etc/passwd文件中各用户信息中第 5 个字段的描述性内容,可随意配置; |
-g 组名 | 手工指定用户的初始组。一般以和用户名相同的组作为用户的初始组,在创建用户时会默认建立初始组。一旦手动指定,则系统将不会在创建此默认的初始组目录。 |
-G 组名 | 指定用户的附加组。我们把用户加入其他组,一般都使用附加组; |
-s shell | 手工指定用户的登录 Shell,默认是 /bin/bash; |
-e 曰期 | 指定用户的失效曰期,格式为 "YYYY-MM-DD"。也就是 /etc/shadow 文件的第八个字段; |
-o | 允许创建的用户的 UID 相同。例如,执行 "useradd -u 0 -o usertest" 命令建立用户 usertest,它的 UID 和 root 用户的 UID 相同,都是 0; |
-m | 建立用户时强制建立用户的家目录。在建立系统用户时,该选项是默认的; |
-r | 创建系统用户,也就是 UID 在 1~499 之间,供系统程序使用的用户。由于系统用户主要用于运行系统所需服务的权限配置,因此系统用户的创建默认不会创建主目录。 |
这个命令帮助完成了以下操作
- 在
/etc/passwd
中创建一行与用户相关的数据 - 在
/etc/shadow
文件中新增了一行与用户相关的数据 - 在
/etc/group
文件中创建一行与用户名一模一样的群组 - 在
/etc/gshadow
文件中新增一行与新增群组相关的密码信息 - 默认创建用户的主目录和邮箱
- 将
/etc/skel
目录中的配置文件复制到新用户的主目录中
[root@192 ~]# grep "oxo" /etc/passwd
oxo:x:1000:1000::/home/oxo:/bin/bash
[root@192 ~]# grep "oxo" /etc/shadow
oxo:!!:19463:0:99999:7:::
[root@192 ~]# grep "oxo" /etc/group
oxo:x:1000:
[root@192 ~]# grep "oxo" /etc/gshadow
oxo:!::
[root@192 ~]# ll /var/spool/mail/oxo
-rw-rw----. 1 oxo mail 0 4月 16 09:10 /var/spool/mail/oxo
[root@192 ~]# ll -d /home/oxo/
drwx------. 2 oxo oxo 62 4月 16 09:10 /home/oxo/
还可以用useradd的各种选项亲自定制要创建的用户,这些默认值也是可以手动更改的,useradd 命令在添加用户时参考的默认值文件主要有两个,分别是 /etc/default/useradd
和 /etc/login.defs
1.6.1. /etc/default/useradd
文件
[root@192 ~]# cat /etc/default/useradd
# useradd defaults file
GROUP=100
HOME=/home
INACTIVE=-1
EXPIRE=
SHELL=/bin/bash
SKEL=/etc/skel
CREATE_MAIL_SPOOL=yes
[root@192 ~]# useradd -D ## -D 选项指的就是查看新建用户的默认值
GROUP=100
HOME=/home
INACTIVE=-1
EXPIRE=
SHELL=/bin/bash
SKEL=/etc/skel
CREATE_MAIL_SPOOL=yes
参数 | 含义 |
---|---|
GR0UP=100 |
这个选项用于建立用户的默认组,也就是说,在添加每个用户时,用户的初始组就是 GID 为 100 的这个用户组。但 CentOS 并不是这样的,而是在添加用户时会自动建立和用户名相同的组作为此用户的初始组。也就是说这个选项并不会生效。 Linux 中默认用户组有两种机制:一种是私有用户组机制,系统会创建一个和用户名相同的用户组作为用户的初始组;另一种是公共用户组机制,系统用 GID 是 100 的用户组作为所有新建用户的初始组。目前我们采用的是私有用户组机制。 |
HOME=/home | 指的是用户主目录的默认位置,所有新建用户的主目录默认都在 /home/下,刚刚新建的 lamp1 用户的主目录就为 /home/lamp1/。 |
INACTIVE=-1 | 指的是密码过期后的宽限天数,也就是 /etc/shadow 文件的第七个字段。这里默认值是 -1,代表所有新建立的用户密码永远不会失效。 |
EXPIRE= | 表示密码失效时间,也就是 /etc/shadow 文件的第八个字段。默认值是空,代表所有新建用户没有失效时间,永久有效。 |
SHELL=/bin/bash | 表示所有新建立的用户默认 Shell 都是 /bin/bash。 |
SKEL=/etc/skel | 在创建一个新用户后,你会发现,该用户主目录并不是空目录,而是有 .bash_profile、.bashrc 等文件,这些文件都是从 /etc/skel 目录中自动复制过来的。因此,更改 /etc/skel 目录下的内容就可以改变新建用户默认主目录中的配置文件信息。 |
CREATE_MAIL_SPOOL=yes | 指的是给新建用户建立邮箱,默认是创建。也就是说,对于所有的新建用户,系统都会新建一个邮箱,放在 /var/spool/mail/ 目录下,和用户名相同。例如,lamp1 的邮箱位于 /var/spool/mail/lamp1。 |
选项+参数 | 含义 |
---|---|
-b HOME | 设置所创建的主目录所在的默认目录,只需用目录名替换 HOME 即可,例如 useradd -D -b /gargae。 |
-e EXPIRE | 设置密码失效时间,EXPIRE 参数应使用 YYYY-MM-DD 格式,例如 useradd -D -e 2019-10-17。 |
-f INACTIVE | 设置密码过期的宽限天数,例如 useradd -D -f 7。 |
-g GROUP | 设置新用户所在的初始组,例如 useradd -D -g bear。 |
-s SHELL | 设置新用户的默认 shell,SHELL 必须是完整路径,例如 useradd -D -s /usr/bin/csh。 |
通过 /etc/default/useradd
文件,仅能修改有关新用户的部分默认值,有一些内容并没有在这个文件中,例如修改用户默认的 UID、GID,以及对用户密码的默认设置,对这些默认值的修改就需要在 /etc/login.defs
文件中进行
useradd 命令创建用户的过程是这样的
- 系统首先读取 /etc/login.defs 和
/etc/default/useradd
,根据这两个配置文件中定义的规则添加用户,也就是向/etc/passwd、/etc/group、/etc/shadow、/etc/gshadow
文件中添加用户数据 - 接着系统会自动在 /etc/default/useradd 文件设定的目录下建立用户主目录
- 最后复制
/etc/skel
目录中的所有文件到此主目录中 - 由此,一个新的用户就创建完成了
1.7. 修改用户密码:passwd命令
NAME
passwd - update user''s authentication tokens
SYNOPSIS
passwd [-k] [-l] [-u [-f]] [-d] [-e] [-n mindays] [-x maxdays] [-w warn?
days] [-i inactivedays] [-S] [--stdin] [username]
DESCRIPTION
The passwd utility is used to update user''s authentication token(s).
This task is achieved through calls to the Linux-PAM and Libuser API.
Essentially, it initializes itself as a "passwd" service with Linux-PAM and
utilizes configured password modules to authenticate and then update a
user''s password.
A simple entry in the global Linux-PAM configuration file for this service
would be:
#
# passwd service entry that does strength checking of
# a proposed password before updating it.
#
passwd password requisite pam_cracklib.so retry=3
passwd password required pam_unix.so use_authtok
#
Note, other module types are not required for this application to function
correctly.
选项+参数 | 含义 |
---|---|
-S | 查询用户密码的状态,也就是 /etc/shadow 文件中此用户密码的内容。仅 root 用户可用 |
-l | 暂时锁定用户,该选项会在 /etc/shadow 文件中指定用户的加密密码串前添加 "!",使密码失效。仅 root 用户可用 |
-u | 解锁用户,和 -l 选项相对应,也是只能 root 用户使用 |
--stdin | 可以将通过管道符输出的数据作为用户的密码。主要在批量添加用户时使用 |
-n 天数 | 设置该用户修改密码后,多长时间不能再次修改密码,也就是修改 /etc/shadow 文件中各行密码的第 4 个字段 |
-x 天数 | 设置该用户的密码有效期,对应 /etc/shadow 文件中各行密码的第 5 个字段 |
-w 天数 | 设置用户密码过期前的警告天数,对于 /etc/shadow 文件中各行密码的第 6 个字段 |
-i 日期 | 设置用户密码失效日期,对应 /etc/shadow 文件中各行密码的第 7 个字段 |
很多Linux 发行版为了系统安装,都使用了 PAM 模块进行密码的检验,设置密码太短、与用户名相同、是常见字符串等,都会被 PAM 模块检查出来,从而禁止用户使用此类密码,root不受影响
1.8. 修改用户信息:usermod
名称
usermod - 修改一个用户账户
大纲
usermod [选项] 登录
描述
The usermod command modifies the system account files to reflect the
changes that are specified on the command line.
利用 useradd 命令添加用户,但如果不小心添错用户信息, 一个是使用 Vim 文本编辑器手动修改涉及用户信息的相关文件(/etc/passwd、/etc/shadow、/etc/group、/etc/gshadow),另一个方法就是使用 usermod 命令,该命令专门用于修改用户信息
选项+参数 | 含义 |
---|---|
-c用户说明 | 修改用户的说明信息,即修改 /etc/passwd 文件目标用户信息的第 5 个字段 |
-d 主目录 | 修改用户的主目录,即修改 /etc/passwd 文件中目标用户信息的第 6 个字段,需要注意的是,主目录必须写绝对路径 |
-e 日期 | 修改用户的失效曰期,格式为 "YYYY-MM-DD",即修改 /etc/shadow 文件目标用户密码信息的第 8 个字段 |
-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 |
相比 useradd 命令,usermod 命令还多出了几个选项,即 -L 和 -U,作用分别与 passwd 命令的 -l 和-u 相同,并不是所有的 Linux 发行版都包含这个命令,因此,使用前可以使用 man usermod 命令确定系统是否支持,此命令对用户的临时锁定,同 passwd 命令一样,都是在 /etc/passwd 文件目标用户的加密密码字段前添加 "!",使密码失效;反之,解锁用户就是将添加的 "!" 去掉
1.9. 修改用户密码状态:chage
除了使用passwd -S命令查看用户的密码信息外,还可以使用chage命令,它可以显示更加详细的用户密码信息,和passwd一样提供了修改用户密码信息的功能
名称
chage - 更改用户密码过期信息
大纲
chage [选项] 登录
描述
The chage command changes the number of days between password changes and
the date of the last password change. This information is used by the
system to determine when a user must change their password.
选项+参数 | 含义 |
---|---|
-l | 列出用户的详细密码状态 |
-d 日期 | 修改 /etc/shadow 文件中指定用户密码信息的第 3 个字段,也就是最后一次修改密码的日期,格式为 YYYY-MM-DD |
-m 天数 | 修改密码最短保留的天数,也就是 /etc/shadow 文件中的第 4 个字段 |
-M 天数 | 修改密码的有效期,也就是 /etc/shadow 文件中的第 5 个字段 |
-W 天数 | 修改密码到期前的警告天数,也就是 /etc/shadow 文件中的第 6 个字段 |
-i 天数 | 修改密码过期后的宽限天数,也就是 /etc/shadow 文件中的第 7 个字段 |
-E 日期 | 修改账号失效日期,格式为 YYYY-MM-DD,也就是 /etc/shadow 文件中的第 8 个字段 |
chage 命令除了修改密码信息的功能外,还可以强制用户在第一次登录后,必须先修改密码,并利用新密码重新登陆系统,此用户才能正常使用,chage 的这个功能常和 passwd 批量初始化用户密码功能合用
1.10. 删除用户:userdel
名称
userdel - 删除用户账户和相关文件
大纲
userdel [选项] 登录
描述
The userdel command modifies the system account files, deleting all entries
that refer to the user name LOGIN. The named user must exist.
选项
-r, --remove
用户主目录中的文件将随用户主目录和用户邮箱一起删除。在其它文件系统中的文件
必须手动搜索并删除。
## 在删除用户的同时如果不删除用户的家目录,那么家目录就会变成没有属主和属组的目录,也就是垃圾文件
用户的相关数据包含如下几项
- 用户基本信息:存储在 /etc/passwd 文件中
- 用户密码信息:存储在 /etc/shadow 文件中
- 用户群组基本信息:存储在 /etc/group 文件中
- 用户群组信息信息:存储在 /etc/gshadow 文件中
- 用户个人文件:主目录默认位于 /home/用户名,邮箱位于 /var/spool/mail/用户名
userdel 命令的作用就是从以上文件中,删除与指定用户有关的数据信息,如果我们想要从系统中彻底的删除某个用户,最好在使用 userdel 命令之前,先通过 find -user 用户名
命令查出系统中属于该用户的文件,然后在加以删除
1.11. 查看用户的UID和GID
id命令可以查询用户的UID和GID以及附加组的信息
NAME
id - print real and effective user and group IDs
SYNOPSIS
id [OPTION]... [USER]
1.12. linux用户间的切换su和su -
su 是最简单的用户切换命令,通过该命令可以实现任何身份的切换,包括从普通用户切换为 root 用户、从 root 用户切换为普通用户以及普通用户之间的切换,普通用户之间切换以及普通用户切换至 root 用户,都需要知晓对方的密码,只有正确输入密码,才能实现切换;从 root 用户切换至其他用户,无需知晓对方密码,直接可切换成功
NAME
su - run a command with substitute user and group ID
SYNOPSIS
su [options...] [-] [user [args...]]
DESCRIPTION
su allows to run commands with substitute user and group ID.
When called without arguments su defaults to running an interactive shell
as root.
For backward compatibility su defaults to not change the current directory
and to only set the environment variables HOME and SHELL (plus USER and
LOGNAME if the target user is not root). It is recommended to always use
the --login option (instead it''s shortcut -) to avoid side effects caused
by mixing environments.
This version of su uses PAM for authentication, account and session manage‐
ment. Some configuration options found in other su implementations such as
e.g. support of a wheel group have to be configured via PAM.
选项+参数 | 含义 |
---|---|
- | 当前用户不仅切换为指定用户的身份,同时所用的工作环境也切换为此用户的环境(包括 PATH 变量、MAIL 变量等),使用 - 选项可省略用户名,默认会切换为 root 用户 |
-l | 同 - 的使用类似,也就是在切换用户身份的同时,完整切换工作环境,但后面需要添加欲切换的使用者账号 |
-p | 表示切换为指定用户的身份,但不改变当前的工作环境(不使用切换用户的配置文件) |
-m | 和 -p 一样 |
-c 命令 | 仅切换用户执行一次命令,执行后自动切换回来,该选项后通常会带有要执行的命令 |
1.12.1. su和su -的区别
注意,使用su命令时,有-和没有-是完全不同的,-选项表示在切换用户身份的同时,连当前使用的环境变量也切换成指定用户的,环境变量是用来定义操作系统环境的,因此如果系统环境没有随用户身份切换,很多命令无法正确执行
普通用户通过su
切换root用户
- 系统中的
$PATH
环境变量依然是 lamp 的(而不是 root 的) - 当前工作环境中,并不包含
/sbin、/usr/sbin
等超级用户命令的保存路径,这就导致很多管理员命令根本无法使用 - 当 root 用户接受邮件时,会发现收到的是 lamp 用户的邮件,因为环境变量
$MAIL
也没有切换
1.13. whoami和who am i
whoami 命令和 who am i 命令是不同的 2 个命令,前者用来打印当前执行操作的用户名,后者则用来打印登陆当前 Linux 系统的用户名
[oxo@192 ~]$ whoami
oxo
[oxo@192 ~]$ who am i
oxo pts/0 2023-04-17 01:39 (192.168.88.1)
[oxo@192 ~]$ su root
密码:
[root@192 oxo]# whoami
root
[root@192 oxo]# who am i
oxo pts/0 2023-04-17 01:39 (192.168.88.1)
在未切换用户身份之前,whoami 和 who am i 命令的输出是一样的
使用 su 命令切换用户身份后
- 使用 whoami 命令打印的是切换后的用户名
- 而 who am i 命令打印的仍旧是登陆系统时所用的用户名
- 执行 whoami 命令,等同于执行 id -un 命令
- 执行 who am i 命令,等同于执行 who -m 命令
使用 su 或者 sudo 命令切换用户身份,骗得过 whoami,但骗不过 who am i
背后的运行机制,是实际用户(UID)和有效用户(EUID,即 Effective UID
- 实际用户指的是登陆 Linux 系统时所使用的用户,因此在整个登陆会话过程中,实际用户是不会发生变化的
- 有效用户,指的是当前执行操作的用户,也就是说真正决定权限高低的用户,这个是能够利用 su 或者 sudo 命令进行任意切换的
一般情况下,实际用户和有效用户是相同的,如果出现用户身份切换的情况,它们会出现差异。需要注意的是,实际用户和有效用户出现差异,切换用户并不是唯一的触发机制
whoami 和 who am i通常应用在哪些场景中
- 对那些经常需要切换用户的系统管理员来说,经常需要明确当前使用的是什么身份
- 另外,对于某些 shell 脚本,或者需要特别的用户才能执行,这时就需要利用 whoami 命令来搞清楚执行它的用户是谁
- 还有一些 shell 脚本,一定要某个特别用户才能执行,即便使用 su 或者 sudo 命令切换到此身份都不行,此时就需要利用 who am i 来确认
1.14. 添加用户组:groupadd
名称
groupadd - 创建一个新组
大纲
groupadd [选项] group
描述
The groupadd command creates a new group account using the values specified
on the command line plus the default values from the system. The new group
will be entered into the system files as needed.
选项
-r, --system
创建一个系统组。
-g, --gid GID
The numerical value of the group''s ID. This value must be unique,
unless the -o option is used. The value must be non-negative. The
default is to use the smallest ID value greater than or equal to
GID_MIN and greater than every other group.
1.15. 修改用户组:groupmod
名称
groupmod - modify a group definition on the system
大纲
groupmod [选项] GROUP
描述
The groupmod command modifies the definition of the specified GROUP by
modifying the appropriate entry in the group database.
选项
-g, --gid GID
The group ID of the given GROUP will be changed to GID.
The value of GID must be a non-negative decimal integer. This value
must be unique, unless the -o option is used.
Users who use the group as primary group will be updated to keep the
group as their primary group.
Any files that have the old group ID and must continue to belong to
GROUP, must have their group ID changed manually.
No checks will be performed with regard to the GID_MIN, GID_MAX,
SYS_GID_MIN, or SYS_GID_MAX from /etc/login.defs.
-n, --new-name NEW_GROUP
The name of the group will be changed from GROUP to NEW_GROUP name.
用户名不要随意修改,组名和 GID 也不要随意修改,因为非常容易导致管理员逻辑混乱
如果非要修改用户名或组名,则建议大家先删除旧的,再建立新的
1.16. 删除用户组:groupdel
名称
groupdel - 删除一个组
大纲
groupdel [选项] GROUP
描述
The groupdel command modifies the system account files, deleting all
entries that refer to GROUP. The named group must exist.
注意,不能使用 groupdel 命令随意删除群组
- 此命令仅适用于删除那些 "不是任何用户初始组" 的群组
- 如果有群组还是某用户的初始群组,则无法使用 groupdel 命令成功删除
1.17. 把用户添加进组或从组中删除:gpasswd
名称
gpasswd - administer /etc/group and /etc/gshadow
大纲
gpasswd [选项] group
描述
The gpasswd command is used to administer /etc/group, and /etc/gshadow.
Every group can have administrators, members and a password.
System administrators can use the -A option to define group
administrator(s) and the -M option to define members. They have all rights
of group administrators and members.
gpasswd called by a group administrator with a group name only prompts for
the new password of the group.
If a password is set the members can still use newgrp(1) without a
password, and non-members must supply the password.
请注意组密码
Group passwords are an inherent security problem since more than one person
is permitted to know the password. However, groups are a useful tool for
permitting co-operation between different users.
选项 | 功能 |
---|---|
选项为空时,表示给群组设置密码,仅 root 用户可用。 | |
-A user1,... | 将群组的控制权交给 user1,... 等用户管理,也就是说,设置 user1,... 等用户为群组的管理员,仅 root 用户可用。 |
-M user1,... | 将 user1,... 加入到此群组中,仅 root 用户可用。 |
-r | 移除群组的密码,仅 root 用户可用。 |
-R | 让群组的密码失效,仅 root 用户可用。 |
-a user | 将 user 用户加入到群组中。 |
-d user | 将 user 用户从群组中移除。 |
除 root 可以管理群组外,可设置多个普通用户作为群组的管理员,但也只能做“将用户加入群组”和“将用户移出群组”的操作
使用 usermod -G
命令也可以将用户加入群组,使用此命令将用户加入到新的群组后,该用户之前加入的那些群组都将被清空,将用户加入或移出群组,最好使用 gpasswd 命令
1.18. 切换用户的有效组:newgrp
每个用户可以属于一个初始组(用户是这个组的初始用户),也可以属于多个附加组(用户是这个组的附加用户)
1.18.1. 用户可以属于这么多用户组,那么用户在创建文件后
- 初始用户组的组身份生效,因为初始组是用户一旦登陆就获得的组身份
- 用户的有效组默认是初始组,因此所创建文件的属组是用户的初始组
那么用户属于多个用户组,如果想要改变用户的初始组,使用命令 newgrp 就可以从用户的附加组中选择一个群组,作为用户新的初始组
名称
newgrp - 登录到一个新组
大纲
newgrp [-] [group]
描述
The newgrp command is used to change the current group ID during a login
session. If the optional - flag is given, the user''s environment will be
reinitialized as though the user had logged in, otherwise the current
environment, including current working directory, remains unchanged.
newgrp changes the current real group ID to the named group, or to the
default group listed in /etc/passwd if no group name is given. newgrp also
tries to add the group to the user groupset. If not root, the user will be
prompted for a password if she does not have a password (in /etc/shadow if
this user has an entry in the shadowed password file, or in /etc/passwd
otherwise) and the group does, or if the user is not listed as a member and
the group has a password. The user will be denied access if the group
password is empty and the user is not listed as a member.
If there is an entry for this group in /etc/gshadow, then the list of
members and the password of this group will be taken from this file,
otherwise, the entry in /etc/group is considered.
配置文件
The following configuration variables in /etc/login.defs change the
behavior of this tool:
SYSLOG_SG_ENAB (boolean)
Enable "syslog" logging of sg activity.
文件
/etc/passwd
用户账户信息。
/etc/shadow
安全用户账户信息。
/etc/group
组账户信息。
/etc/gshadow
安全组账户信息。
参见
id(1), login(1), su(1), sg(1), gpasswd(1), group(5), gshadow(5).