简述sudo安全切换工具,及详细讲解visudoer

sudo是什么

当我们去执行某个命令时,是切换用户以另外一个用户的身份运行。这个是在sudo文件中设定的另外一个发起人,这个发起人一般是管理员,并在文件中定义好发起人能够运行的命令列表,之后就能临时切换到发起人来执行这些命令,这种授权机制就是sudo。其中sudo的配置文件位置在/etc/sudoers,可以使用专用命令visudo来编辑这个文件完成授权。

授权项语法:
root ALL=(ALL) ALL —— 管理员用任何人的权限执行任何命令
users hosts=(runas) command —— users能够以runas的身份运行commands命令

其中users能够代表以下几种类型:
username —— 用户名
#uid —— 用户名id
%groupname —— 组名
%#gid —— 组名id
user_alias —— 用户别名

user_alias用户别名定义时必须使用全大写字符,可以定义为User_Alias、Host_Alias、Runas_Alias、Cmnd_Alias这些,User_Alias代表新建一个组,把几个用户归并为一个组,Cmnd_Alias表示把命令定义别名。

sudo的一些命令:
sudo -k —— 忘记此前的登录信息
sudo -l —— 列出sudo定义的能执行的命令

使用visudoer命令来配置各种应用场景

添加用户fedora

[root@localhost ~]# useradd fedora
[root@localhost ~]# echo '112233' | passwd --stdin fedora

如果以普通用户fedora运行useradd、userdel等命令会因没有权限被拒绝

[root@localhost ~]# su - fedora
[fedora@localhost ~]$ useradd user1
-bash: /usr/sbin/useradd: Permission denied

用visudo编辑sudo配置文件,让fedora能运行useradd、userdel命令

[root@localhost ~]# visudo
fedora ALL=(ALL) /usr/sbin/useradd,/sbin/userdel
#用户fedora能以管理员身份执行useradd,userdel命令

普通用户fedora用sudo来执行在配置中定义的命令

[root@localhost ~]# su - fedora
Last login: Wed Jul  4 02:16:41 EDT 2018 on pts/0
[fedora@localhost ~]$ sudo useradd user1

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.
    #3) With great power comes great responsibility.

[sudo] password for fedora: 
#第一次使用sudo命令会要验证登录才能使用
[fedora@localhost ~]$ id user1
uid=1003(user1) gid=1003(user1) groups=1003(user1)
#成功添加了user1账号
[fedora@localhost ~]$ sudo userdel user1
[fedora@localhost ~]$ id user1
id: user1: no such user
#成功删除了user1账号

[fedora@localhost ~]$ sudo -l
。。。
    (ALL) /usr/sbin/useradd, /sbin/userdel
#此时用-l选项可以查看fedora账户定义的两条sudo命令
第一次使用sudo命令会验证su账号的密码才能使用,后5分钟之内同一账号就不需再次验证,超过5分钟在执行就会继续要输入密码才能执行。
我们现在来使用 %wheel ALL=(ALL) ALL的格式来定义组内的用户能以任何人的身份在任何主机上执行任何命令。

账号fedora添加附加组wheel

[root@localhost ~]# usermod -a -G wheel fedora
[root@localhost ~]# id fedora
uid=1002(fedora) gid=1002(fedora) groups=1002(fedora),10(wheel)

删除之前定义的规则,添加新的组规则

[root@localhost ~]# visudo
%wheel ALL=(ALL) /usr/sbin/useradd,/sbin/userdel

wheel组中的fedora也可以使用sudo命令

[root@localhost ~]# su - fedora
[fedora@localhost ~]$ sudo -l
    (ALL) /usr/sbin/useradd, /sbin/userdel
#看到有两条命令可以用
[fedora@localhost ~]$ sudo useradd user1
[fedora@localhost ~]$ sudo userdel user1 -r
之前介绍了能用sudo以管理员身份执行很多命令,那么执行sudo su - root命令时能以root的身份切到root,此时sudo的能以管理员身份运行任何命令是很危险的,相当于有root权限了。解决此问题可以定义执行sudo命令时可以执行所有命令但不能用su就可以了。

修改刚刚的规则

[root@localhost ~]# visudo
%wheel ALL=(ALL) ALL,!/bin/su
#wheel组中的账户使用sudo能运行所有命令,但是不能运行su

切换到fedora后,在用sudo切换到root时失败

[root@localhost ~]# su - fedora
[fedora@localhost ~]$ sudo su -root
Sorry, user fedora is not allowed to execute '/bin/su -root' as root on localhost.localdomain.
虽然刚刚禁止sudo执行切换root了,但是执行sudo passwd root命令可以直接修改管理员的登录密码,这是我们可以添加规则!/usr/bin/passwd root,不允许sudo执行passwd命令时修改root账户的密码。

配置规则

[root@localhost ~]# visudo
%wheel ALL=(ALL) ALL,!/bin/su,!/usr/bin/passwd root

