0

[CHROOT] vsftpd CHROOTを設定しFTPクライアントからFTP接続後のルート・ディレクトリを変更する方法からFTP界隈の解像度をあげてみよう。

CentOS(6.7)で起動しているFTPサーバはvsftpd 前提での説明となります。
# 他のFTPサービスでも概念としては同様なので、ご参考いただければとおもいます。
# FTPコマンドの使い方も評判が良いので追記しました。

#ローカルmacbook pro
{{{ (-.-; )y local ~ }}}$ ftp
ftp> open
(to) hachim.jp
Connected to hachim.jp.
220 (vsFTPd 2.2.2)
Name (hachim.jp:updeepdj): hachim
331 Please specify the password.
Password:
230 Login successful.
Remote system type is UNIX.
Using binary mode to transfer files.
ftp>
ftp> pwd
Remote directory: /home/hachim
ftp> ls
229 Entering Extended Passive Mode (|||64159|).
150 Here comes the directory listing.
-rwxrwxrwx    1 500      500      97478144 Apr 23 06:30 hachim.cpio
lrwxrwxrwx    1 500      500            13 Apr 10 03:46 html -> /var/www/html
lrwxrwxrwx    1 500      500            43 Apr 04 09:20 kernel -> /usr/src/kernels/2.6.32-573.22.1.el6.x86_64
-rw-rw-r--    1 500      500           246 Apr 05 14:25 mail.tar.gz
lrwxrwxrwx    1 500      500            39 Apr 10 04:06 modules -> /lib/modules/2.6.32-573.22.1.el6.x86_64
lrwxrwxrwx    1 500      500            16 Mar 26 09:25 scripts -> /var/tmp/scripts
drwxrwxr-x    2 500      500          4096 Apr 23 09:17 seikihyougen
-rw-rw-r--    1 500      500            45 May 17 01:05 sh.tgz
-rw-rw-r--    1 500      500         51200 May 17 01:03 sh_cvf.tar
-rwxrw-r--    1 500      500           275 Mar 12 08:36 test.sh
-rw-rw-r--    1 500      500        409600 Apr 04 13:16 test.tar
drwxrwxr-x    4 500      500          4096 Mar 20 15:08 testdir
drwxrwxr-x    2 500      500          4096 Apr 11 09:09 tools
226 Directory send OK.
ftp>
ftp>
ftp>
ftp>
ftp> cd /
250 Directory successfully changed.
ftp> pwd
Remote directory: /
ftp>
ftp>
ftp> ls
229 Entering Extended Passive Mode (|||15501|).
150 Here comes the directory listing.			←!!! システムルート に移動できてしまってる・・・
-rw-------    1 0        0            7168 Feb 01 07:15 aquota.user
dr-xr-xr-x    2 0        0            4096 May 04 18:41 bin
dr-xr-xr-x    5 0        0            3072 May 04 14:06 boot
drwxr-xr-x   17 0        0            3360 Apr 10 05:09 dev
drwxr-xr-x  106 0        0           12288 May 22 04:19 etc
drwxr-xr-x    3 0        0            4096 Sep 27  2015 export
drwxr-xr-x    6 0        0            4096 Feb 02 05:51 home
                ・
                ・
                ・
drwxrwxrwt    3 0        0            4096 May 22 04:25 tmp
drwxr-xr-x   13 0        0            4096 Nov 26  2014 usr
drwxr-xr-x   22 0        0            4096 May 07 05:11 var
226 Directory send OK.

ローカルのmacbook proから本サイトが配置されているサーバ(hachim.jp)へFTP接続した時に、
CHROOTが無効であった。。
フルアクセスできる状態だったので、
監獄(CHROOT)実行したので、その時の備忘録です。

# configバックアップ
# cp -a /etc/vsftpd/vsftpd.conf /etc/vsftpd/vsftpd.conf.`date +%Y%m%d-%H%M%S`
# vi /etc/vsftpd/vsftpd.conf
- - - 
chroot_local_user=YES
chroot_list_file=/etc/vsftpd/chroot_list
- - - 

