【问题标题】:Changing system time using /bin/date使用 /bin/date 更改系统时间
【发布时间】:2011-09-03 17:15:40
【问题描述】:

我正在尝试通过脚本更改系统时间。

基本上命令date -s "<date>" 不起作用,因为我以用户www-data 运行该命令。尽管我编辑了/etc/sudoers 文件以赋予用户www-data root 权限,但我仍然无法更改或设置时间。

可能是什么原因?

【问题讨论】:

  • 请确保您设置了“sudoers”文件,以便 www-data 只能以超级用户权限运行“日期”,而不能运行任何应用程序。
  • 考虑这是否是个好主意。 ntpd 自动维护系统时钟。
  • ntpd 很酷,但在这种情况下用户应该手动更改它。

标签: linux http shell date apache2


【解决方案1】:

编辑 /etc/sudoers 后,做一个

 sudo date -s

命令。这将从“根”用户执行实际的日期命令。

仅编辑 /etc/sudoers 是不够的,因为它不会为用户提供 root 权限,但它会提供使用 sudo 实用程序从用户成为 root 用户的能力。

【讨论】:

  • 正常情况下,sudo 在您使用时会提示您输入密码。您可以使用NOPASSWD 标记来覆盖它。
  • www-data ALL=(ALL:ALL) NOPASSWD: ALL 改成这样还是不行
  • thetux4,你是怎么开始date -s的呢?尝试以相同的方式启动id 实用程序并发布结果。
  • 我只是设置为/bin/date -s <somedate>。 id 实用程序的结果是uid=33(www-data) gid=33(www-data) groups=33(www-data)
  • “sudo id”的结果是什么?
【解决方案2】:

输入

sudo visudo

添加下一条命令

<username> ALL=(ALL) NOPASSWD: /bin/date

<username> ALL=(ALL) NOPASSWD: /usr/bin/timedatectl

现在您可以在没有密码的情况下从特定帐户编辑您的时间

sudo timedatectl set-time <datetime>

【讨论】:

    【解决方案3】:

    还要注意那一行

    Default requiretty
    

    应该在 sudoers 文件中添加注释。否则你会收到一条消息给 STDERR,说

    sudo: sorry, you must have a tty to run sudo
    

    当试图从外部世界调用脚本时。

    这对我来说是个问题。

    【讨论】: