如何以 root 身份运行自定义命令启动应用程序

如何以 root 身份运行自定义命令启动应用程序

我希望每次启动计算机时都会运行终端命令,但我想要运行的命令需要 root 权限。我在设置的启动应用程序部分的命令中输入了 sudo ,但由于它需要我的密码,所以我认为它没有运行。

答案1

将 cron 作业添加到 root 的 cron 表中。 Cron 作业是按计划运行的任务。您可以安排作业在每次系统启动时运行。

作为root,输入crontab -e(或使用sudo crontab -e)编辑 cron 表,它只是计划任务的列表。然后使用@reboot昵称(而不是正常计时语法)创建一个在每次启动时运行的作业:

@reboot your_command

答案2

您可以配置 sudo 以允许您运行该命令没有输入您的密码。我通常会建议不要这样做,但话又说回来,我建议根本不要自动运行 root 应用程序(除非它们是 setuid root 并正确管理权限/安全),嘿,这是你的机器。如果您需要在每次登录时运行 sudo 命令,则此技术特别有用。 (如果只在启动时需要启动定时任务,那么它是有意义的,我同意)。

您可以通过以下两种方式之一执行此操作:

  1. 在 sudo 配置文件中添加适当的条目/etc/sudoers,该文件通过visudo以 root 身份运行(或通过 sudo)进行编辑。
  2. (受到推崇的)创建一个/etc/sudoers.d包含您的配置更改的文件。该文件应在底部/etc/sudoers包含指令,这将导致它读取此目录中的文件作为附加配置。 #includedir /etc/sudoers.d(如果没有,这个选项 #2 将不起作用。)

不管怎样,现有的/etc/sudoers都有配置语法的解释,但它有点长,你不需要太担心任何现有的配置。 (还有一个手册页,man 5 sudoers。)

您需要做的是编写一个用户规范行,允许您在不输入密码的情况下运行特定命令。

正如文件注释所指出的,用户规范具有以下基本格式:

## Syntax:
##
##      user    MACHINE=COMMANDS
##
## The COMMANDS section may have other options added to it.

还有一些特定类型配置的语法示例。为了完成您的需要,用户规范是:

username ALL = NOPASSWD: /path/to/command

(用适当的值替换“用户名”和“/path/to/command”;“ALL”和“NOPASSWD”是文字。)

请注意,您应该始终使用满的命令的路径,两个都在 sudoers 配置中以及自动启动时。这有助于确保程序按照您期望的方式运行,而不是由于劫持而被其他(可能是恶意的)程序取代$PATH。该建议也适用于 root crontab 条目或自动授予 root 权限的任何其他方法。

相关内容