如何以 sudo 身份运行脚本并且让它不要求我输入密码?

如何以 sudo 身份运行脚本并且让它不要求我输入密码?

我想运行以下脚本:

#!/bin/bash

if grep -qs 'MinecraftServer' /media/kiancross/MinecraftServer/MinecraftServer; then
    echo "Disk already mounted, server boot will continue"
else
     mount /dev/sda1 /media/kiancross/MinecraftServer
fi

sudo mount /dev/sda1 /media/kiancross/MinecraftServer
cd /media/kiancross/MinecraftServer/MinecraftServer/1.6.4
screen -d -m -S MinecraftServer ./start.sh
screen -r MinecraftServer   

我的问题是,挂载需要 sudo,并且我希望非管理员的人能够运行此脚本。当我运行脚本时,mount: only root can do that它会询问我的管理员密码。

我按照建议您去的其他论坛上的说明进行操作,sudo visudo 然后添加以下代码行:myusername ALL = (root) NOPASSWD: /path/to/my/program。尝试此操作后,即使重新启动,我仍然被要求输入密码。我还尝试root按照本文中的说明更改文件的所有者。

这样做之后,我仍然无法在没有密码的情况下运行它。

我运行的是 Ubuntu 14.04。

答案1

有两种方法可以做到这一点。

1:使用sudo

一是让大家都可以使用sudo来挂载磁盘。 sudo 行应该如下所示:

ALL ALL = NOPASSWD: mount /dev/sda1 /media/kiancross/MinecraftServer

第一个ALL表示“所有用户”;第二个意思是“在安装此 sudoers 文件的任何服务器上”。您还需要拥有实际命令的完整路径,而不仅仅是目录。

如果这样做,您还需要更改脚本,以便命令mount始终使用 with 运行sudo,如下所示:

 sudo mount /dev/sda1 /media/kiancross/MinecraftServer

2:使用安装选项

另一种方法是更改​​ /dev/sda1 的挂载选项,以便任何用户都可以挂载它 - 这样您就根本不需要使用 sudo。为此,请更改 /etc/fstab,以便该磁盘的行内容如下

/dev/sda1 /media/kiancross/MinecraftServer YOURFSTYPE users,exec

它说YOURFSTYPE你当然应该写下你的磁盘的文件系统类型 - 可能是 ext4。

替代方案users,exec意味着该文件系统可以由普通用户安装,并且可以执行其上的程序。您必须指定此项,因为通常如果文件系统由 root 以外的其他人安装,则其上的文件将不会被执行。

相关内容