[英]Process substitution not working with sudo
从主bash 脚本以root
身份运行,我想使用sudo
作为非特权用户nobody
执行子进程; 该子进程应该获取一个文件,该文件的内容由主脚本source
。
我正在尝试使用 bash 进程替换来解决这个问题。 但我无法让它发挥作用。
谁能告诉我为什么下面的脚本,...
#! /bin/bash
sudo -u nobody \
bash -c 'source /dev/stdin || ls -l /dev/stdin /proc/self/fd/0 /proc/$$/fd/0; echo "A=$A"' \
< <(echo "A=$(ls /root/.profile)")
...当以root
身份运行时,会产生以下输出?
root@raspi:~# ./test3.sh
bash: line 1: /dev/stdin: Permission denied
lrwxrwxrwx 1 root root 15 Mar 20 20:55 /dev/stdin -> /proc/self/fd/0
lr-x------ 1 nobody nogroup 64 Aug 21 14:38 /proc/3243/fd/0 -> 'pipe:[79069]'
lr-x------ 1 nobody nogroup 64 Aug 21 14:38 /proc/self/fd/0 -> 'pipe:[79069]'
A=
我希望从stdin
读取工作,因为如ls -l
所示,对stdin
的读取访问权限被授予nobody
(这是有道理的)。
那么为什么这不起作用呢? 有什么办法可以让它发挥作用吗?
这个问题的答案没有帮助:如上面的示例所示, <(...)
块中的代码应该访问只有root
可以访问的数据。
要查看为什么您有Permission denied
,请使用ls -lL
sudo -u nobody \
bash -c 'source /dev/stdin || ls -lL /dev/stdin /proc/self/fd/0 /proc/$$/fd/0; echo "A=$A"' \
< <(echo "A=$(ls /root/.profile)")
要绕过该错误,请使用cat |
sudo -u nobody \
bash -c 'cat | { source /dev/stdin || ls -lL /dev/stdin /proc/self/fd/0 /proc/$$/fd/0; echo "A=$A"; }' \
< <(echo "A=$(ls /root/.profile)")
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.