visudo与/etc/sudoers
从上面的说明我们可以知道,除了 root 之外的其他账号,若想要使用 sudo 执行属于 root 的权限 指令,则 root 需要先使用 visudo 去修改 /etc/sudoers ,让该账号能够使用全部或部分的 root 指令 功能。为什么要使用 visudo 呢?这是因为 /etc/sudoers 是有设定语法的,如果设定错误那会造成无 法使用 sudo 指令的不良后果。因此才会使用 visudo 去修改, 并在结束离开修改画面时,系统会去 检验 /etc/sudoers 的语法就是了。
一般来说,visudo 的设定方式有几种简单的方法喔,底下我们以几个简单的例子来分别说明:
I. 单一用户可进行 root 所有指令,与 sudoers 文件语法:
假如我们要让 vbird1 这个账号可以使用 root 的任何指令,基本上有两种作法,第一种是直接透 过修改 /etc/sudoers ,方法如下:
[root@study ~]# visudo
....(前面省略)....
root ALL=(ALL) ALL <==到这一行,大约在 98 行左右
vbird1 ALL=(ALL) ALL <==这一行是你要新增的!
....(底下省略)....
有趣吧!其实 visudo 只是利用 vi 将 /etc/sudoers 文件呼叫出来进行修改而已,所以这个文件就 是 /etc/sudoers 啦! 这个文件的设定其实很简单,如上面所示,如果你到 98 行 (有 root 设定 的那行) 左右,看到的数据就是:
十年磨一剑打一成语使用者账号 登入者的来源主机名=(可切换的身份) 可下达的指令
root ALL=(ALL) ALL <==这是默认值
上面这一行的四个组件意义是:
1. 『使用者账号』:系统的哪个账号可以使用 sudo 这个指令的意思;
2. 『登入者的来源主机名』:当这个账号由哪部主机联机到本 Linux 主机,意思是这个账
号可能是由哪一部网 络主机联机过来的, 这个设定值可以指定客户端计算机(信任的来源的意思)。默认值 root 可来自任何一部 网络主机
3. 『(可切换的身份)』:这个账号可以切换成什么身份来下达后续的指令,默认 root 可以切换成任何人;
4. 『可下达的指令』:可用该身份下达什么指令?这个指令请务必使用绝对路径撰写。 预设 root 可以切换任 何身份且进行任何指令之意。
那个 ALL 是特殊的关键词,代表任何身份、主机或指令的意思。所以,我想让 vbird1 可以进行 任何身份的任何指令,就如同上表特殊字体写的那样,其实就是复制上述默认值那一行,再将 root 改成 vbird1 即可啊! 此时『vbird1 不论来自哪部主机登入,他可以变换身份成为任何人,且可 以进行系统上面的任何指令』之意。 修改完请储存后离开 vi,并以 vbird1 登入系统后,进行如 下的测试看看:
[vbird1@study ~]$ tail -n 1 /etc/shadow <==注意!身份是 vbird1
tail: cannot open `/etc/shadow' for reading: Permission denied
大使馆领事馆
# 因为不是 root 嘛!所以当然不能查询 /etc/shadow
[vbird1@study ~]$ sudo tail -n 1 /etc/shadow <==透过 sudo
We trust you have received the usual lecture from the local System
Administrator. It usually boils down to these three things:
#1) Respect the privacy of others. <==这里仅是一些说明与警示项目
#2) Think before you type.
图片jpg格式怎么转换 #3) With great power comes great responsibility.
[sudo] password for vbird1: <==注意啊!这里输入的是『 vbird1 自己的密码 』
pro3:$6$DMilzaKr$:16636:0:99999:7:::
# 看!vbird1 竟然可以查询 shadow !
注意到了吧!vbird1 输入自己的密码就能够执行 root 的指令!所以,系统管理员当然要了解 vbird1 这个用户的『操守』才行!否则随便设定一个用户,他恶搞系统怎办?另外,一个一个设定太麻 烦了, 能不能使用组的方式来设定呢?参考底下的第二种方式吧。
II. 利用 wheel 组以及免密码的功能处理 visudo
我们在本章前面曾经建立过 pro1, pro2, pro3 ,这三个用户能否透过组的功能让这三个人可以管 理系统? 可以的,而且很简单!同样我们使用实际案例来说明:
[root@study ~]# visudo <==同样的,请使用 root 先设定
....(前面省略)....
%wheel ALL=(ALL) ALL <==大约在 106 行左右,请将这行的 # 拿掉!
# 在最左边加上 % ,代表后面接的是一个『组』之意!改完请储存后离开
[root@study ~]# usermod -a -G wheel pro1 <==将 pro1 加入 wheel 的支持
造梦西游3boss技能怎么解锁上面的设定值会造成『任何加入 wheel 这个组的使用者,就能够使用 sudo 切换任何身份来操 作任何指令』的意思。 你当然可以将 wheel 换成你自己想要的组名。接下来,请分别切换身 份成为 pro1 及 pro2 试看看 sudo 的运作。
[pro1@study ~]$ sudo tail -n 1 /etc/shadow <==注意身份是 pro1
....(前面省略)....
[sudo] password for pro1: <==输入 pro1 的密码喔!
pro3:$6$DMilzaKr$:16636:0:99999:7:::
[pro2@study ~]$ sudo tail -n 1 /etc/shadow <==注意身份是 pro2
[sudo] password for pro2: <==输入 pro2 的密码喔!
pro2 is not in the sudoers file. This incident will be reported.
# 仔细看错误讯息他是说这个 pro2 不在 /etc/sudoers 的设定中!
这样理解组了吧?如果你想要让 pro3 也支持这个 sudo 的话,不需要重新使用 visudo ,只要 利用 usermod 去修改 pro3 的组支持,让 pro3 用户加入 wheel 组当中,那他就能够进行 sudo 啰! 好了!那么现在你知道为啥在安装时建立的用户,就是那个 dmstai 预设可以使用 sudo 了 吗?请使用『 id dmtsai 』看看, 这个用户是否有加入 wheel 组呢?嘿嘿!了解乎?
Tips 从 CentOS 7 开始,在 sudoers 文件中,预设已经开放 %wheel 那一行啰!以前的 CentOS 旧版本都是没有 启用的呢!
简单吧!不过,既然我们都信任这些 sudo 的用户了,能否提供『不需要密码即可使用 sudo 』呢? 就透过如下的方式:
[root@study ~]# visudo <==同样的,请使用 root 先设定
....(前面省略)....
%wheel ALL=(ALL) NOPASSWD: ALL <==大约在 109 行左右,请将 # 拿掉!
# 在最左边加上 % ,代表后面接的是一个『组』之意!改完请储存后离开
重点是那个 NOPASSWD 啦!该关键词是免除密码输入的意思喔!
III. 有限制的指令操作:
上面两点都会让使用者能够利用 root 的身份进行任何事情!这样总是不太好~如果我想要让用户 仅能够进行部分系统任务, 比方说,系统上面的 myuser1 仅能够帮 root 修改其他用户的密码时, 亦即『当使用者仅能使用 passwd 这个指令帮忙 root 修改其他用户的密码』时,你该如何撰写呢? 可以这样做:
[root@study ~]# visudo <==注意是 root 身份
myuser1 ALL=(root) /usr/bin/passwd <==最后指令务必用绝对路径
上面的设定值指的是『myuser1 可以切换成为 root 使用 passwd 这个指令』的意思。其中要注意 的是: 指令字段必须要填写绝对路径才行!否则 visudo 会出现语法错误的状况发生! 此外,上 面的设定是有问题的!我们使用底下的指令操作来让您了解:
[myuser1@study ~]$ sudo passwd myuser3 <==注意,身份是 myuser1
[sudo] password for myuser1: <==输入 myuser1 的密码
徐海乔承认过的女友Changing password for user myuser3. <==底下改的是 myuser3 的密码喔!这样是正确的
New password: Retype new password:
passwd: all authentication tokens updated successfully.
[myuser1@study ~]$ sudo passwd
Changing password for user root. <==见鬼!怎么会去改 root 的密码?
恐怖啊!我们竟然让 root 的密码被 myuser1 给改变了!下次 root 回来竟无法登入系统...欲哭无 泪~怎办? 所以我们必须要限制用户的指令参数!修改的方法为将上述的那行改一改先:
[root@study ~]# visudo <==注意是 root 身份
myuser1 ALL=(root) !/usr/bin/passwd, /usr/bin/passwd [A-Za-z]*, !/usr/bin/passwd root
在设定值中加上惊叹号『 ! 』代表『不可执行』的意思。因此上面这一行会变成:可以执行『 passwd 任意字符』,但是『 passwd 』与『 passwd root 』这两个指令例外! 如此一来 myuser1 就无法 改变 root 的密码了!这样这位使用者可以具有 root 的能力帮助你修改其他用户的密码, 而且也 不能随意改变 root 的密码!很有用处的!
可以在家上班的工作
版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系QQ:729038198,我们将在24小时内删除。
发表评论