儘管 777 模式,文件的權限被拒絕
我在 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 對文件進行編碼,問題已解決。
再次感謝所有幫助過的人。