为什么我不能 chown 管道?

为什么我不能 chown 管道?

来自关于的讨论对猫的无用利用

我决定看看是否可以通过改变管道的所有者来避免一些麻烦。所以我做了:

# 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。不知何故,我认为内核系统调用返回的底层索引节点属性比实际返回的属性要多。

相关内容