此时添加普通账号修改密码成功,但修改root密码失败

[fedora@localhost ~]$ sudo useradd user1
[fedora@localhost ~]$ sudo passwd user1
Changing password for user user1.
New password: 
BAD PASSWORD: The password is shorter than 8 characters
Retype new password: 
passwd: all authentication tokens updated successfully.
[fedora@localhost ~]$ sudo passwd root
Sorry, user fedora is not allowed to execute '/bin/passwd root' as root on localhost.localdomain.

有些命令需要多次调用时,避免每次书写复杂冗长的命令,可以把命令定义别名来调用。我们向多个用户同时授权的时候,也可以把这些用户定义别名。

清除之前的规则,添加新的规则

[root@localhost ~]# visudo
User_Alias USERADMIN=fedora,centos
#把两个账号定义别名
Cmnd_Alias NETADMINCMD=/usr/sbin/ip
#命令ip定义别名NETADMINCMD
Cmnd_Alias USERADMINCMD=/usr/sbin/useradd,/sbin/userdel
#命令useradd和userdel定义别名USERADMINCMD
fedora ALL=(ALL) NETADMINCMD
#账户fedora能以任何人的身份运行NETADMINCMD中的命令
centos ALL=(ALL) NETADMINCMD,USERADMINCMD
#账户centos能以任何人的身份运行NETADMINCMD和USERADMINCMD中的命令

添加账号centos后,切换centos能看到两个别名中定义的ip、useradd、userdel。切换fedora能看到一个别名中定义的ip命令。

[root@localhost ~]# useradd centos
[root@localhost ~]# echo '112233' | passwd --stdin centos
#添加账号,设置密码

[root@localhost ~]# su - centos
[centos@localhost ~]$ sudo -l
    (ALL) /usr/sbin/ip, /usr/sbin/useradd, /sbin/userdel
[centos@localhost ~]$ exit
[root@localhost ~]# su - fedora
[fedora@localhost ~]$ sudo -l
    (ALL) /usr/sbin/ip

使用USERADMIN别名来配置规则

[root@localhost ~]# visudo
USERADMIN ALL=(ALL) NETADMINCMD,USERADMINCMD
#USERADMIN中的用户都可以使用NETADMINCMD,USERADMINCMD两个别名中定义的命令
[root@localhost ~]# su - fedora
[fedora@localhost ~]$ sudo -l
    (ALL) /usr/sbin/ip, /usr/sbin/useradd, /sbin/userdel
#此时fedora能执行ip,useradd,userdel
每次用户操作的时候都要输入用户密码,只要在规则的别名前面加一个标签NOPASSWD就可以不需要密码操作。每次需要用户输入密码则加PASSWD。

修改规则

[root@localhost ~]# visudo
USERADMIN ALL=(ALL) NOPASSWD:NETADMINCMD,PASSWD:USERADMINCMD
[root@localhost ~]# su - fedora
[fedora@localhost ~]$ sudo -k  #清除之前的登录信息
[fedora@localhost ~]$ sudo -l
    (ALL) NOPASSWD: /usr/sbin/ip, PASSWD: /usr/sbin/useradd, /sbin/userdel
#显示ip不需密码,useradd、userdel需要密码
[fedora@localhost ~]$ sudo ip a l
1: lo: <LOOPBACK,UP,LOWER_UP> mtu 65536 qdisc noqueue state UNKNOWN qlen 1
    link/loopback 00:00:00:00:00:00 brd 00:00:00:00:00:00
    inet 127.0.0.1/8 scope host lo
       valid_lft forever preferred_lft forever
    inet6 ::1/128 scope host 
       valid_lft forever preferred_lft forever
2: ens33: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc pfifo_fast state UP qlen 1000
    link/ether 00:0c:29:9d:a6:14 brd ff:ff:ff:ff:ff:ff
    inet 192.168.10.11/24 brd 192.168.10.255 scope global ens33
       valid_lft forever preferred_lft forever
    inet6 fe80::ab0:a9:3e59:622a/64 scope link 
       valid_lft forever preferred_lft forever
#输入ip命令不需要密码

[fedora@localhost ~]$ sudo useradd user2
[sudo] password for fedora: 
[fedora@localhost ~]$ id user2
uid=1005(user2) gid=1005(user2) groups=1005(user2)
#此时输入useradd命令需要输入密码在执行
©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 199,440评论 5 467
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 83,814评论 2 376
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 146,427评论 0 330
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 53,710评论 1 270
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 62,625评论 5 359
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 48,014评论 1 275
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 37,511评论 3 390
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 36,162评论 0 254
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 40,311评论 1 294
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 35,262评论 2 317
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 37,278评论 1 328
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 32,989评论 3 316
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 38,583评论 3 303
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 29,664评论 0 19
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 30,904评论 1 255
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 42,274评论 2 345
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 41,856评论 2 339

推荐阅读更多精彩内容