openssh設定chroot使用者環境

openssh設定chroot使用者環境

上次和大家介紹過【簡單的設定Linux Chroot環境】,最近我要建立另一台系統時,我打算試試看別的方式,因為我覺得去設定系統的PAM有點複雜,我自己也記不住到底需要更改哪些設定,於是就直接從openssh上著手,將sshd_config設定檔動一些手腳,就可以讓使用者連線時進入chroot環境內。(何謂chroot環境?

編輯sshd_config設定檔
# vi sshd_config

Match Group users
    ChrootDirectory /home/chroot/home
    AllowTCPForwarding no
    X11Forwarding no
    ForceCommand /usr/lib/openssh/sftp-server

Match User wawa
    ChrootDirectory /home/chroot/home
    AllowTCPForwarding yes
    X11Forwarding no
    ForceCommand /usr/lib/openssh/sftp-server

# 測試性的加入以上的設定,之後重新啟動ssh服務,若啟動時有錯誤,不認識"Match"的設定字眼,那麼請更新openssh的版本,若可以順利的啟動ssh服務,那代表版本已經支援chroot的設定。

像我自己習慣使用RedHat和CentOS,系統內建安裝的openssh都還是4.x的版本,chroot的設定還無法支援,那麼就去官方網站下載最新版本自己編譯安裝一下囉!(./configure && make && make install 就不再介紹囉!)

編譯新版本的openssh可以看到設定檔的內容有很多不同,已經可以看到預設就有chroot的設定選項
# ChrootDirectory none

# 預設是沒有設定chroot,這裡的設定也是屬於全域設定,要能設定每個user是否chroot才是我的目標,因此全域設定不是我想要的,此時就要搭配本文上方的設定檔。

如何建造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

#特別住意,若是x86_64的主機,請將lib改成lib64

#若有需要其他指令讓使用者使用,在下列加入,會自動複製指令與需要的函式庫到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 函式庫複製完成"
# cp -f $j $chroot_path/lib64/ && echo "$j 函式庫複製完成"
done
#開始複製函式庫2
for k in $lib_2
do
cp -f $k $chroot_path/lib/ && echo "$k 函式庫複製完成"
#cp -f $k $chroot_path/lib64/ && 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 &&
#cp "/lib64/libnss_files.so.2" $chroot_path/lib64 &&
#cp "/lib64/libnss_compat.so.2" $chroot_path/lib64 &&
#簡單的環境變數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 "設定完成"

chroot的設定可以之依照群組或是使用者來限定,還可以設定不同的chroot環境,以及不同的ssh設定內容,只利用sshd_config來達到有效的安全控管,而不用去動到系統內PAM的設定,我相信使用上一定是更方便的!

若是要利用chroot達到系統安全控管,若是另外編譯新版本的openssh,也請記得停止原本系統內的ssh服務。而還有要異動的就是/etc/passwd的檔案。
若原本使用者的家目錄為/home/wawa,chroot的路徑在/home/chroot,那請將使用者家目錄設定成/home/chroot/./home/wawa,使用者ssh登入後會在chroot環境內的/home/wawa,若是管理者su成使用者,家目錄的路徑才會正確。

openssh設定chroot使用者環境

openssh設定chroot使用者環境 相關文章

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

參考內容推薦

Linux – SSH & SFTP

2016年5月2日 - 我的需求如下(測試環境CentOS 6.8):. 不允許使用者透過SSH 登入到系統的Shell 進行操作( 使用者只能使用SFTP 進行檔案傳輸). 使用者登入後 ... 接下來是設定目錄權限,因為使用到chroot() 所以該目錄的擁有者必須為root 權限755 ...

ssh 設定chroot 的方法

2015年5月27日 - 建立可用指令環境 cmd.sh 3.建立使用者user.sh 4.修改/etc/ssh/sshd_config 的設定. Match User foo ChrootDirectory /var/chroot 也可以Match ...

[SFTP]SSH設定ChrootDirectory限制使用者根目錄 @ 大海男兒要出征 :: 痞客邦 PIXNET :

OpenSSH從4.8p1開始支援ChrootDirectory的功能 可以設定使用者的根目錄 就不會像以前隨便一個使用者登入後連系統根目錄都可以瀏覽 嗯 以後SFTP可以取代FTP了 也不用搞被

使用 rssh 來解決只能使用 scp/sftp 與限制權限功能 [蔡宗融個人網站]

設定 /usr/chroot 為登入後的根目錄 相關檔案如下: /usr/bin/scp /usr/libexec/openssh/sftp-server /usr/local/libexec/rssh_chroot_helper ... /usr/bin/scp /usr/chroot/usr/bin/ mkdir -p /usr/chroot/usr/libexec/openssh cp -p /usr/libexec/openssh/sftp-server /usr/chroot ...

喬伊's 學習筆記

把 SFTP使用者設定連入限制 (寫在設定檔最後面) Match user account //也可以限制group ,另外多個帳號要用逗號隔開 ChrootDirectory /var/sftp //設定登入的根目錄 ForceCommand internal-sftp 3)Chroot目錄權限設定: 參照 OpenSSH Chrootdirectory ...

openssh設定chroot使用者環境

上次和大家介紹過【簡單的設定Linux Chroot環境】,最近我要建立另一台系統時,我打算試試看別...

[SFTP]SSH設定ChrootDirectory限制使用者根目錄@ 大海男兒要出征 ...

2009年8月18日 - OpenSSH從4.8p1開始支援ChrootDirectory的功能可以設定使用者的根目錄就不會像以前隨便一個使用者登入後連系統根目錄都可以瀏覽嗯 ...

讓Linux使用者登入在chroot底下

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

The Will Will Web

當使用 WinSCP 或 FileZilla Client 使用 SFTP 協定登入 OpenSSH 伺服器時,在預設的情況下使用者可以自由的在檔案系統間遊走,當我們基於安全的理由希望透過 SFTP 登入伺服器後能透過 chroot() 的方法將使用者 關在(chroot) 特定目錄下

OpenSSH v3.8 for Windows

測試過幾個SSH Server後, 還是覺得 OpenSSH(http://openssh.com/) 方便. 壞處就是此版本並不支援 chroot, 要自己設定user 權限. 幾點要注意的: 1. Router 的 Port Forwarding 要設定好. 2. mkpasswd 的使用者來自於本機所建立的使用者.