File-Permissions
使用 userspec 的 chroot 監獄中正確的 Linux 權限是什麼
我正在嘗試設置一個 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(兩個系統都相同)?
有沒有更好的方法在 chroot 監獄中設置權限?(但保留 root:root 所有權,因此使用者/程序無法修改“系統”文件)…
除了使用 –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