上記設後、保存してください。
diff
差分は上の図のとおり、該当2箇所のコメントアウトを外しただけです。。

# chroot_listファイルを権限600で作成し、ユーザhachimを追加する
# touch chroot_list
# chmod 600 chroot_list
# vi chroot_list
- - - 
#ここにCHROOT牢獄に閉じ込めたいユーザを追加、今回はhachim.jp に hachimユーザでFTP接続する場合とするので、下記の通りとします。
#複数ユーザを追加していく場合は、1ユーザ1行で追記していくだけです。
hachim
- - - 
# /etc/init.d/vsftpd stop
# /etc/init.d/vsftpd start

# exit
$ exit

ローカルmacbook proからhachim.jpへFTP接続

{{{ (-.-; )y local ~ }}}$ ftp hachim.jp
Connected to hachim.jp.
220 (vsFTPd 2.2.2)
Name (hachim.jp:updeepdj): hachim
331 Please specify the password.
Password:
230 Login successful.
Remote system type is UNIX.
Using binary mode to transfer files.
ftp>
ftp>
ftp> pwd
Remote directory: /		
ftp>
ftp>
ftp> ls				
229 Entering Extended Passive Mode (|||61019|).
150 Here comes the directory listing.					
# ルート・ディレクトリが hachimユーザのホームディレクトリになっている。CHROOT OK!!!
-rwxrwxrwx    1 500      500      97478144 Apr 23 06:30 hachim.cpio
lrwxrwxrwx    1 500      500            13 Apr 10 03:46 html -> /var/www/html
lrwxrwxrwx    1 500      500            43 Apr 04 09:20 kernel -> /usr/src/kernels/2.6.32-573.22.1.el6.x86_64
-rw-rw-r--    1 500      500           246 Apr 05 14:25 mail.tar.gz
lrwxrwxrwx    1 500      500            39 Apr 10 04:06 modules -> /lib/modules/2.6.32-573.22.1.el6.x86_64
lrwxrwxrwx    1 500      500            16 Mar 26 09:25 scripts -> /var/tmp/scripts
drwxrwxr-x    2 500      500          4096 Apr 23 09:17 seikihyougen
-rw-rw-r--    1 500      500            45 May 17 01:05 sh.tgz
-rw-rw-r--    1 500      500         51200 May 17 01:03 sh_cvf.tar
-rwxrw-r--    1 500      500           275 Mar 12 08:36 test.sh
-rw-rw-r--    1 500      500        409600 Apr 04 13:16 test.tar
drwxrwxr-x    4 500      500          4096 Mar 20 15:08 testdir
drwxrwxr-x    2 500      500          4096 Apr 11 09:09 tools
226 Directory send OK.
ftp>
ftp>
ftp>
# 念の為、/ に移動し ls してみる
ftp> cd /	
250 Directory successfully changed.
ftp>
ftp>
ftp> ls
229 Entering Extended Passive Mode (|||21378|).
150 Here comes the directory listing.
# ← CHROOT適用されているルート・ディレクトリだとわかる。
-rw-rw-r--    1 500      500             0 Mar 12 09:02 A-AX_NWconfget_ko.sh				
-rwxrwxrwx    1 500      500      97478144 Apr 23 06:30 hachim.cpio
lrwxrwxrwx    1 500      500            13 Apr 10 03:46 html -> /var/www/html
lrwxrwxrwx    1 500      500            43 Apr 04 09:20 kernel -> /usr/src/kernels/2.6.32-573.22.1.el6.x86_64
-rw-rw-r--    1 500      500           246 Apr 05 14:25 mail.tar.gz
lrwxrwxrwx    1 500      500            39 Apr 10 04:06 modules -> /lib/modules/2.6.32-573.22.1.el6.x86_64
lrwxrwxrwx    1 500      500            16 Mar 26 09:25 scripts -> /var/tmp/scripts
drwxrwxr-x    2 500      500          4096 Apr 23 09:17 seikihyougen
-rw-rw-r--    1 500      500            45 May 17 01:05 sh.tgz
-rw-rw-r--    1 500      500         51200 May 17 01:03 sh_cvf.tar
-rwxrw-r--    1 500      500           275 Mar 12 08:36 test.sh
-rw-rw-r--    1 500      500        409600 Apr 04 13:16 test.tar
drwxrwxr-x    4 500      500          4096 Mar 20 15:08 testdir
drwxrwxr-x    2 500      500          4096 Apr 11 09:09 tools

