複製鏈接
請複製以下鏈接發送給好友

fakeroot

鎖定
fakeroot ,用來模擬 root 權限,以便建立特定權限與檔案擁有者的壓縮文件案(tar, ar, .deb 等)。
外文名
fakeroot
功    能
用來模擬root權限

fakeroot詞彙簡介

透過 LD_PRELOAD 的 dynamic loader 功能,用户不必實際擁有 root 權限。fakeroot最初是為了創建debian包使用的。
例如Debian在生成package的時候,編譯完之後,不能立刻在當前環境執行make install,需要執行make install DESTDIR=$(pwd)/debian/tmp把生成的文件安裝到build目錄的裏面$(pwd)/debian/tmp。然後使用那個目錄裏面的全部內容生成Debian包(實際上包裏面還會包含control和maintainer script等)。這個包裏面的文件所有者必須是root,所以需要以root來執行打包命令。但是應該避免在製作Debian包的時候使用root權限。為了解決這個矛盾,fakeroot被開發出來了。在fakeroot環境中,操作文件就像使用root操作文件一樣。但是,實際上系統中文件的權限還是原來的權限。這個包裏面的文件所有者必須是root,所以需要以root來執行打包命令。

fakeroot區別比較

fakeroot與sudo的區別
fakeroot不能獲得root的權限,sudo可以。
fakeroot只是偽裝成root,它不能改變需要root權限才能改變的文件,它只是讓程序執行時按照有root權限的情況來運行,而對文件的操作實際上是在普通用户下進行的。
1
2
fakeroot tar cvf /tmp/local.tar /usr/local
sudo tar cvf /tmp/local.tar /usr/local
上面兩條命令都會在/tmp下建立local.tar,tar內的文件名都會以/開頭,但前一條命令生成的文件屬於當前用户,後一條命令生成的文件是root的。

fakeroot示例

fakeroot 透過 faked 紀錄每個檔案權限。
以下的範例是由 fakeroot 執行 bash,並特定指令你可以注意到使用的指令必須擁有超級使用者權限才可正確執行。而這些權限都是暫時由 fakeroot 仿真並紀錄。註銷 bash 後,所有的檔案依然保持原有權限。
$ whoami
joost
$ fakeroot /bin/bash
# whoami
root
# mknod hda3 b 3 1
# ls -ld hda3
brw-r--r-- 1 root root 3, 1 Jul 2 22:58 hda3
# chown joost:root hda3
# ls -ld hda3
brw-r--r-- 1 joost root 3, 1 Jul 2 22:58 hda3
# ls -ld /
drwxr-xr-x 20 root root 1024 Jun 17 21:50 /
# chown joost:users /
# chmod a+w /
# ls -ld /
drwxr-xr-x 20 root root 1024 Jun 17 21:50 /
# chown joost:users /
# chmod a+w /
# ls -ld /
drwxrwxrwx 20 joost users 1024 Jun 17 21:50 /
# exit
$ ls -ld /
drwxr-xr-x 20 root root 1024 Jun 17 21:50 //
$ ls -ld hda3
-rw-r--r-- 1 joost users 0 Jul 2 22:58 hda3