防止脚本的某些行以 root 身份运行

防止脚本的某些行以 root 身份运行

假设我正在编写一个需要root权限才能运行的shell脚本,例如-

#!/bin/sh
ip -s -s neigh flush all
ufw enable

如何防止某些代码行以 root 身份运行,即假设我在上面的脚本中添加一行来启动 TOR 浏览器。

#!/bin/sh
ip -s -s neigh flush all
ufw enable
sh -c '"/home/back/Downloads/tor-browser_en-US/Browser/start-tor-browser" --detach || ([ !  -x "/home/back/Downloads/tor-browser_en-US/Browser/start-tor-browser" ] && "$(dirname "$*")"/Browser/start-tor-browser --detach)' dummy %k

由于 TOR 始终在非 root 模式下运行,我应该在上述脚本中进行哪些更改,以允许以非 root 用户身份执行 tor,并以 root 用户身份执行脚本的其余部分?

答案1

使用sudo

#!/bin/sh
ip -s -s neigh flush all
ufw enable
sudo -Hu username sh -c '"/home/back/Downloads/tor-browser_en-US/Browser/start-tor-browser" --detach || ([ !  -x "/home/back/Downloads/tor-browser_en-US/Browser/start-tor-browser" ] && "$(dirname "$*")"/Browser/start-tor-browser --detach)' dummy %k
  • -H:设置$HOME环境变量为目标用户的主目录
  • -u:以指定的目标用户身份运行命令,而不是作为root
  • username:论证-u;指定目标用户的用户名

答案2

有两种方法可以解决这个问题。

1) 以非 root 用户身份运行脚本,并使用sudo向 root 用户提升权限(在要以 root 身份运行的命令前加上 前缀sudo)。

或者

2) 以 root 用户身份运行脚本,并su以非 root 用户身份运行 tor 命令。su允许您规定以哪个用户身份运行命令以及指定-c要运行哪些命令的选项。如果通过 .tor 调用它,我还建议将“tor”命令放入脚本本身中su

相关内容