FTP 転送モードは2つ

アスキーモード

バイナリーモード

“アスキーモード”と”バイナリーモード”では、改行コードの処理の仕方が違います。
改行コードには
・UNIX系のOSで主に利用されている”ラインフィード(LF)”
・MacOS(バージョン9まで)などで利用されている”キャリッジリターン(CR、復帰)”
・Windowsなどで主に利用されている”CR+LF”
の3種類があり、システムによって利用される改行コードが異なります。

同じ文字コード(UTF-8やShift-JIS)を使用していたとしても、
改行コードは異なる場合があるため、
異なるシステム間でのデータのやりとりをする際には注意する必要がある。

FTPでは、転送モードに”アスキーモード”を利用すれば、異なるシステム間の改行コードを自動的に相互変換してくれます。
一方、”バイナリーモード”では改行コードの変換を行わずにファイルを転送します。

HTMLやCSSなどのファイルやPHPやCGIなどのスクリプトファイルなどのテキストベースで扱われたり実行されたりするファイルに関しては”アスキーモード”、
.gif/.jpeg/.pngなどの画像や拡張子が.zipなどの圧縮ファイルは”バイナリーモード”

# 現在の転送モード確認
ftp> type  
Using binary mode to transfer files.
ftp>
# アスキーモードに変更
ftp> asc
200 Switching to ASCII mode.
ftp>
ftp>
ftp> type
Using ascii mode to transfer files.
ftp>
ftp>
# バイナリーモードに変更
ftp> bin
200 Switching to Binary mode.
ftp>
ftp>
ftp> type
Using binary mode to transfer files.

ディレクトリ操作

