关于用户管理的命令回顾:visudo
1. 关于用户管理命令的回顾
<1> useradd命令
useradd
-g:指定组
-u:指定uid
-c:注释
-s: 指定用户登入后所使用的shell。
-d: 指定用户登入时的起始目录
-G: 指定用户所属的附加群组(也就是多群组)
-M: 不要自动建立用户的登入目录
-D: 变更预设值(不太理解)
-e:指定账户的有效期限
<2> 其他命令
userdel
usermod
groupadd
groupdel
passwd
chage
su
sudo
visudo
groups
id
w,whoami,last
2. 正文
<1> 问题现状
当公司里的服务器有几十甚至超过上百台,并且能操作服务器的人员很多(开发+运维+架构+DBA),当大家登陆使用Linux服务器时,不同职位的员工水平不同,导致操作不符合规范,不同部门的人员的服务器权限没有明确的规范,经常导致文件丢失,这样导致服务器的安全存在很大问题。为了解决以上问题,单个用户管理权限过大现状,现提出针对Linux服务器用户权限集中管理的解决方案。
<2> 需求分析
生产环境中,我们既希望root密码掌握在少数人手中,又希望多个服务器系统管理员或者相关职能的人,能够完成更多与自身职能相关的服务器工作,又不导致越权操作导致服务器安全隐患。
在此就需要sudo
管理来和su
来一起完成生产环境服务器对用户的管理需求。
<3> 实现方针
生产环境中,应该针对不同部门(开发部门,运维部门,DBA,网络部门等)的不同职能的工作人员(项目经理,开发主管,运维主管,架构师,DBA,网络工程师,开发工程师,运维工程师等),分等级的分配服务器的权限,尽量使对应人员的服务器权限最小化。
这样即减少了服务器安全隐患,又让不同部门不同职能的工作人员提升工作效率,提升项目进度。
<4>. 实施过程
(1)信息收集
1.1 各部门收集汇总不同职能的工作人员所需要的服务器权限,并有各部门负责人审核对应员工的服务器权限需求。并且整理成表格如下,之后针对此表格举行会议进行终审。
举例的表格如下:
姓名 | 价格 | jiage | shuliang |
---|---|---|---|
张三 | php中级开发 | 旅游业务开发 | 上传文件到Nginx |
王五 | 开发经理 | **项目负责 | ALL,但不能修改密码 |
… |
1.2审核通过后,运维部门根据表格进行相关人员的测试
服务器权限配置,也就visudo
来进行配置。配置完成后运维部门负责人进行审核并交由测试部门测试,汇报相关结果。测试环境没有出现问题后,配置正式服务器环境,并进一步交由测试部门测试并给出结果。相关人员服务器权限存入数据库并备份。
1.3方案实施后,新入员工须通过《员工服务器管理权限申请表》来申请对应的权限,并将结果记录进数据库。相关人员的服务器权限变动须提交部门负责人审批,并将结果实时记录进入数据库。
1.4运维部门针对服务器权限写出文档,并对相关人员进行培训。
权限分配审核结果的权限分配举例(不同公司根据不同业务讨论给出,这里不罗列给出):
zhineng | master |
---|---|
初级运维 | /usr/bin/free,/usr/bin/iostat,/usr/bin/top,/bin/hostname,/sbin/ifconfig… |
高级运维 | /usr/bin/free,/usr/bin/iostat,/usr/bin/top,/bin/hostname,/sbin/ifconfig,/bin/mount,/usr/bin/yum,/bin/umount |
运维经理 | ALL |
开发 | /sbin/service,/sbin/chkconfig,tail /app/log*,grep /app/log*,/bin/cat,/bin/ls |
… |
(2)模拟用户测试
测试建立3个初级运维,1个高级运维,1个网络工程师,1个运维经理,方便起见,密码统一设置为111111
for user in junSa001 junSa002 junSa003 senSa001 net001 saManager001do useradd $user echo "111111"|passwd --stdin $userdone
之后建立5个开发人员,属于phpers组
groupadd -g 666 phpersfor n in `seq 5`do useradd -g phpers php00$n echo "111111"|passwd --stdin php00$ndone
(以下所有配置写入visudo)定义各个部门各个职能可执行的命令组:
##Cmnd_Alias 初级运维命令组 Cmnd_Alias JY_CMD_1 = /usr/bin/free,/usr/bin/iostat,/usr/bin/top,/bin/hostname,/sbin/ifconfig ##Cmnd_Alias 高级运维命令组 Cmnd_Alias SY_CMD_1 = /usr/bin/free,/usr/bin/iostat,/usr/bin/top,/bin/hostname,/sbin/ifconfig,/bin/mount,/usr/bin/yum,/bin/umount ##Cmnd_Alias 开发命令组 Cmnd_Alias KF_CMD_1 = /sbin/service,/sbin/chkconfig,tail /app/log*,grep /app/log*,/bin/cat,/bin/ls
之后给用户组定义别名:
##User_Alias User_Alias CHUJIADMINS = junSa001 junSa002 junSa003 User_Alias GWNETADMINS = net001 ##phpers组 User_Alias CHUJI_KAIFA = %phpers
定义OPERATOR,执行root的权限命令
##Runas_AliasRunas_Alias OP = root
接下来就是主配置了:
CHUJIADMIS ALL=(OP) JY_CMD_1 GWNETADMINS ALL=(OP) SY_CMD_1 CHUJI_KAIFA ALL=(OP) KF_CMD_1 kaifaManager ALL=(ALL) ALL,!/usr/bin/passwd,!/usr/sbin/visudo,!/usr/bin/vi *sudoer*##....
切换到junSa001用户,执行sudo -l命令,可以看到junSa001用户可以执行的命令:
User chuji001 may run the following commands on this host:(root) /usr/bin/free, /usr/bin/iostat, /usr/bin/top, /bin/hostname, /sbin/ifconfig,/bin/netstat, /sbin/route
测试发现,执行sudo useradd,则没有权限执行命令:
[chuji001@localhost ~]$ sudo useradd kkkk Sorry, user chuji001 is not allowed to execute '/usr/sbin/useradd kkkk' as root on localhost.localdomain.
原创文章,作者:21期王逸凡,如若转载,请注明出处:http://www.178linux.com/52798