目录 :
修改用户属性
# 修改用户信息
# 删除用户账号
# 为用户设置密码
# 用户间切换
控制用户对系统命令的使用权限
修改用户属性 :
修改用户信息 : Usermod
命令格式 : Usermod [ 选项 ] username
常用选项 :
该命令的常用选项大多 与 上一节 useradd 的选项一样,例如 :-c,-d,-m,-g
-G,-s,-u 等是与 useradd 中相同选项的用法一样的!!
( 详细使用方法 ,可以参考前面 useadd 命令 )
另外,还可以使用一下几个 选项 :
选项 | 含义 |
- l ( 小 L ) | 新用户名,更改账户的名称,必须在该用户未登录的情况下才可以使用!!! |
- L ( 大 L ) | 锁定(暂停) 用户账户,使其不能登录使用 |
-U | 解锁用户账户 |
示例 :
-l 选项 :
注 : 上示 是原版 我们要以 testuser16 做对比,上示为原样。
我们主要看 执行完命令后 testuser16 的对比 !
执行命令 : 使用 - l 选项 将 testuser16 改为 testuser60
上示 即为 : 执行完 -l 选项后的效果 可以看到 只改了 用户名(原来是 testuser16 ,执行完
命令后,变为 testuser60)
但是,看整个前后文件对比,只有用户名变了,但是文件里的用户名并没有
改变,用户家目录的用户名还是原来的用户名 --- tsetuser16 !!
综上 : usermod 的 -l 选项我们并不建议使用,因为,倘若,要改的这个用户名,已经在系
统中存在了一段时间,并且有一些配置文件了,你现在再去修改这个用户名(关键
是它这个选项确实是只 TM 修改了用户名,那些文件里得用户名还是原来的用户名)
还是有影响的!!!
- L -U 选项 :
[root@bogon ~]# usermod -L testuser15
先执行命令 对 testuser15 进行锁定
[root@bogon ~]# passwd -S testuser15
testuser15 LK 2022-10-06 0 99999 7 -1 (Password locked.)
# passwd -S 选项是查看 用户信息的 !!
# 可以看到在显示 用户信息的末尾是 Password locked 说明 该用户已被锁定
[root@bogon ~]# usermod -U testuser15
[root@bogon ~]# passwd -S testuser15
testuser15 PS 2022-10-16 0 99999 7 -1 (Password set, SHA512 crypt.)
# 使用 -U 选项对 testuser15 进行解锁
# 可以看到再次使用 Passwd -S 选项对 testuser 15 查看的时候 ,后面显示的是 密码
已设置,已经不是 Locked 了!!
# 还需要注意一点的是,此例, testuser15 用户我们已经提前设置过密码了,说这点
的意义是,倘若你要锁定的用户没有设置密码,那么,你是可以锁定用户,但你要是
使用 -U 选项来解锁用户,则不会成功执行,系统会提示(提示你先设置密码!)
删除用户账号 : userdel
命令格式 : userdel [ -r ] 账户名
示例 :
[root@bogon ~]# userdel testuser15
# 这是我们要执行的命令 ( 删除 testuser15)
# 我们查看下 当删除完用户后 那三个文件有什么变化没 !!
显然我们在这三个文件里 看不到 testuser15 的身影
我们再查看下 /etc/home 下的变化,看看 会不会和上面 三个文件的内容一样!
# 可以看到当我们使用 userdel 删除 用户,在 那三个文件是没有了 testuser15
的身影,但是,在 /etc/home 家目录里 还存在着 !!
那么我们怎样就能把 家目录里 也删掉呢??
=====> > > 这就需要用到 -r 选项!!!
示例 :
[root@bogon home]# userdel -r testuser9
执行 -r 选项 命令!!!
结果示下 :
已经找不到 关于 testuser9 的内容了!!!
为用户设置密码 : Passwd
命令格式 : Passwd [ 选项 ] 用户名
示例 :
# 下示命令即为 testuser3 设置命令 ( 没有添加 选项 )
[root@bogon ~]# passwd testuser3
可以看到当执行完命令后,你在输入密码的时候,终端并没有直接显示密码
看上去似乎更像是 你没有输入 密码!!
当两次输入密码完成后 出现 successfully 时即 为用户设置密码成功!!!
常用选项 :
-d |
清空指定用户的口令。这与未设置口令的账户不同
,
未设置口令的账户无法登录系统
,
而口令为空的账户可以。
|
-e |
强迫用户下次登录时必须修改口令。
|
-i |
口令过期后多少天停用账户。
|
-l |
锁定
(
停用
)
用户账户
|
-n |
最小生存时间
|
-S(大写) |
显示账户口令的简短状态信息
(
是否被锁定
)
|
-u |
解锁用户账户
|
示例 : 选项下示
-d 选项 :
# 我们当时创建了 那么多用户 ,都没有设置密码,只给这两个用户 rhcsa 和
testuser3 设置了密码,因此,在登录界面就看到了这幅景象!! 只显示了 设置密
码的用户( rhcsa testuser3 )
# 这就是说,-d 选项中解释的那样,未设置口令的是不能登录用户的!!
接下来,我们使用 -d 选项 对 testuser4 执行一下 (testuser4 没有设置密码 )
- d选项执行成功 !!
再看下 登录界面 :
在界面显示了 testuser4 ,说明该用户可登录
点击 testuser4 ,发现不用输入密码 直接登录!!
- e 选项 :
现在对 testuser8 进行 -e 操作 ( testuser8 已经设置密码 )
打开登录界面 登录 testuser8 :
点击登录 testuser8
输入登录密码
当上一步 输入完登录密码后,进来显示的就是上图!!
current : 再次输入当前密码
上图即是 -e 选项的作用,让你重新设置密码 !!
有趣的是 : 新密码的设置不太顺利,因为 系统会让你 设置的密码很复杂,才会设置成功!
再次输入 新设置的密码 (输入完成后便登陆成功)
- i 选项 :
[root@bogon ~]# passwd -i 3 testuser4
对 testuser3 执行命令 -i
可以看到在 /etc/shadow 文件里 testuser4 的倒数第三个字段 显示 3
即 密码过期 3 天后 禁用账户 !!
- l 选项 :
这是没有执行 -l 选项的 登录界面!(我们做以待会儿 执行完命令的对比!)
[root@bogon ~]# passwd -l testuser8
执行命令 !!
当执行完命令后,发现登录界面已经没有了 testuser8 账户,即说明 -l 选项执行成功,
testuser8 被锁定!!
- S 选项 :
[root@bogon ~]# passwd -S testuser8
查看 testuser8 的简短信息
可以看到 显示的是 testuser8 密码已被锁定!!
(这是我们刚才执行 -l 选项造成的!!)
- u 选项 :
[root@bogon ~]# passwd -u testuser8
刚才使用 -l 选项对 testuser8 进行了 封锁,现在再使用 -u 选项解锁!!
可以看到,testuser8 又重新 出现在了 登录界面!!
也可以看到 使用 -S 选项显示的内容, 并不是 Password locked ,说明没有锁定!
用户间切换 : su
# 从 root 用户 切换到其它任何用户 不需要密码验证,而从普通用户切换到 root 用户 或者切换到
其它普通用户 是都需要目标用户的密码的!!
# 有两种方式 :
su 用户名
su - 用户名
区别在于 :
su 用户名 只是切换了 root 身份,但 SHELL 环境仍然是 普通用户的 SHELL 。
su - 用户名 是会连着 用户环境一起切了过来 !!
控制用户对系统命令的使用权限 ( sudo )
sudo命令
官方意义 : 控制用户对系统命令的使用权限
系统命令 : 其实就是指的 root 允许的权限 !!
通俗意义 : 通过 sudo 提高普通用户的 操作权限
(该权限是需要进行配置才可以使用)
配置 sudo 的两种方式 :
visudo ( 建议使用,它可以进行 语法检查 )
vi /etc/sudoer ( 不具备校验语法)
# 这两种方式其实本质上都是使用了 vi 编辑,只不过一个具备 语法检查,一个
不具备。 当语法不正确会报错!!
# 一定是 root 用户 来进行 配置文件 ,因为只有 root 用户才可以给 普通用户
分配权限
查看 sudo 配置文件 :
查看命令 :
vim /etc/sudoers
展示主要内容 :
# 当你使用命令查看 配置文件时,发现文件里的内容蛮多,并且,倘若你是第一次进来
查看文件,脑子里的反应肯定是 晕的,不知道这文件到底该怎么看!!
# 配置文件其实可以分为两部分:
1. 别名规则 :
2. 授权规则 :
# 下面我分别对这两部分做以基本介绍,这也是,你要了解掌握 sudo 命令背后秘密的必
须掌握的内容!!
别名规则 :
## Host Aliases 主机别名
## Groups of machines. You may prefer to use hostnames (perhaps using
## wildcards for entire domains) or IP addresses instead.
# Host_Alias FILESERVERS = fs1, fs2
# Host_Alias MAILSERVERS = smtp, smtp2
## User Aliases 用户别名
## These aren't often necessary, as you can use regular groups
## (ie, from files, LDAP, NIS, etc) in this file - just use %groupname
## rather than USERALIAS
# User_Alias ADMINS = jsmith, mikem
## Command Aliases 命令别名
## These are groups of related commands...
## Networking
# Cmnd_Alias NETWORKING = /sbin/route, /sbin/ifconfig, /bin/ping, /sbin/dhclient, /usr/bin/net, /sbin/iptables, /usr/bin/rfcomm, /usr/bin/wvdial, /sbin/iwconfig, /sbin/mii-tool
## Installation and management of software
# Cmnd_Alias SOFTWARE = /bin/rpm, /usr/bin/up2date, /usr/bin/yum
## Services
# Cmnd_Alias SERVICES = /sbin/service, /sbin/chkconfig, /usr/bin/systemctl start, /usr/bin/systemctl stop, /usr/bin/systemctl reload, /usr/bin/systemctl restart, /usr/bin/systemctl status, /usr/bin/systemctl enable, /usr/bin/systemctl disable
## Updating the locate database
# Cmnd_Alias LOCATE = /usr/bin/updatedb
## Storage
# Cmnd_Alias STORAGE = /sbin/fdisk, /sbin/sfdisk, /sbin/parted, /sbin/partprobe, /bin/mount, /bin/umount
## Delegating permissions
# Cmnd_Alias DELEGATING = /usr/sbin/visudo, /bin/chown, /bin/chmod, /bin/chgrp
## Processes
# Cmnd_Alias PROCESSES = /bin/nice, /bin/kill, /usr/bin/kill, /usr/bin/killall
## Drivers
# Cmnd_Alias DRIVERS = /sbin/modprobe
# 上示内容 : 展示了三大别名设置 : 主机别名 用户别名 命令别名
其中,可以看到的是命令别名内容较多分的种类比较多!!
但是,目前来讲,基础阶段,配置的时候,基本就在 命令别名的下面进行
配置就行(暂时还不需要到 命令别名下面那么多种类 去配置!)
# 别名规则的定义格式 :
格式 : Alias_Type NAME = item1, item2, ...
解释 :
Alias_Type 指的就是 别名类型!
如前面介绍的那样 别名类型有四大类 :
Host_Alias : 主机别名
User_Alias : 用户别名
Cmnd_Alias : 命令别名
还有一个类是前面没介绍的 :
Runas_Alias : 他指的你想要给 哪个用户 赋予 怎样的权限 (是怎样的权限所
对应的那个用户)
说白了,就是我们所讲的 root 用户,因为 root 用户有一切权限
而我们所讲的 怎样的权限 所对应的 那个用户 在大多数情况下
就是 root 用户 !!
为了更好的 理解 Runas _ Alias ,我们举个例子 来更好体会下:
¥ 现在让 用户lebron 具备 修改 用户harry 密码 的权限!
那么,你看完上示,会有什么想法 ??
我们用目前知识来判断,首先可以肯定的是 : lebron 肯定是
不能独立的就可以修改 harry 密码,因为他不具备权限,那
么,现在, lebron 想要修改怎么办??
即 : 让 lebron 获得 修改 harry 的密码 权限
怎么获得呢 ??
通过 sudo命令 及 配置文件 赋予权限
即 : lebron 需要 获得 root 用户 赋予权限!!
至此 : 这里的 root 用户 就是 Runas_Alias
NAME : 解释如下
NAME的命名是包含大写字母、下划线以及数字,但必须以一个大写字
母开头,比如ADMIN、SYS1和NETWORKING都是合法的,而sYS和
6ADMIN是非法的!!
Host_Alias : 主机别名解释如下
示例一 :
Host_Alias HT1 = localhost,ztg,192.168.0.0/24
主机别名 : HT1
= 右边为 成员 !
成员 : 有三个成员 ( localhost, ztg, 192.168.0.0/24 )
# 代表什么意思呢?
就是 localhost,ztg,192.168.0.0/24 这三个主机(它们之间当然没
有任何关系)这三个主机 现在被 赋予了别名 HT1
示例二 :
Host_Alias HT1= localhost,ztguang,192.168.10.0/24 : HT2=ztg2,ztg3
注 : 这是一次性定义了 两个主机别名 HT1 、 HT2 中间用 : 隔开
User_Alias : 用户别名解释如下
注 : 别名成员可以是 用户,用户组(前面要加%号)
用户组 在下面内容 会提到 %wheel 在授权规则示例!
示例 :
User_Alias ADMIN = ztg,ztguang
用户别名 : ADMIN
= 右边为成员
成员 : ztg, ztguang ( 成员 必须在系统中确实存在!!)
Cmnd_Alias : 命令别名 解释如下 :
注 : 定义命令的别名,这些命令必须是系统存在的文件,要用绝对
路径,文件名可以用通配符表示。
示例 :
Cmnd_Alias SERVICES = /sbin/service, /sbin/chkconfig
命令别名 : SERVICES
= 右边为 具体命令
具体命令是 : /sbin/service ( 命令一 )
/sbin/chkconfig ( 命令二 )
Runas_Alias : 解释如下 :
注 : 用来定义runas别名,这个别名是指sudo允许切换到的用户
绝大多数情况 此别名的成员都是 仅 root 一个!!
一般不定义 该别名
示例 :
Runas_Alias RUN_AS = root
授权规则 :
## Allow root to run any commands anywhere 授权规则
root ALL=(ALL) ALL
# 上示 便是 : 当你把 别名的三个设置,设置完的时候 ( 主机,用户,命令)别名。
然后就要进行 授权!!
说白就是要把它们三个组合在一起 !!来给用户赋予权限 !
# 解释 上面的配置 :
root ALL=(ALL) ALL
用户 主机 = (切换到所有用户) 所有命令
ALL : 即表示 所有的意思 在本配置中,那三个 ALL 就代表的 所有的主机,所有
的用户,所有的命令 的意思
# 授权规则 :
格式 :
* 授权用户 主机 = 命令动作 ( 相对来讲 比较常用的方式! )
* 授权用户 主机=[(切换到哪些用户或用户组)] [是否需要密码验证] 命令1,[(切换
到哪些用户或用户组)] [是否需要密码验证] [命令2],[(切换到哪些用户或用户
组)] [是否需要密码验证] [命令3] …
第二种格式 看着比较复杂,只不过是 后面可以跟多条命令,是重复的!
## Allows people in group wheel to run all commands
%wheel ALL=(ALL) ALL
前面的配置是针对用户的 授权规则, 本配置指代的是 组 的授权规则 !!
也能看出来 和 用户 授权规则 没啥两样!!
# %wheel ALL=(ALL) ALL
wheel 组 这个wheel组里所有的主机 = 组里所有的用户 所有命令
让 用户natash 具备修改 用户harry 密码的权限
摘取 配置代码 :
Host_Alias FIRSTSERVERS = bogon # 主机别名
User_Alias FIRSTU = natash # 用户别名
Cmnd_Alias CHPASS = /usr/bin/passwd # 命令别名
FIRSTU FIRSTSERVERS=(root) CHPASS # 授权规则
# 可以看到, 在使用命令时 需要加上 sudo 去执行!!!!
(并且已经显示 成功!!)
# 可以看到,执行 sudo 的时候,系统问我们索要了 natash 的密码(第二行!)
(这是因为我们在 配置文件中的授权规则的时,没有配置 不需要密码 的命令!)
倘若 配置不需要密码 其命令是这样 :
在授权规则中配置 :
FIRSTU FIRSTSERVERS=(root) NOPASSWD: CHPASS
这般配置后,当 natash 使用 sudo 执行的时候,就不会再索要 natash 密码了!
如下图所示 :
可以看到不在索要 natash 的密码!!!
总结 :
# 当你想让某个用户执行某个命令或操作,但由于该用户不具备权限而无法执行的时
候需要 考虑 sudo 的作用意义!!
# 使用 sudo 需要注意 :
* 一定要在 /etc/sudoers 文件中进行配置 !配置后才能执行!
* 注意 四大别名的配置 以及 授权规则!
四大别名一般在配制的时候(大多数只配 三大别名!)
主机 用户 命令!!
* 命令别名 中的 实际要操作的命令 需要使用 绝对路径!!
(你得提前使用 whereis 命令查看 要操作的命令的 路径文件)
# 其实,当你把 整个 sudo 学习搞懂后,你可能仍会有个小疑问!!
为什么要用 别名 来操作呢??? 别名的意义究竟是什么呢??
其实 : 别名并不是必须的!! !
它存在的意义仅仅就是 可以用一个 简单的别名 就代替了 好多内容
因为这些别名的 = 右边 可以写 多个成员,也就是说,别名只不过就是
替代了多个内容而已!!!!
# 本篇文章可以看到,我们关于 sudo 举的例子 几乎都是 普通用户 被赋予 root 用户
的权限,当然也可以 进行 普通用户 被赋予 另一个 普通用户的 权限,道理都是一
样的!!! (只不过,就成了 四大别名的 配置 !!因为,要赋予的权限的用户,
也得表示出来!! —— Runas_Alias )