批量创建用户并使用sudo和ACL来控制用户权限

版权声明:本文为耕耘实录原创文章,各大自媒体平台同步更新。欢迎转载,转载请注明出处,谢谢。

最近公司应相关部门的监管要求加强了对用户权限的控制,为了积极响应国家的号召,公司账号权限设计管理的重任就落到我的肩上。花了两三个小时,对批量创建用户,普通用户对除了用户目录之外的权限管理、root权限控制进行了设计,目前脚本已经完全通过测试,在此和大家分享一下。现分别对每一部分代码进行一下备注、解析。

批量创建用户。

HostName=$(hostname)
Account=`whoami`
PASSWORD='TTkx1324'
USER1='payer'
APP='/app'
TEMP='/temp'
UserName=('tangchanggen' 'wuyaxiong' 'lihui' 'wangyifeng' 'yanglongjun' 'liyunfeng' 'xiaoyongan' 'ivandu') #需要添加的用户
#以下内容,批量创建用户。
adduser $USER1 -g root  #将用户添加到root组里
echo $PASSWD | passwd payer --stdin   #从标准输入流读取密码TTkx1324
passwd $USER1 -x 90 -w 7 #密码的生命周期为90天,到期前7天提示用户修改密码
passwd -e $USER1      #chage -d0 payer  #用户首次登陆强制修改密码
echo -e "\033[47;31m The account $USER1 has been created!  \033[0m"
for U in ${UserName[@]};
do
adduser $U
echo $PASSWORD | passwd $U --stdin
passwd $U -x 90 -w 7
passwd -e $U
echo -e "\033[47;31m The account $U has been created!  \033[0m"
sleep 2
done

在sudoer文件内追加以下内容,看起来是不很凌乱?

echo -e  "Runas_Alias OP = root\nCmnd_Alias DELEGATING = /usr/sbin/visudo, /bin/chown, /bin/chmod, /bin/chgrp\nCmnd_Alias STORAGE = /sbin/fdisk, /sbin/sfdisk, /sbin/parted, /sbin/partprobe, /bin/mount, /bin/umount\nCmnd_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\nCmnd_Alias NETWORKING = /sbin/route, /sbin/ifconfig, /bin/ping, /sbin/dhclient, /usr/bin/net, /sbin/iptables, /usr/bin/rfcomm, /usr/bin/wvdial, /sbin/ifconfig, /sbin/mii-tool\nCmnd_Alias PROCESSES = /bin/nice, /bin/kill, /usr/bin/kill, /usr/bin/killall\nCmnd_Alias SOFTWARE = /bin/rpm, /usr/bin/up2date, /usr/bin/yum\nCmnd_Alias LOCATE = /usr/bin/updatedb\nUser_Alias ORDINARY_DEVELOP = ${UserName[0]},${UserName[1]},${UserName[2]},${UserName[3]},${UserName[4]}\nUser_Alias SUDO_DEVELOP = ${UserName[1]}\nUser_Alias NETWORKMANAGER = ${UserName[5]}\nUser_Alias DEVOPS = ${UserName[6]},${UserName[7]}\nORDINARY_DEVELOP       $HostName=(OP)    NOPASSWD:/sbin/service\nSUDO_DEVELOP           $HostName=(OP)    NOPASSWD:SERVICES\nNETWORKMANAGER         $HostName=(OP)    NOPASSWD:NETWORKING\nDEVOPS                 $HostName=(OP)    NOPASSWD:SERVICES,SOFTWARE,STORAGE,DELEGATING,PROCESSES,NETWORKING,LOCATE">>/etc/sudoers

其实打印出来是这样的(这里面的内容一般人仔细一看都能懂的,不解释):

Runas_Alias OP = root
Cmnd_Alias DELEGATING = /usr/sbin/visudo, /bin/chown, /bin/chmod, /bin/chgrp
Cmnd_Alias STORAGE = /sbin/fdisk, /sbin/sfdisk, /sbin/parted, /sbin/partprobe, /bin/mount, /bin/umount
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 NETWORKING = /sbin/route, /sbin/ifconfig, /bin/ping, /sbin/dhclient, /usr/bin/net, /sbin/iptables, /usr/bin/rfcomm, /usr/bin/wvdial, /sbin/ifconfig, /sbin/mii-tool
Cmnd_Alias PROCESSES = /bin/nice, /bin/kill, /usr/bin/kill, /usr/bin/killall
Cmnd_Alias SOFTWARE = /bin/rpm, /usr/bin/up2date, /usr/bin/yum
Cmnd_Alias LOCATE = /usr/bin/updatedb
User_Alias ORDINARY_DEVELOP = tangchanggen,wuyaxiong,lihui,wangyifeng,yanglongjun
User_Alias SUDO_DEVELOP = wuyaxiong
User_Alias NETWORKMANAGER = liyunfeng
User_Alias DEVOPS = xiaoyongan,ivandu
ORDINARY_DEVELOP       UserManager=(OP)    NOPASSWD:/sbin/service
SUDO_DEVELOP           UserManager=(OP)    NOPASSWD:SERVICES
NETWORKMANAGER         UserManager=(OP)    NOPASSWD:NETWORKING
DEVOPS                 UserManager=(OP)    NOPASSWD:SERVICES,SOFTWARE,STORAGE,DELEGATING,PROCESSES,NETWORKING,LOCATE

