如果我 sudo 执行一个 Bash 脚本文件,那么 Bash 脚本中的所有命令是否也会作为 sudo 执行?

Dec*_*ler 33 shell bash sudo shell-script

我想在 Bash 中编写一个自动安装后脚本(post-install.sh例如,称为)。该脚本将自动添加和更新存储库、安装和更新包、编辑配置文件等。

现在,如果我执行这个脚本,例如使用sudo post-install.sh,我只会被提示输入一次sudo密码,还是sudo每次调用脚本内的命令时都需要输入密码,这需要sudo许可?换句话说,可以这么说,bash 脚本中的命令是否“继承”了执行权限?

而且,如果他们确实这样做了sudo权限是否仍然有可能超时(例如,如果特定命令花费的时间足够长以超过sudo超时)?或者初始sudo密码入口会持续整个脚本的整个持续时间吗?

slm*_*slm 39

Q#1:是否只提示我输入 sudo 密码一次,还是每次调用脚本内的命令时都需要输入 sudo 密码,这需要 sudo 权限?

是的,一次,在脚本运行期间。

注意:当您向 提供凭据时sudo,身份验证通常会在您输入密码的 shell 中持续 5 分钟。此外,从此 shell 执行的任何子进程或在 shell 中运行的任何脚本(您的情况)也将在提升的级别上运行。

Q#2: sudo 权限是否仍然有可能超时(例如,如果特定命令花费的时间足够长以超过 sudo 超时)?还是初始 sudo 密码入口会持续整个脚本的整个持续时间?

不,他们不会在脚本中超时。仅当您在提供凭据的 shell 中以交互方式键入它们时。每次sudo在此 shell 中执行时,都会重置超时。但是在您的情况下,只要脚本在其中执行和运行命令,它们的凭据就会保留。

摘自 sudo 手册页

此限制是特定于政策的;sudoers 安全策略的默认密码提示超时时间为 5 分钟。


Lau*_*ves 17

bash并且它的所有子进程都将以超级用户权限运行。因此,您无需为 bash 脚本中的命令重新输入密码。

sudo超时仅适用于(后)的单独调用sudo。它不会影响您已经在运行的 bash 进程或其任何后代。