Permissions

為什麼文件所有權在 RPM 或 DEB 包中很重要?

  • June 28, 2014

語境:

我正在嘗試將.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’s root-owned 文件foo.rpm,但我不確定。

問題:

  1. 包總是需要一些root-owned 文件嗎?
  2. 為什麼他們根本需要root-owned 文件?
  3. 如果我錯了,為什麼alien需要root

使用假根。外星人不需要root來操作一些位。fakeroot 手冊頁中的一行描述充分總結了它:

在偽造root權限的環境中執行命令以進行文件操作

因此,fakeroot 是一個程序,它可以讓相關命令相信它是以 root 身份執行的,足以將文件權限設置為應該設置為 root 的權限。有關詳細資訊,請參閱man fakeroot

不幸的是,您收到的錯誤消息具有誤導性。

簡而言之,做

fakeroot alien ...

這是一個錯誤報告,外星人的作者 Joey Hess 討論了使用 fakeroot 的必要性。可能不是最好的連結。如果我發現更好的東西,我會發布它。

https://bugs.debian.org/cgi-bin/bugreport.cgi?bug=16289

因為更改文件的所有權需要“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)下,ApacheWeb 伺服器執行為apache,數據文件歸該使用者所有。另一方面,我相信它在 Debian/Ubuntu 系統上Apache執行www-data,因此,數據文件歸該使用者所有。這意味著alien在轉換時需要更改文件的所有者並執行此操作,如您在上面的範例中所見,它需要以“root”身份執行。

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