繁体   English   中英

检查是否可以在Bourne Shell中以sudo身份运行命令?

[英]Check if possible to run command as sudo in Bourne shell?

我正在编写Bourne Shell部署脚本,该脚本以root用户身份运行某些命令,以当前用户身份运行某些命令。 我不想以root用户身份运行所有命令,并预先检查我所需的命令是否可用于root用户(以防止中止的半完成部署)。

为此,我想创建一个函数来检查命令是否可以以root身份运行。 我的想法是这样做:

sudo_command() {
    sudo sh -c 'type "$1"'
}

然后像这样使用它:

required_sudo_commands="cp rm apt"
for command in $required_sudo_commands do
    sudo_command "$command" || (
        echo "missing required command: $command;
        exit 1;
    )
done

您可能会在这里问到我的问题:它不起作用。 你们中有人看到我在做什么错吗?

我尝试自己在sudo_command内部运行命令,但是(对我而言)奇迹般地起作用了。 但是,当我将该命令放入一个单独的文件中时,它不起作用。

有两个直接的问题:

  1. $1单引号没有扩展。

    您可以通过将其用双引号代替来半固定它: sudo sh -c "type '$1'"

  2. 您的命令未退出。 通过替换|| (..)可以轻松解决此问题。 || (..)|| {..} || {..}

    (..)创建一个子外壳,该子外壳限制其中的所有内容(包括exit的范围。 要对命令进行分组,请使用{..}

但是,还有一个基本问题,就是尝试使用sh -c 'type "$1"做任何事情。

sudo的主要点之一是能够限制用户可以做什么和不能做什么的能力。 您假设用户具有以root用户身份运行任意命令的完整,不受限制的访问权限,并且任何问题都归因于root没有这些命令可用。

对于您来说,这可能是一个有效的假设,但您可能希望改为运行sudo apt --version以获得更好(但仍不完整)的画面,以了解是否允许并能够使用sudo运行apt ,而无需完整无限制地进行操作访问。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM