SSH 限制用戶訪問指定目錄指令

以下指令都是以 root 身分執行,其他用戶請加上 sudo

在Linux 設定用戶,並且開放 ssh 連線後,有時為了系統安全,需限制用戶僅能訪問指定目錄及指令

可以透過 chrooted 來進行設定

假設目前希望 test5 用戶只能訪問 /var/www/html

建立用戶

useradd test5
passwd test5

建立監獄範圍

mkdir -p /var/www/html/test

設定 sshd_config

開啟 sshd_config

vim /etc/ssh/sshd_config

接著設定

ChrootDirectory /var/www/html/test
Match User test5

重啟 ssh

service sshd restart

設定 chroot 監獄權限

chroot 限制資料範圍的權限必須為 root 所有

chown root:root /var/www/html/test
chmod 0755 /var/www/html/test
ls -ld /var/www/html/test

設置 Shell

在監獄中設置 bin 資料夾

mkdir /var/www/html/test/bin

將 bash 複製到其中

cp -v /bin/bash /var/www/html/test/bin

建立共用庫

建立 lib64並且複製 bash 所需要的共用庫至其中

ldd /bin/bash
mkdir -p /var/www/html/test/lib64
cp -v /lib64/{libtinfo.so.5,libdl.so.2,libc.so.6,ld-linux-x86-64.so.2} /var/www/html/test/lib64/

擴充外部指令

上述製作完畢,用戶僅可使用基本的 history, echo, pwd 等指令 若需要 ls, date, mkdir 等外部指令,則可以逐步提供授權

cp -v /bin/ls /var/www/html/test/bin/
cp -v /bin/date /var/www/html/test/bin/
cp -v /bin/mkdir /var/www/html/test/bin/

接著同樣要將對應的共用庫複製到監獄中

ldd /bin/ls

cp -v /lib64/{libselinux.so.1,libcap.so.2,libacl.so.1,libc.so.6,libpcre.so.1,libdl.so.2,ld-linux-x86-64.so.2,libattr.so.1,libpthread.so.0} /var/www/html/test/lib64/

ldd /bin/date

ldd /bin/mkdir

建立配置

建立 etc 並且將指定的配置複製到其中

mkdir /var/www/html/test/etc
cp -vf /etc/{passwd,group} /var/www/html/test/etc/

(後續有新增SSH用戶都需再執行一次複製動作)

建立用戶專屬資料夾

mkdir -p /var/www/html/test/user_test5
chown -R test5:test5 /var/www/html/test/user_test5
chmod -R 0700 /var/www/html/test/user_test5

參考: Restrict SSH User Access to Certain Directory Using Chrooted Jail