sudo 用于 bash 脚本中的单个命令

发布于 2024-11-05 07:27:34 字数 398 浏览 2 评论 0原文

这可能是一个愚蠢的问题。

我有一个脚本,希望能够在 Mac OS X 和我使用的 Linux 机器之间移植。在 OS X 中,脚本中的命令需要 sudo,而在 Linux 机器上则不需要。

长话短说,如何使用 sudo 在脚本中运行一个命令,然后删除脚本其余部分的提升权限?

我尝试过使用

su -

and

su -c

但它们似乎都出错了。 (他们说“抱歉”并继续前进,我认为是因为它试图以 root 身份运行,而 root 没有密码)。

我知道必须有一种愚蠢而简单的方法来做到这一点,每个人都建议什么?

This may be a stupid question.

I have a script that I want to be portable between Mac OS X and a Linux box I use. In OS X, a command in the script requires sudo, where on the Linux box, it does not.

Long story short, how does one run one command in a script with sudo, while then removing the elevated privileges for the rest of the script?

I have tried to use

su -

and

su -c

but they both seem to error out. (They say "sorry" and move on, I assume because it is trying to run as root and root does not have a password).

I know there has to be a silly and easy way to do this, what does everyone suggest?

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(3

夏の忆 2024-11-12 07:27:34

您可以通过执行以下操作来“撤销” sudo 权限(实际上:提前关闭 sudo 时间窗口):

sudo -k

此外,您可以将 sudo 配置为仅允许对某些命令提升权限,甚至可以模拟非 root 来执行特定命令。请参阅man sudoers示例部分非常清楚地表明,sudo 的可配置性实际上没有限制(角色、主机、命令、允许转义、允许 sudo 目标用户、允许事物的例外、无密码授权等) )。

希望在您的上下文中有一个有趣的例子:

用户 fred 可以以 DB Runas_Alias(oracle 或 sybase)中的任何用户身份运行命令,而无需提供密码。

 fred ALL = (DB) NOPASSWD: ALL

如果你不能/不想干涉 /etc/sudoers (visudo!) 那么我建议使用类似的东西

{
     trap "sudo -k" EXIT INT QUIT TERM
     sudo ls # whatever
}

You can 'revoke' the sudo permission (actually: close the sudo time window early) by doing:

sudo -k

Also, you can configure sudo to only allow elevated permissions on certain commands, or even to impersonate non-root for specific commands. See man sudoers. The examples section makes it exceedingly clear that there is virtually no limit to the configurability of sudo (roles, hosts, commands, allow escaping, allow sudo target users, exceptions to allowed things, password less authorization etc etc).

Hopefully an interesting example in your context:

The user fred can run commands as any user in the DB Runas_Alias (oracle or sybase) without giving a password.

   fred           ALL = (DB) NOPASSWD: ALL

If you can't / don't really want to meddle with /etc/sudoers (visudo!) then I suggest using something like

{
     trap "sudo -k" EXIT INT QUIT TERM
     sudo ls # whatever
}
黎夕旧梦 2024-11-12 07:27:34

尝试使用 sudo su 而不是 su 来改回普通用户。

Try sudo su instead of su to change back to a regular user.

情深如许 2024-11-12 07:27:34

使用 sudo 而不使用 su

#!/bin/bash
whoami  # Runs under your regular account
sudo whoami  # Runs as root
whoami  # Runs under your regular account again

这是我运行时的输出:

$ ./sudotest
gordon
Password:
root
gordon

Use sudo without su:

#!/bin/bash
whoami  # Runs under your regular account
sudo whoami  # Runs as root
whoami  # Runs under your regular account again

Here's the output when I run it:

$ ./sudotest
gordon
Password:
root
gordon
~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文