权限安全:sudo

sudo的应用场景

有100台主机,自己管理不过来,其中一个运维做用户管理,另一个运维做网络管理,如果谁出了错误我们都可以定位到是谁做了,这样可以追究责任。我们不可能把root账户给这两个人,那么我们就需要一种机制,让两个用户在发挥其特定的职能的时候暂时变身为root,拥有root的权限,但是处理完事情之后就打回原型,这有点像suid的感觉。

也就是说不需要正式切换到root的身份,在执行特定的命令的时候,只需要暂时用root权限去执行某个程序。这样也是有漏洞的,但也有人可以冒充tom用户,比如说当tom去厕所了,他邻桌的同学不怀好心,用tom的电脑在服务器上创了一个用户,所以sudo还有这样一种机制就是,当你执行root给你规定的命令的时候还要再次提交一次密码,确定tom是tom本人不是别人冒充的,密码会缓存5分钟,也就是说当你使用sudo使用命令时要输入密码,这 个密码在五分钟之内不用重复输入,使用sudo –k可以清除这个缓存,清除缓存之后再使用sudo时不管有没有到5分钟都要重新输入密码。

如果让三个用户都能使用useradd命令,一个个的设置不方便,sudo配置文件还支持别名。所谓的别名就是比如我们把用户管理的命令定义到一个组里面,等到引用这些命令的时候,我们可以直接写上别名,不用那么麻烦的把管理类的命令都写上。

sudo基础

sudo的正确定义是:某一个用户能够以另外一个用户的身份通过哪些主机执行什么命令、

sudo的配置文件是/etc/sudoers 

专用的配置文件的 命令:visudo(可检查语法错误)

语法:谁,在哪些主机上,以什么人的身份,运行什么命令

语法

语法:who which_hosts=(runas) command
who:谁
which_hosts:在哪些主机上
runas:以谁的身份
command执行什么命令

用户别名:User_Alias USERDOMIN = 用户名|%组名|主机名:

主机别名:Host_Alias HOSTS = 主机名|IP|目标用户别名:

目标用户别名:Runas_Alias USER=用户名|%组名|

命令别名:Cmnd_Alias COMD = 命令绝对路径|其它别名

练习

举个例子,让hadoop用户能够使用root才能使用的useradd和usermod这两个命令.

[root@zhanghe ~]$ visudo
hadoop ALL=(root) /usr/sbin/useradd,/usr/sbin/usermod   #在最后一行添加

[root@zhanghe ~]useradd hadoop;echo "cba-123" | passwd --stdin hadoop

[root@zhanghe ~]# su - hadoop

[hadoop@zhanghe ~]$ sudo useradd user1   #执行成功,第一次使用会让你输入密码

[hadoop@zhanghe ~]$sudo  –k

[hadoop@ zhanghe ~]$ sudo  –l   #列出自己可以通过sudo执行哪些命令。

让用户不用输入密码在配置文件命令的前面加上NOPASSWD:即可,如下:

hadoop ALL=(root) NOPASSWD: /usr/sbin/useradd,/usr/sbin/usermod

再举个例子,让zhanghe用户拥有root的全部权限

zhanghe     ALL=(ALL)       ALL  

权限规划示例

运维部门

级别权限
初级运维: 查看系统信息,查看网络状态: /usr/bin/free,/usr/bin/iostat,/usr/bin/top,/bin/hostname,/sbin/ifconfig,/bin/netstat,/sbin/route
高级运维 查看系统信息,查看和修改网格配置,进程管理,软件包管理,存储管理 /usr/bin/free,/usr/bin/iostat,/usr/bin/top,/bin/hostname,/sbin/ifconfig, /bin/netstat,/sbin/route,/sbin/iptables,/etc/init.d/network,/bin/nice,/bin/kill, /usr/bin/kill,/usr/bin/killall,/bin/rpm,/usr/bin/up2date,/usr/bin/yum, /sbin/fdisk,/sbin/sfdisk,/sbin/parted,/sbin/partprobe,/bin/mount,/bin/umount
运维经理 超级用户所有权限 ALL

 

开发部门:

级别权限
初级开发 root的查看权限,对应服务查看日志的权限 /usr/bin/tail/app/log,/bin/grep/app/log,/bin/cat,/bin/ls
高级开发 root的查看权限,对应服务查看日志的权限,重启对应服务的权限 /sbin/service,/sbin/chkconfig,tail /app/log,grep /app/log,/bin/cat,/bin/ls, /bin/sh ~/scripts/deploy.sh
开发经理 项目所在服务器的ALL权限,不能修改root密码 ALL,!/usr/bin/passwd root,/usr/bin/passwd [A-Za-z]*,!/usr/bin/passwd root

架构组:

级别权限
架构工程师 普通用户的权限 不加入sudo列表

 

DBA组:

级别权限
初级DBA 普通用户的权限 不加入sudo列
高级DBA 项目所在数据库服务器的ALL权限 ALL, /usr/bin/passwd [A-Za-z]* !/usr/bin/passwd root, !/usr/sbin/visudo,

 

网络组:

级别权限
初级网络 普通用户权限 不加入sudo
高级网络 项目所在数据库服务器的ALL权限 /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/cat,/var/log/*
原文地址:https://www.cnblogs.com/yizhangheka/p/11869150.html