这可能是一个愚蠢的问题。
我有一个脚本,希望在Mac OS X和Linux上都能使用。在OS X中,脚本中的一个命令需要sudo
,而在Linux上则不需要。
简而言之,如何在脚本中运行一个带sudo
的命令,然后取消其余脚本的提升权限?
我尝试过使用
su -
and
su -c
但它们似乎都出现了错误(它们会说“抱歉”然后继续,我猜测是因为它试图以root
身份运行,而root
没有密码)。
我知道一定有一个愚蠢且容易的方法来解决这个问题,大家有什么建议吗?
您可以通过以下方式“撤销”sudo权限(实际上是:提前关闭sudo时间窗口):
sudo -k
man sudoers
。其中的示例部分非常清楚地表明,sudo的可配置性几乎没有限制(角色、主机、命令、允许转义、允许sudo目标用户、允许授权等等)。希望以下内容对您有所帮助:
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
如果您不想或不太想去修改/etc/sudoers (使用visudo!),我建议使用类似以下的方法:
{
trap "sudo -k" EXIT INT QUIT TERM
sudo ls # whatever
}
sudo su
而不是su
来切换回普通用户。su
用于切换到不同的用户(通常是root),只能作为root运行,因此它接受的参数是用户名。sudo
用于以不同的用户身份运行单个命令。在您的示例中,您要运行命令su umount /dev/disk1
作为root,然后说您要更改为用户umount
(带有一个额外的被忽略的参数)。 - Adam Rosenfield使用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