首页 > 其他分享 >sudo深入解析(免密+权限精细分配的几种方案)

sudo深入解析(免密+权限精细分配的几种方案)

时间:2023-02-24 10:03:49浏览次数:42  
标签:bin 免密 passwd sudo centos7 usr 权限 root


                               sudo深入解析(免密+权限精细分配的几种方案)

在系统运维时,免不了需要配置sudo以提高系统的安全性,那么,具体的做法应该如何实现呢?请看如下场景:

场景一:

系统账号管理员需要使用普通账号zsk1来管理系统内的所有账号,包括,账号的增删,密码的设置,但是这个普通账号不能修改root密码,其余的权限都没有,这个如何实现?

场景二:

希望某一个普通用户zsk2,仅仅能够做系统的服务管理,比如使用systemctl 命令启停某个指定的服务或者所有服务,其余的高权限操作全部禁止,比如增加用户,rpm安装各类软件,这个如何实现?

场景三:

希望某一个普通用户zsk3,仅仅能够使用iptables 等防火墙配置相关的基础命令,并能够离线安装一部分rpm 包以完成网络配置工作,zsk3 这个用户可以关机,其余的操作全部禁止,包括yum安装,这个如何实现?

场景四:

希望普通用户zsk4具有所有权限,但不能更改任何用户的密码,包括自身的密码,如何实现?



sudo权限配置类似系统内的防火墙配置,第一个思路是,禁止所有权限,放行部分权限,第二个思路是放行全部权限,禁止部分权限,通常的做法是第一个思路:禁止所有权限,放行所需权限。

首先,sudo配置需要root账号运行visudo命令, 在root用户下执行visudo命令:

场景一的配置:visudo

98 ## Allow root to run any commands anywhere
99 root ALL=(ALL) ALL
100 zsk1 ALL=(ALL) NOPASSWD: USERMANAGE
101 Cmnd_Alias USERMANAGE = /usr/bin/passwd ,!/usr/bin/passwd root ,/usr/sbin/useradd ,/usr/sbin/userdel

验证:

[root@centos7 ~]# su - zsk1
Last login: Mon Dec 21 14:50:42 CST 2020 on pts/0
[zsk1@centos7 ~]$ sudo passwd zsk2
Changing password for user zsk2.
New password:
BAD PASSWORD: The password is shorter than 8 characters
Retype new password:
passwd: all authentication tokens updated successfully.
[zsk1@centos7 ~]$ sudo passwd root
Sorry, user zsk1 is not allowed to execute '/bin/passwd root' as root on centos7.
[zsk1@centos7 ~]$ sudo passwd
Changing password for user root.

可以看到,不能修改root密码,可以修改其余用户密码,可以默认形式修改root密码(防君子不防小人)。当然,添加删除用户是没有任何问题的,没有演示,可自行实验。因此,为了彻底隔绝隐患,编写如下内容:

root    ALL=(ALL)       ALL
zsk1 ALL=(ALL) NOPASSWD: USERMANAGE
Cmnd_Alias USERMANAGE = !/usr/bin/passwd ,!/usr/bin/passwd root ,/usr/sbin/useradd ,/usr/sbin/userdel ,/usr/bin/passwd zsk1 ,/usr/bin/passwd zsk2 ,/usr/bin/passwd zsk3

把需要管理密码的用户追加在 Cmnd_Alias  后面,现在用户zsk1用户可以sudo修改zsk1,zsk2,zsk3的密码,可以添加任意用户和删除任意用户,但root用户密码不可更改。(没办法的办法了)


场景二的实现:

执行visudo命令,编辑内容如下,在zsk1 下面添加一行,切换到zsk2用户后,可以启停所有服务,使得普通用户zsk2可以完成服务管理工作。:

root    ALL=(ALL)       ALL
zsk1 ALL=(ALL) NOPASSWD: USERMANAGE
zsk2 ALL=(ALL) NOPASSWD: /usr/bin/systemctl

验证:

[root@centos7 ~]# su - zsk2
Last login: 21 11:28:50 CST 2020 on pts/0
[zsk2@centos7 ~]$ systemctl restart docker
==== AUTHENTICATING FOR org.freedesktop.systemd1.manage-units ===
Authentication is required to manage system services or units.
Authenticating as: root
Password:
[zsk2@centos7 ~]$ sudo systemctl restart docker

 可以看到,sudo服务可以正常启停。其余的需要root权限的命令不能执行。

场景三的实现:

执行visudo命令,编辑内容如下,在zsk2下面添加一行 NETMANAGE,

