剝奪使用者的讀/寫/執行權限
所以我有一個使用者能夠進入
/etc
並讀取httpd.conf
.我想拒絕該使用者訪問任何關鍵位置,例如
/etc
,/var
等等。最好的方法是什麼?我真的不想只為一個使用者修改我的整個文件夾/文件權限。
監獄將根****更改
/
為新路徑,如。作為一個簡單的例子作為開始。
首先,您很可能希望將 chroot 目錄放在單獨的分區上 - 這樣使用者就無法填充您的系統分區。
但為了簡單起見:
- 製作 chroot 目錄:
# mkdir /usr/chroot_test # cd /usr/chroot_test
- 製作系統目錄:
# mkdir bin etc home lib var
- 添加一些基本工具:
這裡可以
ldd
用來查找依賴項。# ldd /bin/bash linux-gate.so.1 => (0xb774d000) libtinfo.so.5 => /lib/libtinfo.so.5 (0xb770a000) libdl.so.2 => /lib/libdl.so.2 (0xb7705000) libc.so.6 => /lib/libc.so.6 (0xb755a000) /lib/ld-linux.so.2 (0xb774e000)
將它們複製到 chroot 的庫中:
# cp /lib/{libtinfo.so.5,libdl.so.2,libc.so.6,ld-linux.so.2} lib/
現在輸入 chroot
# chroot /usr/chroot_test bash-4.2# ls bash: ls: command not found bash-4.2# pwd / bash-4.2# exit exit
好的。作品。添加更多工具:
# sed '/=>/!d;/=>\s*(/d;s/.*=>\s*\([^ ]*\) .*/\1/' < <(ldd /bin/{ls,cat,vi}) | sort -u) ... copy
等等。
然後添加 chroot 登錄(http://kegel.com/crosstool/current/doc/chroot-login-howto.html)。
但是,如前所述,通過使用 jailkit,這可以簡化:http ://olivier.sessink.nl/jailkit/howtos_chroot_shell.html 。
您可以使用文件訪問控制列表來刪除特定使用者的權限。該命令是 setfacl,它在文件上設置(創建)ACL。
範例用法:
root@host:/tmp# date > f1 root@host:/tmp# ls -l f1 -rw-r--r-- 1 root root 30 Mar 28 12:12 f1 root@host:/tmp# setfacl -m u:johan:0 f1 root@host:/tmp# ls -l f1 -rw-r--r--+ 1 root root 30 Mar 28 12:12 f1
注意權限後的 + 符號。它告訴您該文件有一個 ACL 集。setfacl 命令選項 -m 告訴它創建/修改 ACL。參數“u:johan:0”導致使用者“johan”的使用者條目設置為“0”,這是權限模式“0 0 0”的縮寫,相當於“— — – - 用於傳統的“rwx rwx rwx”權限集。
root@host:/tmp# getfacl f1 # file: f1 # owner: root # group: root user::rw- user:johan:--- group::r-- mask::r-- other::r-- root@host:/tmp# cat f1 Thu Mar 28 12:12:07 SAST 2013 root@host:/tmp# exit
退出後命令具有指定使用者的權限,例如“johan”
johan@host:/tmp> cat f1 cat: f1: Permission denied
現在說了這麼多要非常小心。不加選擇地從 /etc 中刪除訪問權限會導致各種故障,使用者可能無法登錄。許多系統功能以登錄使用者的權限讀取 /etc 中的各種配置文件。但是,阻止使用者訪問特定的單個文件是完全可以接受的。