簡單的設定Linux Chroot環境

簡單的設定Linux Chroot環境

Linux是一個多人多工的作業系統,越來越多的企業開始嘗試使用Linux作業系統,很多人學習架站也從Linux開始,很多網路服務使用起來的確是相當方便。而當系統內的帳號開始增加,管理者所面對的風險也會開始增加,除了要注意網路服務的安全性之外,更要注意系統內的帳戶有被入侵的機會,系統的安全總是得靠管理者把關,網路服務要注意弱點的防護,那使用者的環境安全就交給chroot試試看吧!

chroot是什麼?我想很多人都聽過但是可能不太明白,我剛開始學Linux時也是如此,只知道可以變得比較安全,但是完全不知道作用為何?一般來說系統內的根目錄也就是root目錄,這個root目錄的root和管理者root意思不同,root也就是根目錄的意思,通常在根目錄下有非常多東西,包含很多的設定檔、函式庫,東西越多越有可能被抓到系統上的漏洞,使用者也可以查看很多系統上的設定檔,若不想讓使用者看到那麼多的東西,最好的做法就是把他鎖起來!

把使用者鎖起來就是chroot?雖然說這樣表達不完全正確,但是基本上也可以說就是這個意思,像是ftp連線進去時就是被限制的,你只能看到自己家目錄東西,若能讓你看到系統內其他東西的話就很不安全了!而我今天要介紹的使用者ssh登入系統的chroot環境,主要就是另外再打造一個root環境提供給使用者,使用者能使用什麼command都是受控制的,只要給足夠用的函式庫就夠了,更不用說使用者能看到什麼系統的設定檔囉!

先來簡單看看我所設定的環境吧!

csliu /
$ ls
bin  dev  etc  home  lib  proc  usr
#基本的目錄就這麼幾個

wawa /lib
$ ls
ld-linux.so.2  libattr.so.1  libdl.so.2          libnss_files.so.2  librt.so.1       libsepol.so.1
libacl.so.1    libc.so.6     libnss_compat.so.2  libpthread.so.0    libselinux.so.1  libtermcap.so.2
#所有library就這些

wawa /bin
$ ls
bash  cp  group  id  ls  mkdir  mv  rm  rmdir  sh
#提供使用的command就幾個而已,可以自行增加

wawa /etc
$ ls
group  passwd  profile
#/etc下的檔案不過也三個

wawa /etc
$ cat passwd
-bash: cat: command not found
#沒有可以查看的指令

基本上我設定環境應該算夠簡單了,基本上只能登入系統完全不能做什麼,只能做簡單的檔案管理,若需要文字編輯的功能有需求再加就好囉~我把chroot的環境建造寫成了一個簡易的script,需要的人可以參考看看唷!基本上寫得真的很簡單,不要笑我啊!也沒有很多的錯誤判斷機制,我執行很多次都還頗正常的!

#/bin/bash
#開始建立資料夾,請先設定chroot的路徑
chroot_path="/home/chroot"
echo "chroot開始設定,預設路徑/home/chroot" &&
dirlist="$chroot_path $chroot_path/dev $chroot_path/bin $chroot_path/home $chroot_path/lib $chroot_path/etc $chroot_path/usr/lib $chroot_path/usr/bin $chroot_path/proc $chroot_path/dev/pts"
for dir in $dirlist
do
mkdir -p $dir && echo "$dir 資料夾已經建立"
done

#若有需要其他指令讓使用者使用,在下列加入,會自動複製指令與需要的函式庫到chroot環境
cmdlist="/bin/bash /bin/ls /bin/cp /bin/mkdir /bin/mv /bin/rm /bin/rmdir"
#函式庫判斷1
lib_1=`ldd $cmdlist

awk '{ print $1 }'

grep "/lib"

sort

uniq`
#函式庫判斷2
lib_2=`ldd $cmdlist

awk '{ print $3 }'

grep "/lib"

sort

uniq`
#開始複製執行檔
for i in $cmdlist
do
    cp -a $i $chroot_path/bin/ && echo "$i 指令複製完成"
done
#開始複製函式庫1
for j in $lib_1
do
cp -f $j $chroot_path/lib/ && echo "$j 函式庫複製完成"
done
#開始複製函式庫2
for k in $lib_2
do
cp -f $k $chroot_path/lib/ && echo "$k 函式庫複製完成"
done

#其餘設定,一些必要的設定
echo "開始其餘設定"
cd $chroot_path/bin &&
ln -s bash sh &&
#/dev/null和/dev/zero不能用複製的
cd $chroot_path/dev && mknod zero c 13 12 && mknod null c 13 12 && mknod ptmx c 5 2 &&
cp -f /etc/passwd /home/chroot/etc/ &&
cp -f /etc/group /home/chroot/etc/ &&
cp -f /usr/bin/groups $chroot_path/bin/group &&
cp -f /usr/bin/id $chroot_path/bin/id &&
cp "/lib/libnss_files.so.2" $chroot_path/lib &&
cp "/lib/libnss_compat.so.2" $chroot_path/lib &&
#下面兩筆要有才有辦法遠端ssh登入
mount proc $chroot_path/proc -t proc &&
mount devpts $chroot_path/dev/pts -t devpts &&
#簡單的環境變數PS1 & Color tty
echo "簡單的環境變數PS1 & Color tty"
echo "export PS1=\"\n\033[0;36m\u\033[0m \033[1;34m\w\033[0m\n$ \"" > $chroot_path/etc/profile &&
echo "alias ls='ls --color=tty'" >> $chroot_path/etc/profile &&
echo "設定完成"

