尽管是 777 模式,但文件的权限被拒绝

Unc*_*lby 6 permissions chmod centos

我在 CentOS 6.10 64 位上收到权限被拒绝错误

请注意,“#”表示根级别用户提示。

# cd /tmp
# chmod 777 file*
# /bin/ls -l file*
-rwxrwxrwx 1 apache apache   824 Sep 17 17:15 file_00.dat
-rwxrwxrwx 1 apache apache   824 Sep 17 17:15 file_01.dat
-rwxrwxrwx 1 apache apache   824 Sep 17 17:15 file_02.dat
-rwxrwxrwx 1 apache apache   824 Sep 17 17:15 file_03.dat
-rwxrwxrwx 1 apache apache   824 Sep 17 17:15 file_04.dat
-rwxrwxrwx 1 apache apache   824 Sep 17 17:15 file_05.dat
-rwxrwxrwx 1 apache apache   824 Sep 17 17:15 file_06.dat
-rwxrwxrwx 1 apache apache   824 Sep 17 17:15 file_07.dat
-rwxrwxrwx 1 apache apache   824 Sep 17 17:15 file_08.dat
-rwxrwxrwx 1 apache apache   824 Sep 17 17:15 file_09.dat
-rwxrwxrwx 1 apache apache   824 Sep 17 17:15 file_10.dat
-rwxrwxrwx 1 apache apache   824 Sep 17 17:15 file_11.dat
-rwxrwxrwx 1 apache apache   824 Sep 17 17:15 file_12.dat
-rwxrwxrwx 1 apache apache   824 Sep 17 17:15 file_13.dat
-rwxrwxrwx 1 apache apache   824 Sep 17 17:15 file_14.dat
-rwxrwxrwx 1 apache apache     1 Sep 17 17:15 file_15.dat
# cat file* > file.dat
cat: file_00.dat: Permission denied
cat: file_02.dat: Permission denied
# /bin/ls -l file.dat
-rw-rw-r-- 1 root   root   10713 Sep 17 17:32 file.dat
Run Code Online (Sandbox Code Playgroud)

完整文件的大小为 10713,即 824*13+1,这意味着它成功复制了除文件“00”和“02”之外的所有文件。一个成功的复制应该是 12361 字节,824*15+1。但是,这两个文件没有什么不同,只是机器拒绝让我阅读它们。

命令“chmod 777”是多余的,只是为了强调这种情况。在运行该命令之前,权限都是“-rw-r--r--”形式,这仍然意味着我不应该收到权限被拒绝的错误。

没有“。” 关于权限,所以理论上Selinux不应该涉及,但即使涉及,为什么只选择两个文件?

我可以重复创建这些文件的过程,它会选择一组不同的文件不可读。有没有人对此有解释和修复?

更新:

我修改了创建文件的过程。以前,它是从 JavaScript 客户端接收数据,该客户端将 XLSX 文件分成多个块,以允许上传大型电子表格。服务器会以 base64 格式接收数据块,将每个数据块解码为二进制文件,然后将其保存在临时文件中以连接成最终的 XLSX 文件。

它现在所做的是将每个临时块保存为 base64(100% ASCII)。上传所有块后,它会读取每个文件,然后将其解码为二进制文件,并将其附加到最终的 XLSX 文件中。

工作正常。我想我们就这样吧。

作为测试,我编写了一个快速的 3 行程序来读取 base64 块之一,将其解码为二进制,然后保存。然后我尝试读取结果。你猜怎么着?二进制文件的权限被拒绝。

因此很明显,是什么使文件不可读是数据的一些图案内的文件。

使用这种方法解决了这个问题,但我仍然想知道文件内部的二进制数据模式如何在外部创建“权限被拒绝”错误。

Unc*_*lby 4

最终更新

结果我们的服务提供商运行了 Red-Hat Linux 防病毒程序。显然,我没有意识到这一点。

关闭防病毒软件,所有文件就会神奇地变得可读。重新打开它,某些选定的文件恰好与某些病毒签名匹配。

防病毒软件应该留意可执行文件。(问题出现时文件最初是模式644)

应该有不同的错误信息。

那好吧。今后我们将用 Base64 对文件进行编码,问题就解决了。

再次感谢所有提供帮助的人。