如何运行 su root 并在脚本中输入凭据?

如何运行 su root 并在脚本中输入凭据?

我有一个脚本,它需要由 root 用户运行。我只是想知道如何su在脚本中使用该脚本来运行该脚本。 - 我正在运行 CentOS7。

我尝试的命令(如下)失败:

su root credentials=/home/root/root.cred

然后继续脚本的其余部分 - 遗憾的是它不起作用。我包含了 .cred 文件,因为 root 在更改为 root 时会要求输入 root 密码。有没有办法su root在脚本中运行并更改为root。

有任何想法吗?


我可能会感到困惑,但我只想进一步解释:

我有一个脚本,我希望能够从常规(非 sudoer)用户运行,但该命令是 sudo 命令 - 因此只能由 sudoer 执行。 Root 是 sudoer,因此当普通用户运行脚本时 - 它将在脚本中以 root 身份运行。如果我用它开始脚本,su root它就无法通过,因为它需要密码。有没有办法输入 root 密码来通过命令su并使用脚本本身运行脚本的其余部分。也许echo或者什么? - 我不知道,这就是我提出这个问题的原因。

还有什么问题可以在下面问我:)

答案1

您必须在/etc/sudoers文件中添加一个条目,以便能够以 root 身份运行脚本而不使用任何密码:

username ALL = (root) NOPASSWD: /your/script's/absolute/address

您必须将其替换username为您自己的用户名。

但这是危险的,因为如果非特权(即非 sudoer)用户篡改了您的脚本,那么他/她可以使用 root 权限运行他/她想要的任何程序,而无需任何密码,因此安全措施是该文件对于非 root 用户只读:

sudo chmod 755 your_script

通过这样做,您将授予非 sudoer 用户读取和执行(但不能写入)脚本的权限。

并且还要防止将来发生任何逆转:

sudo chown root your_script

通过这样做,您仅将文件的所有权授予 root。

答案2

没有一种机制可以安全地“将用户转换为根用户以执行此脚本的其余部分”。从用户级别获取 root 权限的所有方法都必须使用新凭据启动 shell 或程序的单独实例,以提升程序的权限。为了解决用户在 shell 中输入命令的问题,我们应该使用 system sudo.

对于您的问题,解决方案是将您想要提升的脚本部分分离到另一个脚本中,并在第一个“普通用户”部分的末尾使用 sudo 启动它。如图所示 帕萨·穆萨维的答案,您将用来visudo编辑 sudoers 文件并对其进行配置,并且如果您愿意,可以授予普通用户执行 root 脚本而无需输入密码的权限。

重要的:您必须在 sudoers 定义中指明脚本和参数(如果有)的完整路径,并在调用脚本中写入完全相同的路径和参数。比如说,如果您/bin/mount /cdrom在 sudoers 文件中授权,则在调用脚本中必须说明sudo /bin/mount /cdrom此操作才能起作用。如果您的脚本在 sudoers 文件中没有任何参数,例如/root/my_script.sh,那么您将使用sudo /root/my_script.sh不带参数的方式调用它。另外,您必须使脚本归 root 所有(并应用于chmod go-w它),这样任何人都无法修改它并错误地执行未经授权的命令。

相关内容