批量创建用户并使用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:https://github.com/geeklp/Scripts/blob/master/BashShell/UserAdd.sh ,批量删除用户脚本:https://github.com/geeklp/Scripts/blob/master/BashShell/UserDel.sh



相关文章
OFDM深入学习及MATLAB仿真(二)
OFDM深入学习及MATLAB仿真
1073 1
|
11月前
|
存储 弹性计算 安全
阿里云服务器计算型c9a实例怎么样?实例特点、收费标准、适用场景及活动价格参考
阿里云服务器c9a实例属于第 9 代 AMD 企业级实例,采用阿里云全新CIPU架构,搭配AMD最新EPYC™ Turin 处理器,可提供稳定的算力输出、更强劲的I/O引擎以及芯片级的安全加固。目前阿里云针对c9a实例推出了首次优惠,本文为大家介绍c9a实例与u1和u2i实例区别,c9a实例的性能特点、收费标准和适用场景以及最新活动价格情况,以供参考和选择。
2729 4
|
7月前
|
存储 消息中间件 NoSQL
C++企业项目实战(一)
教程来源 https://hllft.cn/category/hardware-review.html 本文介绍KivaDB——一个兼容Redis协议的生产级C++分布式KV存储系统。涵盖高性能网络(epoll+多线程Event Loop)、核心存储(渐进式rehash哈希表+最小堆过期管理)、持久化(RDB/AOF)、复制、集群等完整模块,展现企业级C++项目的架构设计与工程实践。
|
8月前
|
编解码 自然语言处理 文字识别
警惕!这封邮件,其实是用代码“画”出来的陷阱
新型钓鱼邮件利用HTML表格“绘制”二维码或类汉字图形,绕过传统图像识别与关键词过滤,威胁邮件安全。本文剖析其技术原理,并介绍行为级渲染检测等纵深防御方案。(239字)
384 4
|
8月前
|
存储 JSON 安全
接口安全:签名、加密、防重放架构方案
本文详解接口安全三大核心防线:签名(防篡改/伪造)、加密(防窃听/泄露)、防重放(防复用攻击)。厘清三者边界与协同逻辑,提供生产级规范、主流算法选型及完整Java代码实现,助开发者构建真正安全的全链路接口防护体系。
1194 2
|
10月前
|
存储 SQL 关系型数据库
云数据库多少钱?2026年阿里云数据库 RDS 收费标准:MySQL、SQL Server 等引擎价格解析
阿里云数据库 RDS(Relational Database Service)是全托管关系型数据库服务,支持 MySQL、SQL Server、PostgreSQL 和 MariaDB 四种主流引擎,适配从轻量测试到企业核心业务的不同需求。很多用户会被不同引擎、规格、计费方式的价格差异弄混淆,下面结合最新收费信息,用通俗语言梳理各引擎价格、影响因素及选型建议,帮大家精准把控成本。
|
机器学习/深度学习 数据采集 人工智能
《解锁AI时代必备技能,抢占未来先机》
在科技飞速发展的今天,AI已融入生活的方方面面。掌握AI时代的必备技能尤为重要,包括编程与数据处理、机器学习与深度学习、创新与协作及批判性思维与持续学习。编程语言如Python是关键工具,数据处理能力不可或缺;深入理解机器学习和深度学习能助你成为AI高手;创新思维和团队协作精神助力突破;批判性思维和持续学习确保不被淘汰。掌握这些技能,抓住机遇,实现自我价值,在AI时代乘风破浪。
829 0
|
存储 SQL 人工智能
AnalyticDB for MySQL:AI时代实时数据分析的最佳选择
阿里云云原生数据仓库AnalyticDB MySQL(ADB-M)与被OpenAI收购的实时分析数据库Rockset对比,两者在架构设计上有诸多相似点,例如存算分离、实时写入等,但ADB-M在多个方面展现出了更为成熟和先进的特性。ADB-M支持更丰富的弹性能力、强一致实时数据读写、全面的索引类型、高吞吐写入、完备的DML和Online DDL操作、智能的数据生命周期管理。在向量检索与分析上,ADB-M提供更高检索精度。ADB-M设计原理包括分布式表、基于Raft协议的同步层、支持DML和DDL的引擎层、高性能低成本的持久化层,这些共同确保了ADB-M在AI时代作为实时数据仓库的高性能与高性价比
|
数据采集 人工智能 物联网
我们给大模型去掉了“AI味”-大模型微调全链路实战
本文档旨在概述使用ModelScope生态进行LLM训练的全链路最佳实践,涵盖数据下载、数据预处理、模型训练、模型评估完整流程。