chroot user

时间:2007-09-19 18:24:46   来源:  作者:  点击:次  出处:技术无忧
关键字:freebsd chroot

在系統中,chroot user 算是滿重要的議題。不過由於生性太懶,向來都直接把 shell 給定 /usr/bin/passwd。一來可以改密碼,二來 user 也不用想進系統 XD

昨天查了一下有關 chroot user 的資料,找了個最容易達成的 solution,ssh login 或 sftp (ftp 的話大部分的 ftpd 都內建支援 chroot 所以不用去煩惱) 都可以限制在 $HOME 目錄底下 (或任何你高興的地方)。

這個解法用到 /usr/ports/sysutils/jailuser。該軟體主要是提供一些 perl script 幫忙建立 chroot 的環境,還有一支 chroot shell。所以使用上是將原有 account 的 shell 改成 jailuser 的 chroot shell,login 進 chroot 的環境目錄。


安裝

# cd /usr/ports/sysutils/jailuser && make install clean

/usr/local/bin/jailuser (chroot shell)
/usr/local/bin/mkjailenv (建立 chroot 基本環境)
/usr/local/bin/addjailsw (新增自己想要的指令進 chroot dir)
/usr/local/bin/addjailuser (新增使用者進 chroot 的 passwd)
/usr/local/etc/jail.conf.sample (jailuser 設定檔)
/usr/local/share/doc/jailuser/ (jailuser 使用文件)
# cp /usr/local/etc/jail.conf.sample /usr/local/etc/jail.conf

*修改 /etc/shells 最後一行,安裝後自動加進去的 shell 檔名給錯了,改成 /usr/local/bin/jailuser

設定
0) 新增使用者,或更改已存在的使用者資料 (以 heath 為例)。$SHELL 指定 /usr/local/bin/jailuser,$HOME 指定 /home/heath/chroot

# pw usermod heath -d /home/heath/chroot -s /usr/local/bin/jailuser

*在 FreeBSD 下 adduser 時指定 $HOME 是 /home/heath/chroot 會無法建立,記得手動建一下

1) 在其 $HOME 底下建一個要 chroot 的目錄 (ex: /home/heath/chroot),並用 mkjailenv 幫我們建好 chroot 的基本環境。

# mkdir -p /home/heath/chroot
# chown root:wheel /home/heath/chroot
# /usr/local/bin/mkjailenv /home/heath/chroot

2) 使用 addjailsw 幫我們複製一些必要的指令和 lib 之類的進 /home/heath/chroot 裡

# /usr/local/bin/addjailsw /home/heath/chroot

如果有什麼軟體是需要的但沒被複製進來,可以下 -P 自己加。

# /usr/local/bin/addjailsw /home/heath/chroot -P bash

3) 將使用者加進 chroot 環境中的 master.passwd 中,語法如下:
# /usr/local/bin/addjailuser chroot目錄 帳號在chroot中的$HOME 帳號在chroot中的shell 帳號

# /usr/local/bin/addjailuser /home/heath/chroot /home/heath /usr/local/bin/bash heath

到此為止,應該可以看到 /home/heath/chroot/etc/master.passwd 裡面有 heath 這筆 account 被加進來。

迫不急待的開了一個新 session login,BINGO,被關住了!cd 到頂層 / 是系統的 /home/heath/chroot,習慣性地下 ls 指令卻出現:ELF interpreter /libexec/ld-elf.so.1 not found。缺少 /libexec/ld-elf.so.1 這個檔案,那就手動複製一下給他吧。

# mkdir -p /home/heath/chroot/libexec && cp /libexec/ld-elf.so.1 /home/heath/chroot/libexec/

保險起見,把所有 binary 可能用到的 library 都檢查並複製一份。

# cd /home/heath/chroot
# cp `ldd bin/* sbin/* usr/local/bin/* usr/local/sbin/* | awk ‘{print $3}’` lib

ps. 可以先建立一個完整的 chroot 目錄環境後,批次複製給每個帳號,省卻每個帳號都要重複做一次 chroot 環境目錄的麻煩。
ps2. 好像還是很麻煩,改天再寫批次處理,若有更簡單的方法請留言給我,謝謝
ps3. 印象中以前用 linux 時,可以把 user 關在自己 $HOME 底下,無法切到 /,不過找不到這種解法 >_< ,或者根本是我記錯了?


网页设计 http://www.pc51.net/www/ 提更多网页设计信息


相关文章

文章评论

共有 0 位网友发表了评论 此处只显示部分留言 点击查看完整评论页面