背景:linux的安全很大程度上依赖于权限的分配,而目前线上机器sudo权限的分配统一以ALL的形式分配,很容易因为误操作而造成一些不可恢复的错误,因此现在需要重新细化sudo权限,以保障linux环境的安全。
原理:linux /etc/sudoers中已为我们提供了权限细化的example,我们通过定义主机群,定义用户组,定义指令组的方式来统一细化分配。sudo权限还牵扯到用户组,可以采用用户组统一权限,简化/etc/sudoers。
实现步骤
(1)为指定用户或批量用户添加用户组。若该用户不存在则新增,若存在则直接分配用户组,如wusheng分配到ops组。
(2)进入/etc/sudoers,指定User_Alias。如User_Alias ADMINS = wusheng,admin,若许多用户权限上一致,可以采取该种方式进行权限定义。
(3)指定Cmnd_Alias。如
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, /usr/bin/netstat
Cmnd_Alias SOFTWARE = /bin/rpm, /usr/bin/up2date, /usr/bin/yum, /usr/bin/pip3
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
Cmnd_Alias LOCATE = /usr/bin/updatedb
Cmnd_Alias STORAGE = /sbin/fdisk, /sbin/sfdisk, /sbin/parted, /sbin/partprobe, /bin/mount, /bin/umount
Cmnd_Alias DELEGATING = /usr/sbin/visudo, /bin/chown, /bin/chmod, /bin/chgrp
Cmnd_Alias PROCESSES = /bin/nice, /bin/kill, /usr/bin/kill, /usr/bin/killall
#system services
Cmnd_Alias SYSTEM = !/usr/sbin/reboot, !/usr/sbin/shutdown, !/usr/sbin/halt
若权限较多,可使用反选方式。如以上Cmnd_Alias SYSTEM,除reboot,shutdown,halt以外的指令都可以执行。以上指令必须都为绝对路径。
(4)结合以上User_Alias,Cmnd_Alias指定用户或用户组权限。
(5)若同组用户大多权限保持一致,少数权限不一样,可通过设定用户组公共权限,再通过个人用户指定不一样的权限。
如上图,表示ops组中所有用户都有NETWORKING指令集的权限,但其中zhiyun和xujiguang分别在此基础上拥有如图显示的权限。
问题总结
(1)对于/etc/sudoers文件操作要及其小心,一单其中发现语法等错误退出了会导致用户无法进入修改,只可以通过root进行修改。
解决方法:对于/etc/sudoers文件的编辑,linux有专门的指令visudo,在修改文件后退出该指令会自动判断/etc/sudoers是否存在语法错误,若存在可以重新进行编辑,保障安全性和不必要的麻烦。
(2)linux /etc/sudoers文件已经为我们准备一些优化方式,认真查看该文件就会发现许多奥秘。