案例-配置sudo用户免密功能(工作实战-亲测成功-20210410)

案例-配置sudo用户免密功能(工作实战-亲测成功-20210410)

​ 在有些场景下,比如在脚本中,不希望每次执行sudo命令时都输入自己的密码,可以通过NOPASSWD实现此功能。
​ 另,关于自己工作中配置sudo用户免密功能,遇到了很多坑,这里记录下,方便大家look。

1、自己遇到的坑

​ 关于如何配置sudo用户免密功能,百度搜了下,无非就是配置参数NOPASSWD。但配置在哪里,就很关键了。这里也是很多小伙伴踩坑的地方。

​ 如果配置在root行下面,经实际测试是不能实现sudo免密功能的,需要再配置下%wheel组,这样才会实现免密功能,很无语。看网上给出的原因,是单单配置了用户时不生效的,还需要再配置下wheel组才行。但如果配置了组wheel的话,那么该组下的任何sudo成员都会具有sudo免密功能的。这里总感觉权限被过于被放大。

下面是实际的测试过程:

(1)只在root行下面配置某用户的sudo免密 => 经实际测试,用户sudo免密功能是不会生效的

vim /etc/sudoers #root用户进行配置sudoers内容

image-20210318141644242

image-20210318141838229

注意:在shell终端不断连情况,等待5min后:再次进行登录icnoc用户,测试第一次登录是否需要密码?–>需要密码
注意:每打开一次shell第一次都需要输入密码;

image-20210318142718026

由以上现象可知=> 这种方法并不能实现sudo免密功能!!!

但是

