无需在 shell 脚本中询问密码即可成为 root

无需在 shell 脚本中询问密码即可成为 root

我想编写一个以 root 身份运行“chrome”的脚本,而无需从用户那里获取密码。用户不应该知道密码,他们也不应该看到密码,如果他们打开脚本(如果需要将root密码写入脚本,我们需要对其进行加密)怎么可能?我结账了一个但没用

#!/usr/bin/expect -f 
"right here i need to be root"
chrome -P http://www.google.com.tr & sleep 4 

答案1

使用须藤。在 sudoers 文件中添加一条规则,以允许用户以 root 身份运行特定命令或脚本。

如果您想将 sudo 的使用抽象给用户,请使用一个普通脚本代表用户调用 sudo。

不过,让我担心的是使用 chrome 作为 root。我不需要问为什么,但请记住这是一个安全风险。无论您做什么,都应该考虑使用专用的非特权用户。如果您需要 root 的某些功能,请参阅 linux 功能 ( man 7 capabilities) 以仅向您的 chrome 用户授予所需的超级用户权限。

答案2

如果脚本启动图形应用程序,则不应使用sudo.参见示例:

为什么不应该使用 sudo 来启动图形应用程序?

在 GUI 应用程序上使用 sudo

我不建议以 root 身份运行 chrome(!),但原则上,要以 root 身份启动图形应用程序而不以 root 身份登录,您应该使用pkexec.正如中所解释的这个答案在命令中设置必要的环境变量应该足够了

 pkexec env DISPLAY=$DISPLAY XAUTHORITY=$XAUTHORITY ./your-script

系统将提示用户输入自己的密码。但严格来说(或者如果失败),您应该创建一个策略文件。看man pkexec和更多细节这里特别是关于脚本这里

答案3

实际上,这是一个非常糟糕的主意,因为您必须在脚本中清楚地设置您的 parrword。

这在安全性方面不是一个好点,但你可以这样做:

#!/bin/bash

set pass "YOUR_PASSWORD"

sudo your_command

expect "Password"
send "$pass\r"

但为什么不执行 chmod u+s 呢?

答案4

在我看来,您真正想要的是设置执行进程的 UID,而不是在特定用户下运行该进程。

您可能想要的是将程序的 SUID 正确设置为此处描述

简短的例子:

假设您的程序run由 root(用户和组)拥有:

$ chmod u+s run
$ ls -l run
-rwsrwxr-x. 1 root root 0 Aug  5 15:08 run*

请注意用户块中可执行位中的“s”。现在,当由其他人执行时,该进程将以该文件所属的用户(即 root)运行。

笔记:正如 Doug O'Neal 正确指出的那样,这不适用于 Linux 上的任何解释语言!(更多详细信息这里例如,您需要用 C 语言制作一个小型包装程序并编译它。

相关内容