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