Centos

儘管 777 模式,文件的權限被拒絕

  • October 10, 2018

我在 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

完整文件的大小為 10713,即 82413+1,這意味著它成功複製了除文件“00”和“02”之外的所有文件。一個成功的拷貝應該是12361字節,82415+1。但是,這兩個文件並沒有什麼不同,只是機器拒絕讓我閱讀它們。

命令“chmod 777”是多餘的,只是為了強調這種情況。在執行該命令之前,權限都採用“-rw-r–r–”的形式,這仍然意味著我不應該收到權限被拒絕的錯誤。

沒有“。” 關於權限,所以理論上Selinux應該是不應該涉及的,但即使涉及,為什麼只選擇兩個文件呢?

我可以重複創建這些文件的過程,它會選擇一組不同的文件不可讀。有人對此有解釋和解決辦法嗎?

更新:

我已經修改了創建文件的過程。以前,它從 JavaScript 客戶端接收數據,該客戶端將 XLSX 文件分成塊,以允許上傳大量電子表格。伺服器將接收作為 base64 的塊,將每個塊解碼為二進制,然後將其保存在臨時文件中以連接到最終的 XLSX 文件中。

它現在所做的是將每個臨時塊保存為 base64(100% ASCII)。上傳所有塊後,它會讀取每個文件,然後將其解碼為二進製文件,並將其附加到最終的 XLSX 文件中。

工作正常。我想我們會這樣。

作為測試,我編寫了一個快速的 3 行程序來讀取其中一個 base64 塊,將其解碼為二進制,然後保存。然後我試圖閱讀結果。你猜怎麼了?二進製文件的權限被拒絕。

顯然,使文件不可讀的原因是文件中的某些數據模式

使用這種方法可以解決問題,但我仍然想知道文件內的二進制數據模式如何在**外部創建“權限被拒絕”錯誤。

最後更新

原來我們的服務提供商執行了一個 Red-Hat Linux 防病毒程序。顯然,我沒有意識到這一點。

關閉防病毒軟體,所有文件都神奇地變得可讀。重新打開它,某些選定的幾個文件恰好與某些病毒簽名匹配。

防病毒軟體應該留意執行檔。(問題出現時文件最初是模式 644)

應該有不同的錯誤資訊。

那好吧。此後我們將使用 Base64 對文件進行編碼,問題已解決。

再次感謝所有幫助過的人。

引用自:https://unix.stackexchange.com/questions/469825