root    ALL=(ALL)       ALL
zsk1 ALL=(ALL) NOPASSWD: USERMANAGE
zsk2 ALL=(ALL) NOPASSWD: /usr/bin/systemctl
zsk3 ALL=(ALL) NOPASSWD: NETMANAGE
Cmnd_Alias USERMANAGE = !/usr/bin/passwd ,!/usr/bin/passwd root ,/usr/sbin/useradd ,/usr/sbin/userdel ,/usr/bin/passwd zsk1 ,/usr/bin/passwd zsk2 ,/usr/bin/passwd zsk3
Cmnd_Alias NETMANAGE = /sbin/route, /sbin/ifconfig, /bin/ping, /sbin/dhclient, /usr/bin/net, /sbin/iptables, /usr/bin/rfcomm, /usr/bin/wvdial, /sbin/iwconfig, /sbin/mii-tool ,/bin/rpm

场景四的实现:

root执行命令 visudo ,在zsk3这一行下面添加一行内容

zsk4    ALL=(ALL)       NOPASSWD: ALL,!/usr/bin/passwd

 验证:

[zsk4@centos7 ~]$ sudo passwd root
Sorry, user zsk4 is not allowed to execute '/bin/passwd root' as root on centos7.
[zsk4@centos7 ~]$ sudo passwd zsk4
Sorry, user zsk4 is not allowed to execute '/bin/passwd zsk4' as root on centos7.
[zsk4@centos7 ~]$ sudo cat /etc/shadow
root:$6$qd.f6L1o$l6K7gxiGMUBqpksi29WSOVRrF5WO1pwS2jPr/M..RuAWtCHMEMoMeMJlJbCUr/exp38Qx4b6yHoMgHkgilA2J1:18617:0:99999:7::

除了更改用户密码(所有的用户,包括root),其余的需要root权限的操作zsk4都可以实现。 

总结:

Cmnd_Alias 名称,然后在  用户名  hostname  命令  也就是第三列调用即可。默认是全部禁止,然后需要放行的权限写在分号后或者引用alias。!后的命令禁止, 命令1 空格,命令2 空格,的形式书写。

通过这些实现精细化的权限分配。

所有命令都需要绝对路径的形式书写。

 

 

标签:bin,免密,passwd,sudo,centos7,usr,权限,root
From: https://blog.51cto.com/u_15966109/6082655

相关文章

  • Linux用户权限管理之 su和sudo
                      Linux用户权限管理之su和sudo首先需要说明,su和sudo这两个命令产生的原因。根本原因在于Linux系统是一个多角色的......
  • Linux文件权限和目录配置
    Linux最大特点与windows不同windows是单用户多任务,而linux使用多用户多任务,所以在使用过程中也严格划分每一个用户,以便于进行更好的管理,同时他也是一个安全防护机制文件拥有......
  • mysql按月自动建库并添加权限
    开发有个按月自动建库并添加权限的需求。CREATEPROCEDURE`create_database`()BEGINdeclarecur_date,las_dateBIGINT;declarecreatedb,grantdbvarchar(4000);......
  • mysql的多表查询以及用户权限管理
    今天分享的是mysql多表查询中相关连接的分享,其中包括左外连接、右外连接、完全外连接等。并且分享用户权限的管理和一些函数的应用,以及用mysql搭建相关网站多表查询自然连接......
  • mysql允许root用户在任何地方进行远程登录,并具有所有库任何操作权限
    在本机先使用root用户登录mysql:mysql-uroot-p"youpass"进行授权操作:mysql>GRANTALLPRIVILEGESON*.*TO'root'@'%'IDENTIFIEDBY'youpassword'WITHGRANTOPT......
  • 一般用户无法使用sudo命令
    文章目录前言一、为什么我用不了sudo命令1.原因二、如何将普通用户添加到信任列表里面1.前提2.详细过程2.1用root用户修改/etc/sudoers文件 2.2找到对应位置......
  • Android Dangerous权限的处理【设为默认】
    AndroidDangerous权限的处理【设为默认】在日常的使用中,如果我们调用到某一个接口,该接口依赖于危险权限的声明,平时我们会去对权限进行检查,检查这个权限是否被赋予,如果没......
  • 关于亚马逊SP-API申请PII权限和亚马逊SP-API注册公共开发者的PII权限一些建议
     首先可以给大家肯定的说,亚马逊SP-API公共开发者的PII权限目前还可以申请,就是亚马逊审核及其严格,通过率不高。在这里主要给大家在申请的过程中的几个建议:1.公共的亚马......
  • 【MySQL】013-用户管理和权限管理(了解)
    一、用户管理1、添加用户CREATEUSER'用户名'@'主机名'IDENTIFIEDBY'密码'; 2、删除用户DROPUSER'用户名'@'主机名'; 3、修改用户......
  • ubuntu16 解决无sudo 权限
    在使用ubuntu的过程中修改了/etc/sudoers文件导致出现如下错误: sudo:parseerror in /etc/sudoers nearline32sudo:novalidsudoerssourcesfound,......