提问人:Andrius Solopovas 提问时间:11/16/2020 最后编辑:Andrius Solopovas 更新时间:11/18/2023 访问量:2027
如何检查用户在 bash 脚本中是否具有 sudo 权限?
How to check if user has sudo privileges inside the bash script?
问:
我想检查用户是否具有 sudo 权限。这是我正在尝试做的一个大致示例。我正试图让它在以下操作系统上工作:centos、ubuntu、arch。
if userIsSudo; then
chsh -s $(which zsh)
fi
答:
3赞
Raman Sailopal
11/16/2020
#1
sudo -l
将显示用户可以使用权限运行的命令。如果没有可以运行的命令,将返回错误代码,因此您可以尝试:sudo
sudo -l
sudo -l && chsh -s $(which zsh)
评论
0赞
Andrius Solopovas
11/16/2020
就我而言,我必须这样做,所以删除任何输出,但它可以正常工作,并且不会提示输入密码。if sudo -l &> /dev/null
0赞
tink
11/18/2023
@AndriusSolopovas - 如果没有 sudo 权限的用户运行它,它会怎么做?对我来说,Ubuntu 20.04,非特权用户会收到带有 的密码提示,而不是 .对于特权用户,情况正好相反。-l
-v
3赞
Cuauhtli
11/16/2020
#2
试试这个:
$ sudo -v &> /dev/null && echo "Sudoer" || echo "Not sudoer"
此外,IDK 将搜索他在组中的成员身份,即:sudo
$ groups "$(id -un)" \
| grep -q ' sudo ' \
&& echo In sudo group \
|| echo Not in sudo group
艺术
$ getent group sudo \
| grep -qE "(:|,)$(id -un)(,|$)" \
&& echo in sudo group \
|| echo not in sudo group
评论
0赞
Andrius Solopovas
11/16/2020
我认为第一个例子是完美的。
0赞
Andrius Solopovas
11/16/2020
sudo -v &> /dev/null 在 arch Linux 上查询执行时的密码。
0赞
Cuauhtli
11/16/2020
我不知道你在用拱门。您可以输入密码或使用其他选项。
0赞
tink
11/18/2023
它还会在 Ubuntu 上提示输入密码......
2赞
Teocci
11/25/2021
#3
通常,当你运行一个脚本时,你想知道它是否很好地结束了它,或者你得到了一个错误,或者你得到了什么样的错误,如果有的话。
这是一个更详细的片段:sudoer-script.sh
## Define error code
E_NOTROOT=87 # Non-root exit error.
## check if is sudoer
if ! $(sudo -l &> /dev/null); then
echo 'Error: root privileges are needed to run this script'
exit $E_NOTROOT
fi
## do something else you
## means it was successfully executed
exit 0
现在,您可以重复使用脚本、通过管道传输脚本或与其他命令连接
sudoer-script.sh && ls
## in a script
if $(sudoer-script.sh); then
echo 'success'
fi
## capture error
stderr=$(./sudoer-script.sh 2>&1 >/dev/null)
echo $stderr
作为功能:
is_sudoer() {
## Define error code
E_NOTROOT=87 # Non-root exit error.
## check if is sudoer
if ! $(sudo -l &> /dev/null); then
echo 'Error: root privileges are needed to run this script'
return $E_NOTROOT
fi
return 0
}
if is_sudoer; then
echo "Sudoer"
else
echo "Not sudoer"
fi
0赞
Mr. Polywhirl
11/18/2023
#4
这是 Cuauhtli 逻辑的修改示例。
我存储了一个布尔值 ( = , = ) 响应:0
false
1
true
#!/usr/bin/env bash
IS_SUDOER=$(sudo -v &> /dev/null && echo 1 || echo 0)
if [[ "$IS_SUDOER" -eq 1 ]]; then
sudo chown root /path/to/some/restricted/file
sudo chmod 4755 /path/to/some/restricted/file
else
echo "WARNING: Privileged account required to alter file permissions"
fi
这是我修改后的 Teocci 逻辑示例。
#!/usr/bin/env bash
is_sudoer() {
ERR_NOT_ROOT=87
if ! $(sudo -v &> /dev/null); then
#echo "Error: Must be a privilaged user to execute"
return $ERR_NOT_ROOT
fi
return 0
}
if is_sudoer; then
echo "Access granted!"
else
echo "Permissioned denied!"
fi
评论