我想编写一个以 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
.参见示例:
我不建议以 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 语言制作一个小型包装程序并编译它。