来自关于的讨论对猫的无用利用。
我决定看看是否可以通过改变管道的所有者来避免一些麻烦。所以我做了:
# cat | cat &
[1] 16500
# cd /proc/16500/fd
# ls -l
lr-x------ root root 0 -> pipe:[931613]
lrwx------ root root 1 -> /dev/tty1
lrwx------ root root 2 -> /dev/tty1
# chown --dereference daemon 0
# ls -l
lr-x------ root root 0 -> pipe:[931613]
lrwx------ root root 1 -> /dev/tty1
lrwx------ root root 2 -> /dev/tty1
我也尝试过chown
并且chown -L
.不去。我确信这根本不可能,但为什么呢?他们显然有索引节点。 931613 是索引节点号。
在我真正感兴趣的情况下,右侧的进程将以较低的权限运行,我希望它拥有自己的句柄,以便它可以重新打开它们。
答案1
原来我搞砸了我的ls
命令。
# ls -lL
lr-x------ daemon root 0 -> pipe:[931613]
lrwx------ root root 1 -> /dev/tty1
lrwx------ root root 2 -> /dev/tty1
这不是一个错字。这是一个逻辑错误,恰好用一个字符修复了。你看,我知道这些节点并不是真正的符号链接,因为打开它们会产生正确的文件,即使它是在 chroot 监狱中打开的,这会在输出中产生不正确的路径ls -l
。不知何故,我认为内核系统调用返回的底层索引节点属性比实际返回的属性要多。