假设我有一个运行一堆子脚本的shell脚本。我决定必须以root身份运行我的脚本,因为它运行的前几个子脚本需要以root身份运行。但是,有两个被超级脚本运行的子脚本不能以root身份运行。假设我的脚本已经以root身份运行,如何取消root身份以运行最后两个子脚本?这是否可能?
假设我有一个运行一堆子脚本的shell脚本。我决定必须以root身份运行我的脚本,因为它运行的前几个子脚本需要以root身份运行。但是,有两个被超级脚本运行的子脚本不能以root身份运行。假设我的脚本已经以root身份运行,如何取消root身份以运行最后两个子脚本?这是否可能?
您需要一个特定的非root用户,以便您的子脚本可以在其下运行。我们将称此用户为fred
。然后,您拥有root权限的脚本可以简单地执行以下操作:
su fred /path/to/subscript-A
su fred /path/to/subscript-B
nobody
,因为nobody
的整个重点在于它对任何东西都没有写权限。有时这正是您想要的,但我打赌您的子脚本需要写入文件系统...使用su
命令以其他用户身份运行所需的命令。
su nobody ls /tmp
nobody
或www-data
是行不通的。这是一个好观点,但并不需要每次都执行su fred (some command)
... 只需执行su fred
,然后在单独的命令中以 fred 的身份发出任何命令,最后执行exit
即可。 - Dagg Nabbitsu fred
一个命令。当然,您可以将一堆命令打包到子脚本中,并将其传递给su
,但这似乎是 OP 已经完成的工作。另外,值得注意的是,即使fred
在/etc/passwd
中没有 shell,su -s /bin/sh fred -- -c exec /path/to/subscript
也可以工作,如果该帐户仅从脚本中使用(这可能是个好主意),您可能更喜欢让fred
保持这种状态。 - zwol