為什麼文件所有權在 RPM 或 DEB 包中很重要?
語境:
我正在嘗試將
.deb
包轉換為.rpm
使用alien,我使用這個命令:$ alien -r foo.deb
但它抱怨:
> Warning: alien is not running as root! > Warning: Ownerships of files in the generated packages will probably be wrong.
我認為所有
alien
需要root
的是保證它有權為輸出創建foo.deb
’sroot
-owned 文件foo.rpm
,但我不確定。問題:
- 包總是需要一些
root
-owned 文件嗎?- 為什麼他們根本需要
root
-owned 文件?- 如果我錯了,為什麼
alien
需要root
?
使用假根。外星人不需要root來操作一些位。fakeroot 手冊頁中的一行描述充分總結了它:
在偽造root權限的環境中執行命令以進行文件操作
因此,fakeroot 是一個程序,它可以讓相關命令相信它是以 root 身份執行的,足以將文件權限設置為應該設置為 root 的權限。有關詳細資訊,請參閱
man fakeroot
。不幸的是,您收到的錯誤消息具有誤導性。
簡而言之,做
fakeroot alien ...
這是一個錯誤報告,外星人的作者 Joey Hess 討論了使用 fakeroot 的必要性。可能不是最好的連結。如果我發現更好的東西,我會發布它。
因為更改文件的所有權需要“root”權限;不是因為文件必須由“root”擁有 - 儘管很多都是。
在您的主目錄中創建一個文件並嘗試更改它的所有者:-
touch test.txt ls -l test.txt -rw-rw-r--. 1 gareth gareth 0 Jun 28 21:24 test.txt chown nobody. test.txt chown: changing ownership of ‘test.txt’: Operation not permitted
雖然我擁有該文件並擁有
rw
權限,但我無法更改所有者。sudo chown nobody. test.txt ls -l test.txt -rw-rw-r--. 1 nobody gareth 0 Jun 28 21:24 test.txt
但是使用它以root身份執行它是可行的
sudo
。正如警告所說;所有權將是錯誤的。由此,我們可以假設
alien
更改了某些文件的所有權。系統文件通常由具有限制權限的“root”擁有,因此像您和我這樣的使用者不會更改或刪除它們。
系統上還有其他使用者和組,但與“root”不同,它們在各個發行版中並不相同。例如,在 Fedora(以及 RedHat 和 CentOS)下,
Apache
Web 伺服器執行為apache
,數據文件歸該使用者所有。另一方面,我相信它在 Debian/Ubuntu 系統上Apache
執行www-data
,因此,數據文件歸該使用者所有。這意味著alien
在轉換時需要更改文件的所有者並執行此操作,如您在上面的範例中所見,它需要以“root”身份執行。