我为学生运行了一小组 macOS 机器(比如 20 台),它们都需要使用自制软件和其他软件包和应用程序等进行设置。我正在编写一个 bash 脚本来自动安装每台计算机上所需的所有东西。我将使用的一些命令需要以 root 身份运行,但不是大多数。
我想知道在脚本中单独 sudo 这些命令中的每一个是否会更好,或者将 sudo 排除在脚本之外并 sudo 整个脚本。我想知道哪一个更安全(安全方面),更适合我的情况。我不想在整个脚本中都被提示输入密码,但我也不想以 root 身份运行脚本中的每一行,因为它不安全。
遵循最小权限原则,尽可能少地以 root 身份运行。因此,在脚本中使用 sudo。
注意第一次有需要sudo的命令,可能会提示。(如果您在 /etc/sudoers 中适当地使用 NOPASSWD,这是一种许多人会回避的技术,因为它也不安全。)但是,当您运行 sudo 并提供密码时,sudo 会记住成功一段的时间。默认情况下,该时间段为五分钟。因此,如果您运行“sudo echo hi”,输入您的密码,然后在此之后不久运行脚本,那么在您运行脚本时就不需要提示您输入密码。更现实的是,如果您只运行脚本,您可能只会被要求 sudo 一次...假设您的脚本完成剩余任务所需的时间不到几分钟。
我可能不会担心一些echo
命令,但是如果有重要的内容可以在没有额外权限的情况下完成,那么为了安全起见,我通常喜欢以最小的高度最大化完成多少。
作为最小化权限的示例,让我向您展示另一个示例场景。代替:
sudo -c "sample-command >> /var/log/output.txt"
我喜欢使用:
sample-command | sudo tee -a /var/log/output.txt >> /dev/null
通过这样做,整个命令在没有 sudo 的情况下运行,并且最终具有增强权限的唯一部分是需要增强权限的部分,即写入文件的部分。
显然,我的目标是尽量减少提升的程度。同样,如果您的整个脚本不需要提升,则首选方法(从安全角度来看)是尽量减少提升的次数。
小智 0
取决于命令是什么。\n对于从互联网下载的命令,最好不要以 root 身份运行它们。\n但其他命令应该可以以 root 身份运行。\n我要做的是将命令分成两个脚本:一个用于非根命令,一个用于根命令
\n\n如果我能得到命令列表,也许我可以提供更多帮助。
\n 归档时间: |
|
查看次数: |
3702 次 |
最近记录: |