- 我们在使用jumpserver的过程中,会向主机推送普通用户,但普通用户有上传下载文件的权限,要想对这些权限进行管控就比较困难,之前考虑通过将$PATH变量下的命令的权限设置为750,设置完发现用户无法正常登陆,并且可能会影响某些需要普通用户权限运行的程序,后发现通过setfacl可准确无误的实现该需求,安全可靠;另外,如果想保留普通用户下载文件的权限,可以在如下脚本中去除sz命令的控制,尽让普通用户使用sz下载相关文件,从而实现更严格的控制;现在将实现脚本分享给大家,希望对小伙伴们有所帮助。
-
效果展示
- 修改权限后的sftp-server服务的acl权限查看

- xftp已经无法打开相关文件夹

-
脚本setCommonSetFacl-comm.sh
cat > setCommSetFacl-comm.sh <<"EOF"
#!/bin/bash
#
# 用法:将需要去除普通用户权限的命令写到comgroup,以:分割,comgroup,sergroup同样
# 使用ansible批量修改,例如: ansible all -m script -a "setCommSetFacl-comm.sh"
#
#用户列表
usergroup=dev:dba:test
#命令列表
comgroup=wget:scp:ftp:sftp:sfdp:rz:sz:curl:rcp:rsync
#服务列表
sergroup=sftp-server
#用户个数
declare -i numOfUser=`echo $usergroup | awk -F: '{ print NF }'`
#命令个数
declare -i numOfCom=`echo $comgroup | awk -F: '{ print NF }'`
#服务个数
declare -i numOfSer=`echo $sergroup | awk -F: '{ print NF }'`
#遍历每一个用户
for J in `seq 1 $numOfUser`; do
user=`echo $usergroup | cut -d: -f$J`
#遍历每一个命名
for I in `seq 1 $numOfCom`; do
comm=`echo $comgroup | cut -d: -f$I`
Dir=`which $comm`
#使用setfacl,限制该用户的访问权限
setfacl -m u:$user:r $Dir
done
#遍历每一服务
for I in `seq 1 $numOfSer`; do
ser=`echo $sergroup | cut -d: -f$I`
#关闭服务
pkill $ser
Dir=`find / -name $ser`
#使用setfacl,限制该服务访问权限
setfacl -m u:$user:r $Dir
done
done
EOF
-
调用方法,这里使用ansible
ansible all -m script -a "setCommSetFacl-comm.sh"
转载于:https://www.cnblogs.com/William-Guozi/p/Shell_setfacl.html