RAIDiator OS下ext3文件系统上的root用户,只有目录中的单个文件的权限被拒绝


9

我有一个名为“存储”的ReadyNAS盒子,我相信它是基于Debian的。我可以以root身份进入它。我正在尝试重新配置Web服务器,但是遇到了我不了解的文件权限问题。我/etc/frontview/apache/apache.pem什至无能为力!与同一目录中的其他文件相比,它似乎没有任何特殊权限,我可以使用它们。

storage:~# whoami 
root
storage:~# cd /etc/frontview/apache/   
storage:/etc/frontview/apache# ls -lah apache.pem*         
-rw-------    1 admin    admin        4.0k Jul 10  2013 apache.pem
-rw-------    1 admin    admin        4.0k Jun  9 05:57 apache.pem.2017-02-04
-rw-------    1 admin    admin        1.5k Jun  9 05:57 apache.pem.orig
storage:/etc/frontview/apache# touch apache.pem            
touch: creating `apache.pem': Permission denied
storage:/etc/frontview/apache# touch apache.pem.2017-02-04 
storage:/etc/frontview/apache# rm -f apache.pem
rm: cannot unlink `apache.pem': Operation not permitted

这个文件有什么特别之处,使其无法被触摸?我无法删除它。我无法更改其权限。我无法更改其所有者。

该目录似乎很好。它还有剩余空间,不是只读安装的。实际上,我可以编辑同一目录中的其他文件。

# ls -ld /etc/frontview/apache
drwxr-xr-x    8 admin    admin        4096 Jun  9 05:44 /etc/frontview/apache
# df /etc/frontview/apache
Filesystem           1k-blocks      Used     Available Use% Mounted on
/dev/hdc1            2015824        504944   1510880   26% /

也请出示的输出ls -ld /etc/frontview/apachedf /etc/frontview/apache。也许文件夹在已挂载的磁盘空间上ro
Ned64

我将该信息添加到问题中。对我来说一切都很好。无论如何,如果这是问题所在,我认为我无法编辑该目录中的所有其他文件。
史蒂芬·奥斯特米勒

@RunCMD我在标题和标签中添加了更多具体信息。该文件系统被列为ext3,因此ext3似乎支持不可变的 # mount::/dev/hdc1 on / type ext3 (rw,noatime)
Stephen Ostermiller

1
Solaris不支持ext3或ARM cpu,因此可能不基于Solaris。
alanc

1
我从问题中删除了Solaris。在进一步阅读中,它可能基于Debian Etch。
史蒂芬·奥斯特米勒

Answers:


9

我刚发现问题。在该文件上设置了“不可变”属性。 ls没有显示。您需要其他命令才能看到它:

# lsattr apache.pem*
----i--------- apache.pem
-------------- apache.pem.2017-02-04
-------------- apache.pem.orig

一旦删除了不可变的位,就可以编辑该文件:

# chattr -i apache.pem
# touch apache.pem

1
我在“热网络问题”中单击了此问题,以告诉您检查扩展属性,但是我想您已经这样做了。(IDK为什么GNU ls没有列出属性的选项。我忘记了,但是也许查询它们的系统调用也不是可移植的,所以仅在单独的实用程序中实现它们可能会更容易。)
Peter Cordes

@PeterCordes我同意。我确定在Google搜索类似“从覆盖文件中停止升级”之类的内容后,就将其设置为该位,但是那是几年前的事,我显然忘记这样做了。如果ls显示该位,或者我使用的任何其他其他命令中包含有关为什么拒绝权限的更有用(且特定)的错误消息,那将是很好的。
Stephen Ostermiller

所有touch知道的是,该系统调用它试图(open("apache.pem", O_WRONLY|O_CREAT|..., 0666))失败的EACCESS。(strace -efile touch apache.pem用于查看它进行的与文件相关的系统调用)。就像该系统调用的手册页所述,EACCESS可能有很多原因,其中许多原因涉及父目录而不是文件本身。编写代码以准确推断出系统调用为何返回错误的原因将非常困难,因为不同的文件系统和操作系统是不同的……
Peter Cordes

无论如何,通用约定是,当某件事失败时,您会查找错误代码(errno)的错误字符串并进行打印。(使用C标准库perror功能或等效功能)。这是极少数情况,这种情况并不总是足以提示用户快速找到问题,但在大多数情况下,它工作得很好。(特别是与结合strace,以防有任何疑问究竟哪个操作产生的误差。)它并不完美,但它可能是糟糕(参见MS Windows其中充其量你得到一个错误代码,以谷歌。)
彼得·科德斯

只是在玩弄chattr +i,并注意到rm foo(没有-f)提示:rm: remove write-protected regular file ‘foo’。因为 faccessat(AT_FDCWD, "/var/tmp/foo", W_OK) = -1 EACCES (Permission denied)。POSIX要求rm在删除写保护文件之前默认提示,这就是为什么它首先检查的原因。所以如果不使用的话,您会更快地得到一个大提示rm -f。:/ access(3)要求内核检查许可权,就像它真的是要进行写操作一样,因此它会选择ACL和属性。
彼得·科德斯
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.