Dem*_*emi 2 root privileges zsh
在我的 .zshrc 中,我有启动各种程序实例的命令,比如 Mozilla Firefox 和 Evolution。我显然不想以 root 身份启动它们,所以我想在启动它们之前检查我是否是 root。我该怎么做呢?
您可以使用例如这样的条件语句:
PRGCMD="firefox"
PRGUSR="user"
if [[ $UID == 0 || $EUID == 0 ]]; then
# root
echo Running programm as User $PRGUSR
sudo -u $PRGUSR ${(z)PRGCMD}
else
${(z)PRGCMD}
fi
Run Code Online (Sandbox Code Playgroud)
它首先检查真实用户 ID或有效用户 ID是否为zero,即root。
如果是这样,它会按照用户在变量中sudo定义的那样运行变量中定义的程序。(如果您只需要警告消息,则可以省略此行。)PRGCMDPRGUSR
${(z)PRGCMD}分割单词就像 zsh 命令行一样,以防PRGCMD包含空格,即程序的参数。
一个仅以非 root 身份运行程序的简短变体是: [[ $UID != 0 || $EUID != 0 ]] && firefox
此外,您可能希望包含%#在您的提示中,以便您可以看到您当前的 shell 是有特权的。来自man zshmisc:
%# A `#' if the shell is running with privileges, a `%' if not. Equivalent to `%(!.#.%%)'. The definition of `privileged', for these
purposes, is that either the effective user ID is zero, or, if POSIX.1e capabilities are supported, that at least one capability is
raised in either the Effective or Inheritable capability vectors.
Run Code Online (Sandbox Code Playgroud)
如果判断代码外壳与权限运行(在定义privasserted()中utils.c)可恕我直言没有shell代码来完成,所以如果你想它可能是最好的解析的输出完全相同的行为%#迅速扩张:
[[ $(print -P "%#") == '#' ]] && echo shell privileged || echo shell not privileged
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
2923 次 |
| 最近记录: |