如何在管道之间的 bash 脚本中删除权限?
How to drop privileges in bash script between pipes?
dbus-monitor --system --profile interface=org.freedesktop.login1.Session,type=signal,member={Lock,Unlock} |
egrep --line-buffered -o 'Lock|Unlock' |
while read SIGNAL; do
case "${SIGNAL}" in
Lock)
for i in "$(systemd-path user-shared)/watchlock/lock.d/"*; do
"${i}"
done
;;
Unlock)
for i in "$(systemd-path user-shared)/watchlock/unlock.d/"*; do
"${i}"
done
;;
esac
done
我制作了这个脚本,我想以普通用户身份执行它,但 dbus-monitor
只能以 root 身份运行。有没有办法以 root 身份执行 dbus-monitor
而以普通用户身份执行其余管道?在 dbus-monitor
之前添加 sudo
不是一个选项,因为它只是一种解决方法,我可能打算以 root 身份执行脚本,它会无缘无故地再次提升权限。我还想使用 polkit,例如 pkexec
。谢谢!
就像这样:
cmd_a | sudo -u "${USER}" cmd_b
如果脚本以 root 身份启动,cmd_a
将 运行 以 root 身份启动,cmd_b
将 运行 以 $USER 身份启动。
dbus-monitor --system --profile interface=org.freedesktop.login1.Session,type=signal,member={Lock,Unlock} |
egrep --line-buffered -o 'Lock|Unlock' |
while read SIGNAL; do
case "${SIGNAL}" in
Lock)
for i in "$(systemd-path user-shared)/watchlock/lock.d/"*; do
"${i}"
done
;;
Unlock)
for i in "$(systemd-path user-shared)/watchlock/unlock.d/"*; do
"${i}"
done
;;
esac
done
我制作了这个脚本,我想以普通用户身份执行它,但 dbus-monitor
只能以 root 身份运行。有没有办法以 root 身份执行 dbus-monitor
而以普通用户身份执行其余管道?在 dbus-monitor
之前添加 sudo
不是一个选项,因为它只是一种解决方法,我可能打算以 root 身份执行脚本,它会无缘无故地再次提升权限。我还想使用 polkit,例如 pkexec
。谢谢!
就像这样:
cmd_a | sudo -u "${USER}" cmd_b
如果脚本以 root 身份启动,cmd_a
将 运行 以 root 身份启动,cmd_b
将 运行 以 $USER 身份启动。