ftp> pwd
Remote directory: /
ftp>
ftp>
# FTP接続した時のローカル側のディレクトリの場所を確認 → lpwd
ftp> lpwd
Local directory: /Users/updeepdj
ftp>
ftp>
# ローカル側のディレクトリを移動 → lcd
ftp> lcd /Users/updeepdj/Desktop/
Local directory now: /Users/updeepdj/Desktop
ftp>
# ローカルの接続元ディレクトリ配下をls → !ls
ftp> !ls -lrt | tail
-rw-r--r--@  1 updeepdj unit     335096  4 24 01:12 hachim.pdf
drwxr-xr-x   4 updeepdj unit        136  4 25 00:33 hachim
drwxr-xr-x   4 updeepdj unit        136  4 25 00:33 hachim_a
-rw-r--r--   1 updeepdj unit    2709766  4 25 00:43 hachim.zip
-rw-------@  1 updeepdj unit    6439209  5  8 14:05 hachim_a.pdf
-rw-r--r--@  1 updeepdj unit      58880  5  9 00:42 hachim.xls
drwxr-xr-x   3 updeepdj unit        102  5 10 14:48 hachim_b
drwxr-xr-x   6 updeepdj unit        204  5 15 17:32 hachim_c
-rw-r-----@  1 updeepdj unit   70273984  5 17 02:43 hachim.mp3
-rw-r--r--@  1 updeepdj unit     213197  5 22 13:56 hachim.png
ftp>
ftp>
#複数画像ファイルを転送
# binaryモードにスイッチ
ftp> bin
200 Switching to Binary mode.
#複数画像ファイルを転送 → mput
# y:転送する
# n:転送しない
ftp> mput *.jpg
mput 2.jpg [anpqy?]? y
229 Entering Extended Passive Mode (|||28537|).
150 Ok to send data.
100% |******************************************************************************************************************************************************************|   217 KiB    1.95 MiB/s    00:00 ETA
226 Transfer complete.
222526 bytes sent in 00:00 (1.24 MiB/s)
mput a.jpg [anpqy?]? y
229 Entering Extended Passive Mode (|||22068|).
150 Ok to send data.
100% |******************************************************************************************************************************************************************|   214 KiB    1.16 MiB/s    00:00 ETA
226 Transfer complete.
219290 bytes sent in 00:00 (853.42 KiB/s)
mput b.jpg [anpqy?]? y
229 Entering Extended Passive Mode (|||36072|).
150 Ok to send data.
100% |******************************************************************************************************************************************************************|   300 KiB    2.06 MiB/s    00:00 ETA
226 Transfer complete.
308098 bytes sent in 00:00 (1.50 MiB/s)
mput c.jpg [anpqy?]? y
229 Entering Extended Passive Mode (|||8393|).
150 Ok to send data.
100% |******************************************************************************************************************************************************************|   345 KiB    2.09 MiB/s    00:00 ETA
226 Transfer complete.
353451 bytes sent in 00:00 (1.58 MiB/s)
mput d.jpg [anpqy?]? y
229 Entering Extended Passive Mode (|||29667|).
150 Ok to send data.
100% |******************************************************************************************************************************************************************| 59163       67.57 MiB/s    00:00 ETA
226 Transfer complete.
59163 bytes sent in 00:00 (548.47 KiB/s)
mput a.jpg [anpqy?]? n
mput b.jpg [anpqy?]? n
mput c.jpg [anpqy?]? n
mput d.jpg [anpqy?]? n
ftp>
ftp> ls
229 Entering Extended Passive Mode (|||15325|).
150 Here comes the directory listing.
-rw-r--r--    1 500      500        222526 May 22 06:08 a.jpg
-rw-r--r--    1 500      500        219290 May 22 06:08 b.jpg
-rw-r--r--    1 500      500        308098 May 22 06:08 c.jpg
-rw-r--r--    1 500      500        353451 May 22 06:08 d.jpg
226 Directory send OK.
ftp> get test.tar
local: test.tar remote: test.tar
229 Entering Extended Passive Mode (|||62103|).
150 Opening BINARY mode data connection for test.tar (409600 bytes).
100% |******************************************************************************************************************************************************************|   400 KiB  823.23 KiB/s    00:00 ETA
226 Transfer complete.
409600 bytes received in 00:00 (801.62 KiB/s)
ftp>
ftp> !ls | grep test.tar
-rw-r--r--   1 updeepdj  staff     409600  4  4 22:16 test.tar
ftp>
# 複数ファイルをローカルへゲット(lpwdへダウンロードされます)
# ダウンロードファイルをインタラクティブに聞かれるのを無効にする
ftp> prompt
Interactive mode off.
#mget で複数ファイルゲット
ftp> mget test*
local: test.sh remote: test.sh
229 Entering Extended Passive Mode (|||40567|).
150 Opening BINARY mode data connection for test.sh (275 bytes).
100% |******************************************************************************************************************************************************************|   275      144.15 KiB/s    00:00 ETA
226 Transfer complete.
275 bytes received in 00:00 (17.67 KiB/s)
local: test.tar remote: test.tar
229 Entering Extended Passive Mode (|||52003|).
150 Opening BINARY mode data connection for test.tar (409600 bytes).
100% |******************************************************************************************************************************************************************|   400 KiB  780.32 KiB/s    00:00 ETA
226 Transfer complete.
409600 bytes received in 00:00 (743.29 KiB/s)
local: testdir remote: testdir
229 Entering Extended Passive Mode (|||61392|).
550 Failed to open file. #ディレクトリなので失敗。この場合はzip圧縮などで対応しましょう。 
local: testdir.tgz remote: testdir.tgz
229 Entering Extended Passive Mode (|||38748|).
150 Opening BINARY mode data connection for testdir.tgz (101839 bytes).
100% |******************************************************************************************************************************************************************|    99 KiB    1.68 MiB/s    00:00 ETA
226 Transfer complete.
101839 bytes received in 00:00 (1.33 MiB/s)

以上です。

コメントを残す

メールアドレスが公開されることはありません。 * が付いている欄は必須項目です