运行需要 sudo 的非交互式脚本的最安全方法

fer*_*rgu 4 ssh debian sudo

我想运行一个需要sudo但非交互式的命令,所以输入密码不是一个选项。在我的特定情况下,我想在我的手机上创建一个自动/快捷操作,以通过 ssh 登录在我的服务器上执行此脚本。

就我而言,我想用 启动一个虚拟机virsh start,我知道我可以配置它以允许非 root 用户启动机器,但我对这个解决方案感到好奇,尤其是在非 root 用户的情况下root 选项不可用。

我还设想非特权用户只需要能够运行我定义的单个脚本,而不是任意命令。换句话说,用户只需要能够触发脚本运行——他们不提供任何参数,即使他们找到了这样做的方法,参数也会被忽略。

同样在我的情况下,服务器仅供我使用,并且位于防火墙后面。它有互联网连接(因为它可以下载东西),但不能从互联网访问。我要么必须在我的 LAN 上,要么必须通过 VPN 连接才能访问它,而且我只希望在家里专门使用此脚本。仍然 - 我担心在这里学习“良好实践”。

服务器本身正在运行 Debian 测试。我担心的是允许无密码 sudo 似乎有风险。在理论上无特权的帐户可以触发特权脚本或命令运行的情况下,是否有更好的方法来做到这一点?我是否应该只使用运行脚本root来监视每分钟左右创建的某个文件,并让脚本只创建touch该文件?我可以创建一个只能使用sudo该脚本的用户吗?

Ste*_*itt 10

您可以配置sudo为允许特定用户(或组)运行命名命令;在/etc/sudoers(用于visudo编辑它):

user ALL = NOPASSWD: /path/to/command
Run Code Online (Sandbox Code Playgroud)

将允许用户usersudo /path/to/command不提示输入密码的情况下运行。

  • 一些发行版在 sudo 的配置中默认设置了 `requiretty`。这可以通过对要运行的命令使用相同的 Cmnd_Alias 和有关 requiretty 的异常来选择性地取消设置。例如`Cmnd_Alias NONINTERACTIVE = /path/to/command` `user ALL = NOPASSWD: NONINTERACTIVE` `Defaults!NONINTERACTIVE !requiretty`。Debian 似乎不需要。 (2认同)