bash脚本中单个命令的sudo

bash脚本中单个命令的sudo,bash,scripting,sudo,Bash,Scripting,Sudo,这可能是个愚蠢的问题 我有一个脚本,我希望可以在MacOSX和我使用的Linux设备之间移植。在OSX中,脚本中的命令需要sudo,而在Linux设备上则不需要 长话短说,如何使用sudo在脚本中运行一个命令,然后删除脚本其余部分的提升权限 我试着用 su - 及 但他们似乎都错了。(他们说“对不起”,然后继续,我想是因为它试图以root的身份运行,并且root没有密码) 我知道必须有一个愚蠢而简单的方法来做到这一点,每个人都有什么建议?尝试sudo su而不是su,以更改回普通用户。您可以通

这可能是个愚蠢的问题

我有一个脚本,我希望可以在MacOSX和我使用的Linux设备之间移植。在OSX中,脚本中的命令需要
sudo
,而在Linux设备上则不需要

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

我试着用

su -

但他们似乎都错了。(他们说“对不起”,然后继续,我想是因为它试图以
root
的身份运行,并且
root
没有密码)


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

尝试
sudo su
而不是
su
,以更改回普通用户。

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

sudo -k
此外,您还可以将sudo配置为仅允许提升某些命令的权限,甚至可以模拟特定命令的非root权限。请参见
mansudoers
示例部分非常清楚地表明,sudo的可配置性几乎没有限制(角色、主机、命令、允许转义、允许sudo目标用户、允许的例外情况、无密码授权等)

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

用户fred可以作为DB Runas_别名(oracle或sybase)中的任何用户运行命令,而无需提供密码

   fred           ALL = (DB) NOPASSWD: ALL

如果你不能/不想干涉/etc/sudoers(visudo!),那么我建议你使用

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

使用
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

当我尝试“sudo su umount/dev/disk1”时,我得到“su:unknown login:umount”。通过man sudo,我只能断定它正在寻找一个名为“umount”的用户?瑞克:是的,它正在寻找一个名为
umount
的用户
su
用于更改为其他用户(通常为root用户),并且只能作为root用户运行,因此它所使用的参数是用户名
sudo
用于以不同的用户身份运行单个命令。在您的示例中,您说希望以root用户身份运行命令
su umount/dev/disk1
,然后表示希望更改为用户
umount
(带有一个额外的忽略参数)。这正是我所需要的。运行命令,然后运行sudo-k。非常感谢。感谢sudoers;这正是我需要的。
$ ./sudotest
gordon
Password:
root
gordon