我使用的環境CentOS5的版本,我想Redhat和Fedora應該也可以正常執行才是,若有問題再發問囉!建置完成chroot的環境後,就要開始設定登入chroot的環境!

# vi /etc/security/chroot.conf
將使用者加入chroot的設定內,以我的例子來說chroot的環境在/home/chroot,新增如下:
wawa            /home/chroot

# vi /etc/pam.d/ssh
新增黃色字體的那筆資料(session optional pam_chroot.so)
#%PAM-1.0
auth       include      system-auth
account    required     pam_nologin.so
account    include      system-auth
password   include      system-auth
session    optional     pam_keyinit.so force revoke
session    include      system-auth
session    optional     pam_chroot.so
session    required     pam_loginuid.so

若要su成使用者就可以測試,請新增一筆設定到/etc/pam.d/su
# cat >> /etc/pam.d/su
session         optional        pam_chroot.so

若要終端機登入也在chroot的環境內,請新增一筆設定到/etc/pam.d/login
# cat >> /etc/pam.d/login
session         optional        pam_chroot.so


# grep wawa /etc/passwd
wawa:x:1382:1382::/home/wawa:/bin/bash
使用者的passwd檔不用任何的變更,但是需要移動使用者的目錄
# mv /home/wawa /home/chroot/home

設定完成之後應該就大功告成囉!可以利用su或是ssh用使用者登入看看,看看是否有成功的登入chroot的環境呢?之後若有新增使用者,也請記得更改/etc/security/chroot.conf以及將家目錄搬到chroot的環境下,而/etc/passwd裡的家目錄路徑是以chroot後的環境為主唷!

補充:在實作使用者的環境之前,我們可以利用管理者測試chroot的環境
# whoami
root
移動到chroot的環境下,chroot到該目錄實際測試
# cd /home/chroot
# chroot . /bin/bash
bash-3.2# ls /
bin  dev  etc  home  lib  proc    usr

簡單的設定Linux Chroot環境

簡單的設定Linux Chroot環境 相關文章

糟糕!怎麼會沒有~會努力加油的!

參考內容推薦

Chentung's Blog

Ubuntu 簡單的 Shell 環境變數設定 看完書才知道 Shell 的博大精深與變幻莫測阿,這邊只是一個小小設定的紀錄,更多的詳細用法是無法在一篇文章內說完的,去買書吧XD&quot; PS1=&#39;${debian_<b>chroot</b>:+($debian_<b>chroot</b>)}&#92;u@&#92;h:&#92;w&#92;$ &#39; # Ubuntu Linux ...

玩玩 ssh + chroot 簡易環境架設 @ 聯成電腦--在成長的路上彼此相伴 :: 痞客邦 PIXNET :

chroot 呼叫要傳入該目錄的實際環境設定: 這個部分簡單來說也就是要部屬一個子目錄環境,該目錄環境與系統原本 / ... Jan 3 16:00:41 linux sshd[18764]: pam_chroot(sshd:session): chroot(/home/chroot) succeeded

鳥哥的Linux 私房菜-

跳到 針對實體帳號的設定 - 舉例來說,限制使用者無法離開家目錄(chroot)、限制下載速率、限制使用者上傳檔案時的權限(mask) 等等。 底下我們先 ... 與伺服器環境有關的設定 use_localtime=YES ... 上面是最簡單的實體帳號相關設定。那如果&nbsp;...

ubuntu vsftpd 安裝筆記 « lemonup&#39;s Blog

安裝與設定 安裝 簡單 的指令即可安裝完成。 sudo apt-get update sudo apt-get install vsftpd libpam-pwdfile ... 用預設的20 port listen_port=123 #設定port idle_session_timeout=600 #設定閒置時間 local_enable=YES #使用linux帳戶登入 chroot_local_user=YES ...

簡單的設定Linux Chroot環境

Linux是一個多人多工的作業系統,越來越多的企業開始嘗試使用Linux作業系統,很多人學習...

讓Linux使用者登入在chroot底下

之前只會把application關在chroot底下 但是卻不知道怎麼把使用者關住 實際了解之後才發現要把使用者關住 並不是跟application一樣設定就可以了 雖然是類似但是卻多了很多東西要設定 還是記錄一下比較安全,不然我應該很快就忘了…

鳥哥的 Linux 私房菜 -

如果您很懶的去設定 vsftpd 的話,那麼可以使用很簡單的設定值來規劃您的 FTP 伺服器。底下就是 Red Hat 9 的預設 vsftpd 的設定值,您可以使用這樣的設定值來啟動您的 FTP ...

轉貼:簡單的設定Linux Chroot環境

2011年1月26日 - 轉貼:簡單的設定Linux Chroot環境. 2011年1月26日星期三. 綠色工廠文章: ... http://portable.easylife.tw/1820 &middot; openssh設定chroot使用者環境

鳥哥的 Linux 私房菜 -

雖然我們具有 chroot 的環境,不過由於 CentOS 6.x 已經透過啟動腳本幫我們進行檔案與目錄的掛載連結,所以請你直接修改 /etc ... 包括 -t chroot_dir 是設定 chroot 目錄的位置, 而設定檔 (configuration) 則是 /etc/named.conf,最重要的是你的所有的 zone (hint ...

Knoppix 雜記

chroot: 換個環境工作 一點簡單的 debian 套件管理指令: (1), (2); 摩托學園 是一個很棒的 debian 討論區。 這些動作與 knoppix 本身無關, 可以先在完整版的 linux 底下分開練習, 不必一口氣完成, 比較不吃力。 每一個簡單的實驗/動作的功用都確實理解了嗎? 接 ...