File-Permissions

使用 userspec 的 chroot 監獄中正確的 Linux 權限是什麼

  • November 5, 2015

我正在嘗試設置一個 chroot 監獄,然後我做了:

which binary
ldd /bin/binary

然後我做了:

cp /lib64/{libs} $jail/lib64
cp /usr/lib64/{libs} $jail/usr/lib64

PS:在這個設置過程中,我發現 /lib64 需要特殊權限 rx,只有 r– 不起作用(在 chroot 內部或外部)。

將二進製文件複製到 $jail,創建 /home/jailuser 。

創建 proc、dev、sys 並安裝它們。

找到 jailuser:users 的 uid 和 gid

更改了主目錄的所有權:

chown jailuser:users
chmod 700 (for dirs)
chmod 600 (for files)

將其他文件的所有權更改為 root:root,有關權限,請參閱前面的內容。

然後在root下進入監獄:

export USER=jailuser (and I did the same with LOGNAME, HOME)
cd $jail
chroot --userspec=$uid:$gid $jail $jail/binary

它有效,但是:

在我的本地盒子中,僅使用所有非 jailuser 權限為 005。

在 KVM VPS 中,嘗試相同,但唯一有效的權限是 050!

拜託,有人知道:

1)為什麼本地只適用於至少 005 而遠端只適用於至少 050(兩個系統都相同)?

  1. 有沒有更好的方法在 chroot 監獄中設置權限?(但保留 root:root 所有權,因此使用者/程序無法修改“系統”文件)…

  2. 除了使用 –userspec 選項之外,有沒有更好的方法以非特權使用者身份啟動這個監獄?

謝謝!

我想我明白了!我想有時系統需要更改為根組內的使用者並且需要庫(可能是系統或無人?)因此 lib64 和 usr/lib64 確實需要至少 050 權限。

我設置權限的最終腳本是這樣的(經過測試和工作):

#Create vars
u=jailuser
g=users
home=/home/$u
jail=$home/jail

#Set normal home
u=jailuser
g=users
cd $home
find . -type d -exec chown $u:$g {} +
find . -type f -exec chown $u:$g {} +
find . -type d -exec chmod 700 {} +
find . -type f -exec chmod 600 {} +

#Set jail
u=root
g=root
cd $jail
find . -type d -exec chown $u:$g {} +
find . -type f -exec chown $u:$g {} +
find . -type d -exec chmod 511 {} +
find . -type f -exec chmod 100 {} +

#Set lib64
cd $jail/lib64
find . -type f -exec chmod 555 {} +

#Set usr/lib64
cd $jail/usr/lib64
find . -type f -exec chmod 555 {} +


#Set binary
chmod 511 $jail/binary

#Set etc
chmod 544 $jail/etc/passwd
chmod 544 $jail/etc/group

#Set tmp
chmod 777 $jail/tmp

#Set jailed home
u=jailuser
g=users
cd $jail$home
find . -type d -exec chown $u:$g {} +
find . -type f -exec chown $u:$g {} +
find . -type d -exec chmod 700 {} +
find . -type f -exec chmod 600 {} +

cd $home

引用自:https://serverfault.com/questions/734027