“猫”:无法打开文件:权限被拒绝

Rah*_*hul 3 filesystem permissions command-line files sysfs

我正在尝试将整个/目录复制到其他位置。递归执行 cp 时,它在某些文件上失败,例如:-

/ # ls -lrt /sys/module/nf_conntrack_ipv4/uevent
--w-------    1 root     root          4096 Mar  7 06:29 /sys/module/nf_conntrack_ipv4/uevent
/ #
/ # cat /sys/module/nf_conntrack_ipv4/uevent
cat: can't open '/sys/module/nf_conntrack_ipv4/uevent': Permission denied
/ # cp /sys/module/nf_conntrack_ipv4/uevent /tmp
cp: can't open '/sys/module/nf_conntrack_ipv4/uevent': Permission denied
Run Code Online (Sandbox Code Playgroud)

如果我创建一些仅具有w权限的文件并尝试复制/cat 它,我在那里看不到任何问题。但是,对于像上面提到的某些文件,即使我以 root 用户身份尝试,我也无法复制它或对其进行分类。另外,奇怪的是,上面提到的文件的大小被提到为 4096,这与我们对目录的大小相似。这是什么特殊文件吗?

我想我在这里遗漏了一些东西,需要一些输入来了解有关此类文件或此类行为的更多信息。请帮助我理解为什么我不允许对此类文件的内容进行分类。

hee*_*ayl 10

例如ext4,在常规文件系统中,如果您只有w一个文件的权限,您将无法读取 ( cat) 它,您需要读取 ( r) 位。请注意,root无论权限位如何,都可以读取任何文件。

现在,/syssysfsLinux 内核提供的特殊挂载点,它实际上是一个虚拟文件系统,其工作方式与常规文件系统不同。/sys包含系统的设备相关信息。

修改某些内容/sys会直接改变内核的内部数据结构,因此它取决于内核将允许或拒绝什么。

对于/sys/module/nf_conntrack_ipv4/uevent,您只w为所有者 ( root)设置了位,即使您为所有者 ( ) 添加了rroot这是一个非常糟糕的主意),在读取文件时,您会收到 I/O 错误,因为按照设计,内核不允许任何人读取nf_conntrack_ipv4模块的uevents 。