2015-10-05 123 views
0

當執行驅動器的遞歸目錄掃描以通過在sudo下運行程序可執行文件來生成每個文件的哈希時,我發現有1,000個文件正在拋出「Permission拒絕「錯誤。Linux - 從Sudo讀取文件 - 「權限被拒絕」

我的問題:這是否由設計,爲什麼是sudo無法讀取文件?我在做什麼甚至可能,因爲在掃描期間文件可能被加密或當前正在使用?

當我編譯到Mac OSX並執行相同的掃描sudo下,我沒有這個問題,只是Linux。

Distro: 3.19.0-25-generiC#26~14.04.1-Ubuntu SMP Fri Jul 24 21:16:20 UTC 2015 x86_64 x86_64 x86_64 GNU/Linux 

許可文件的實例否認:

Can't open file: "/sys/class/gpio/unexport" 
MSG: "Permission denied" 
Can't open file: "/sys/class/gpio/export" 
MSG: "Permission denied" 

的權限設置示例:

/sys/class/gpio$ ls -al 
total 0 
drwxr-xr-x 2 root root 0 Oct 5 04:51 . 
drwxr-xr-x 57 root root 0 Oct 4 11:25 .. 
--w------- 1 root root 4096 Oct 5 04:51 export 
--w------- 1 root root 4096 Oct 5 04:51 unexport 

MD5函數,其中文件讀取失敗:

QByteArray MD5(QString sPath) 
{ 
    QByteArray resultMD5 = NULL; 

    QFile* file = new QFile(sPath); 

    if(file->open(QIODevice::ReadOnly)) 
    { 
    QCryptographicHash* pHashMD5 = NULL; 

    resultMD5 = pHashMD5->hash(file->readAll(),QCryptographicHash::Md5); 

    file->close(); 

    //Clean up pointer 
    delete pHashMD5; 
    delete file; 
    } 
    else 
    { 
     qDebug() << "Can't open file: " << sPath; 
     qDebug() << "MSG: " << file->errorString(); 

     file->close(); 
     delete file; 
    } 

return resultMD5; 
} 
+0

'/ sys/...'下的文件不是真實文件,它們不存在於硬盤上。根據這些*權限*即使'root'都沒有讀權限,它們是*只寫*'文件'。 – Galik

+0

你真的*想讀/ sys,/ dev等嗎?這不是像硬盤上的圖像和音樂那樣的文件,而是其他奇怪的東西。從別處引用:'sysfs是基於RAM的文件系統。它提供了一種方法來導出內核數據結構及其屬性,以及它們與用戶空間之間的鏈接.'和dev是完整硬盤和其他設備的節點列表, – deviantfan

+0

Yeah *'怪物'*。這是我錯過的技術術語! ; o) – Galik

回答

2

是什麼在/ sys下不是reall y文件。它是內核的一個接口。

關於您提到的例子,請參閱here以獲取他們所做的解釋。

考慮到它們的功能,認爲可以讀取這些「文件」是沒有意義的。

+0

Miner_Glitch,Galik和deviantfan的回答爲這個問題提供了一個結論性的答案。非常感謝。混亂是針對OSX和Linux運行的,並且獲得了混合結果。我想OSX處理權限拒絕與更多的優雅,因爲我看着我的數據庫在OSX上,幾個記錄項空字符串哈希,並沒有在我的日誌中的權限消息。 – CampbellGolf