(2)如果仅仅直接把NOPASSWD参数配置在%wheel层面(这里就不用再单独针对用户配置NOPASSWD参数) => (所有sudo用户都是免密的,这个是一劳永逸的!

测试过程如下:
vim /etc/sudoers #root用户进行配置sudoers内容

image-20210318143657819

重新用icnoc用户登录机器,查看现象:
image-20210318143849474

由以上现象可知=> 这种可以实现sudo免密功能。

​ 虽然,直接在wheel组层配置NOPASSWD参数可以实现sudo用户免密功能,但是这里总感觉权限过于被放大,因此自己工作中建议选择如下配置方法(即简单又安全)。

2、推荐配置方法(重要)

​ 注意,这种方法也是配置在用户层面,但是是直接追加在/etc/sudoers文件末尾的,经测试,也是可以实现sudo用户免密功能的。

实际过程如下:

image-20210409144729335

image-20210409144744287

经测试:这种直接追加配置到末尾的方法很实用,可以实现sudo免密功能,也方便脚本编写。

image-20210409144826080

  • 另:自己工作中实现写的sudoers文件内容如下,大家可以参考下:
[icnoc@test-centos78-template ~]$ sudo grep ^[^#] /etc/sudoers
Defaults   !visiblepw
Defaults    always_set_home
Defaults    match_group_by_gid
Defaults    always_query_group_plugin
Defaults    env_reset
Defaults    env_keep =  "COLORS DISPLAY HOSTNAME HISTSIZE KDEDIR LS_COLORS"
Defaults    env_keep += "MAIL PS1 PS2 QTDIR USERNAME LANG LC_ADDRESS LC_CTYPE"
Defaults    env_keep += "LC_COLLATE LC_IDENTIFICATION LC_MEASUREMENT LC_MESSAGES"
Defaults    env_keep += "LC_MONETARY LC_NAME LC_NUMERIC LC_PAPER LC_TELEPHONE"
Defaults    env_keep += "LC_TIME LC_ALL LANGUAGE LINGUAS _XKB_CHARSET XAUTHORITY"
Defaults    secure_path = /sbin:/bin:/usr/sbin:/usr/bin
root	ALL=(ALL) 	ALL
%wheel	ALL=(ALL)	ALL
Defaults log_host,log_year,logfile=/var/log/sudo.log
Defaults: jt_DCMonitor !requiretty
jt_DCMonitor ALL=(root) NOPASSWD:/usr/sbin/lvdisplay
jt_DCMonitor ALL=(root) NOPASSWD:/usr/sbin/vgdisplay
jt_DCMonitor ALL=(root) NOPASSWD:/usr/sbin/pvdisplay
jt_DCMonitor ALL=(root) NOPASSWD:/usr/sbin/lvscan
jt_DCMonitor ALL=(root) NOPASSWD:/usr/sbin/vgscan
jt_DCMonitor ALL=(root) NOPASSWD:/usr/sbin/pvscan
jt_DCMonitor ALL=(root) NOPASSWD:/usr/sbin/lvs
jt_DCMonitor ALL=(root) NOPASSWD:/usr/sbin/vgs
jt_DCMonitor ALL=(root) NOPASSWD:/usr/sbin/pvs
jt_DCMonitor ALL=(root) NOPASSWD:/usr/sbin/dmidecode
jt_DCMonitor ALL=(root) NOPASSWD:/usr/sbin/fdisk -l
jt_DCMonitor ALL=(root) NOPASSWD:/usr/sbin/smartctl
jt_DCMonitor ALL=(root) NOPASSWD:/sbin/lvdisplay
jt_DCMonitor ALL=(root) NOPASSWD:/sbin/vgdisplay
jt_DCMonitor ALL=(root) NOPASSWD:/sbin/pvdisplay
jt_DCMonitor ALL=(root) NOPASSWD:/sbin/lvscan
jt_DCMonitor ALL=(root) NOPASSWD:/sbin/vgscan
jt_DCMonitor ALL=(root) NOPASSWD:/sbin/pvscan
jt_DCMonitor ALL=(root) NOPASSWD:/sbin/dmidecode
jt_DCMonitor ALL=(root) NOPASSWD:/sbin/fdisk -l
jt_DCMonitor ALL=(root) NOPASSWD:/sbin/smartctl
jt_DCMonitor ALL=(root) NOPASSWD:/bin/cat
jt_DCMonitor ALL=(root) NOPASSWD:/bin/rm -f ./jtdc_rw_tmp_file
jt_DCMonitor ALL=(root) NOPASSWD:/usr/bin/tee ./jtdc_rw_tmp_file
jt_DCMonitor ALL=(root) NOPASSWD:/usr/bin/tail
icnoc	ALL=(ALL) 	NOPASSWD:ALL
[icnoc@test-centos78-template ~]$ 

3、其它(扩展部分)

注意:也可以对单个命令进行配置sudo免密功能(比较少用)

  • 使用方法:
[root@test ~]# visudo
HG      ALL=    /bin/mount,/bin/umount,sudoedit,NOPASSWD:/bin/cat /var/log/messages #注意,哪个命令需要免密就在前面加上NOPASSWD:即可,其他没加这个参数的命令再次使用依然需要输入自己的密码的
  • 测试过程:
测试过程:
[wang@test ~]$ ll  /var/log/messages
-rw------- 1 root root 90047 Feb 13 17:57 /var/log/messages
[wang@test ~]$ cat !$
cat /var/log/messages
cat: /var/log/messages: Permission denied
[wang@test ~]$ sudo cat  /var/log/messages
Sorry, user wang is not allowed to execute '/bin/cat /var/log/messages' as root on test.
[wang@test ~]$ sudoedit /etc/sudoers
## Allow root to run any commands anywhere
root    ALL=(ALL)       ALL
wang    ALL=    /bin/mount,/bin/umount,sudoedit,NOPASSWD:/bin/cat /var/log/messages #添加NOPASSWD参数

[wang@test ~]$ sudo cat /var/log/messages
[wang@test ~]$ 
Feb 13 17:59:56 test prometheus: level=warn ts=2021-02-13T09:59:56.561Z caller=scrape.go:1094 component="scrape manager" scrape_pool=prometheus target=http://localhost:9090/metrics msg="Appending scrape report failed" err="out of bounds"
Feb 13 17:59:58 test prometheus: level=warn ts=2021-02-13T09:59:58.995Z caller=scrape.go:1094 component="scrape manager" scrape_pool=node2 target=http://192.168.10.12:9100/metrics msg="Appending scrape report failed" err="out of bounds"

4、总结

​ 一般工作中,机器需要被基线加固,sudo功能还是比较常用的,其中sudo免密功能也是非常实用的,关于sudo用法,我将会在后续文章中输出到博客上。
​ 好了,今天的简单分享就到这里了,good night!

image-20210410225215968

  • 2
    点赞
  • 5
    收藏
    觉得还不错? 一键收藏
  • 4
    评论
评论 4
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值