【问题标题】:How Do I Execute a sudo command in a Shell Script?如何在 Shell 脚本中执行 sudo 命令?
【发布时间】:2015-02-14 22:01:22
【问题描述】:

我正在使用 LaunchD Task Scheduler 应用程序在我的 Mac Mini 上安排作业。我想每两个小时执行一次清除命令,这样我就不必记住在终端中执行此操作。我必须使用 sudo 命令运行它。我想以保护我的密码的方式执行此操作。

我发现了很多不同的方法来实现这一点,并就解决方案进行了大量辩论。我现在决定运行以下脚本。据我了解,这应该防止命令被写入 .bash_history 和缓存文件中。现在,我拥有我的脚本(和每个脚本)的文件夹的权限设置为管理员和当前具有访问权限的用户。

#!/bin/sh
export HISTIGNORE='*sudo -S*'
echo "mypassword" | sudo -S -k purge

我已经阅读了一个过程,我可以将密码放入安全文件中,并且我猜想从该文件中访问密码。我想尝试该过程,但找不到如何执行此操作的示例。我认为使用密码引用一个安全文件可能比将密码放入每个 shell 脚本中更好。我也想看看 .bash_history 中的命令。

【问题讨论】:

  • 您可以设置 sudo 以允许用户在没有密码的情况下运行特定命令。这比硬编码密码来运行所有命令然后试图阻止人们找到它更安全。
  • @thatotherguy,很高兴知道。我想要最安全的方法来执行此操作并保护我的密码。 purge 命令是我目前唯一想在没有密码的情况下运行的命令。请添加有关如何执行此操作的解决方案作为答案,我将对其进行检查并修改我的 shell 脚本。非常感谢!

标签: bash shell passwords sudo


【解决方案1】:

执行此操作的安全方法是允许用户在没有密码的情况下运行特定命令。

请参阅 StackOverflow 的姊妹网站之一的 this question

【讨论】:

  • 在我开始之前,我只是确认该链接的解决方案没有任何区别,除了使用 Linux 和 Mac 之间存储 sudo 命令的位置。我在 /usr/sbin 而不是 /sbin 中找到了清除命令。
  • 对。 sudosudo。显然,您应该将 /sbin/shutdown 替换为 /usr/sbin/purge,因为您希望允许清除而不是关闭。
  • 我通过在文件夹 /etc/sudoers.d 中创建清除来对您提供的链接上的内容进行了修改。 'user ALL=(ALL:ALL) NOPASSWD: /usr/sbin/purge' 当我在终端中执行 sudo purge 时,它​​不需要密码。我将 shell 更改为使用 sudo purge。
【解决方案2】:

您希望脚本以 root 身份每 2 小时运行一次,这样您就不需要记住了吗?

sudo crontab -e

0 0,2,4,6,8,10,12,14,16,18,20,22 * * * /home/lightbe/swanky_script.sh

...然后您的密码就会受到保护。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2015-12-26
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多