以下这一段代码主要用于ACL权限设置。

if [ -d $APP ] ; then
setfacl -m u:${UserName[1]}:rwx -R $APP #递归设置$APP的ACL权限
elif [ ! -d $APP ] ; 
then
mkdir $APP
setfacl -m u:${UserName[1]}:rwx -R $APP
fi
if [ -d $TEMP ] ; then
setfacl -m u:${UserName[1]}:rwx -R $TEMP
elif [ ! -d $TEMP ] ; #不存在目录temp则进行创建
then
mkdir "$TEMP"
setfacl -m u:${UserName[1]}:rwx -R $TEMP
fi
for ACL_Account in ${UserName[0]} ${UserName[1]} ${UserName[2]} ${UserName[3]} ${UserName[4]};
do 
setfacl -m u:${ACL_Account}:rwx -R /opt
done

批量删除用户脚本:

#!/bin/bash
USER1='payer'
UserName=('tangchanggen' 'wuyaxiong' 'lihui' 'wangyifeng' 'yanglongjun' 'liyunfeng' 'xiaoyongan' 'ivandu')
echo -e "\033[41;34m These account were deleting now! Please wait! \033[0m"
userdel -r $USER1
echo -e "\033[47;31m The account $USER1 had been deleted!  \033[0m"
for U in ${UserName[@]};
do
userdel -r $U
echo -e "\033[47;31m The account $U had been deleted!  \033[0m"
done

完毕!最后我发现一个问题,/etc/sudoers这个文件是没有写入权限的,但是可以通过>>追加内容,你知道是怎么回事吗?麻烦告诉我一下。完整代码参见我的GitHub。

本文参与腾讯云自媒体分享计划,欢迎正在阅读的你也加入,一起分享。

发表于

我来说两句

0 条评论
登录 后参与评论

相关文章

来自专栏用户画像

第10章 广域网技术概述

61. 广域网接口多种多样,下列对于广域网接口的描述错误的是_B_。(选择一项或多项)

662
来自专栏子勰随笔

Android简单实现的多线程下载模块

2096
来自专栏Android中高级开发

Android开发之漫漫长途 Ⅶ——Android消息机制(Looper Handler MessageQueue Message)

该文章是一个系列文章,是本人在Android开发的漫漫长途上的一点感想和记录,我会尽量按照先易后难的顺序进行编写该系列。该系列引用了《Android开发艺术探索...

962
来自专栏开发之途

Android多线程之HandlerThread源码解析

创建 HandlerThread 并调用 start() 方法,使其在子线程内创建 Looper 对象

1194
来自专栏wOw的Android小站

[Android] Handler消息传递机制

其实这块知识我都看过,但是读完这段话有些地方还是让我回想了一小会儿。想完就觉着既然回想了一遍,不如整理一篇博客出来好了。

1231
来自专栏mukekeheart的iOS之旅

Android基础总结(7)——异步消息处理

服务(Service)是Android中实现程序后台运行的解决方案,它非常适合用于去执行哪些不需要和用户交互而且还要长期运行的任务。服务的运行不依赖任何用户界...

2725
来自专栏拂晓风起

Flash Actionscript 多线程Worker 压缩图片

1064
来自专栏java一日一条

每个 Android 开发者必须知道的消息机制问题总结

不能,一个线程对应一个Looper对象,通过ThreadLocal保证一个线程只有一个Looper与之对应,如果多次调用Looper.prepare();则会抛...

953
来自专栏技术小黑屋

关于Android中工作者线程的思考

本文为 InfoQ 中文站特供稿件,首发地址为:http://www.infoq.com/cn/articles/android-worker-thread 如...

562
来自专栏静默虚空的博客

[协议]ICMP协议剖析

1、ICMP简介 ICMP全名为(INTERNET CONTROL MESSAGE PROTOCOL)网络控制消息协议。 ICMP的协议号为1。 ICMP报文就...

3737

扫码关注云+社区