一、 方法实现
▶ 1. 查看拥有sudo权限的用户,分为非免密和免密两种
# 查看用户
function ViewPrivi () {
clear
$Blue "如下账号可以sudo 提权: " $End
for i in `grep -vE '^\s*$|^#|NOPASS' /etc/sudoers | grep 'ALL='| awk '{print $1}'` ;
do
$Yellow "$i" $End
done
$Cyan "如下账号可以免密sudo提权: " $End
for i in `grep -vE '^\s*$|^#' /etc/sudoers | grep 'NOPASS'| awk '{print $1}'` ;
do
$Pink "$i" $End
done
}
执行效果:
▶ 2. 授权用户sudo权限
function AddPrivi() {
clear
adduser=$1
if grep -q ${adduser} /etc/passwd; then
sed -i "/${adduser}/d" /etc/sudoers
echo "${adduser} ALL=(ALL) ALL" >> /etc/sudoers
$Yellow "${adduser} 已经具备sudo 能力!" $End
# ViewPrivi
else
$Red "${adduser} 用户不存在!" $End
fi
}
执行效果:
▶ 3. 取消用户sudo权限
function DelPrivi() {
clear
adduser=$1
if grep -q ${adduser} /etc/passwd; then
sed -i "/${adduser}/d" /etc/sudoers
$Red "${adduser} 已经失去sudo 能力!" $End
# ViewPrivi
else
$Red "${adduser} 用户不存在!" $End
fi
}
执行效果:
二、 交互菜单实现
采用while循环和read来获取用户选择(输入)再用case来匹配用户的输入,根据匹配情况调用对应的函数,从而获得更好的用户体验。
▶ 1. 用户交互菜单如下
# 提权管理
sudo_management() {
while true; do
$Red "===== 提权管理 ====="$End
while true; do
$Red "===== 提权管理 ====="$End
$Yellow "1. 查看sudo用户"$End
$Yellow "2. 禁止用户sudo"$End
$Yellow "3. 允许用户sudo"$End
$Blue "0. 返回菜单"$End
read -p "请选择操作 (0-3): " sudo_option
case $sudo_option in
1)
ViewPrivi
;;
2)
SelectUser
read -p "请输入要禁止sudo的用户名: " nosudo_user
DelPrivi ${nosudo_user}
;;
3)
SelectUser
read -p "请输入要允许sudo的用户名: " yessudo_user
AddPrivi ${yessudo_user}
;;
0)
break
;;
*)
echo "无效的选项"
;;
esac
done
}
▶ 2. 执行效果
=====持续关注=====
下一期 把这三个模块整合在一起,做成一个日常运维管理菜单。