!!!OpenBSD ファイル転送サーバ (ftpd on OpenBSD 7.7) {{category OpenBSD,nolink}}OpenBSDのサーバ ftpd の設定。対象は、OpenBSD 7.7 ARMv7 on BBB。 * 関連 man → [ftpd(8)|https://man.openbsd.org/ftpd.8], [login(1)|https://man.openbsd.org/login.1] !!! ftpd の起動設定 !!自動起動 サーバが起動したときに ftpd も実行されるように、'''/etc/rc.conf.local''' に '''ftpd_flags''' を指定する。 # Internet File Transfer Protocol server ftpd_flags= または、'''rcctl enable ftpd''' で有効にし、 '''rcctl set ftpd flags -l''' でフラグをセットする( '''/etc/rc.conf.local''' に '''ftpd_flags=-l''' が記載される)。 この時、anonymous FTP を無効にするには、''-n'' オプションを付ける。逆に anonymous FTP のみとする場合は、''-A'' オプションを付ける。 また、ftp のログを取るには、ftpd に ''-l'' オプションを指定する。''-l'' の場合は、FTPのセッションを成功・失敗問わず記録する。''-ll'' とした場合は、さらに操作(get, putなど)とその引数も記録する。 !!! ftpd の設定 !! Welcome メッセージ ftp でアクセスしたとき(認証前)、ログインしたとき、特定のディレクトリに移動したときにそれぞれメッセージを返せる。 '''/etc/nologin''' があると、その内容を表示して、終了される。 '''/etc/ftpwelcome''' があると、ftp でアクセスしたときにメッセージが返る。 ftp でログインが成功すると '''/etc/motd''' が返される(デフォルトの設定、login.conf で指定)。 '''.message''' ファイルがディレクトリあると、そのディレクトリに入るときにメッセージが返る。 !! 接続の拒否リスト '''/etc/ftpusers''' に列挙されているユーザは、FTP 接続が拒否される。 また、起動オプション '''-m''' ''minuid'' で指定された値(デフォルト 1000)未満のユーザ(OpenBSD 5.6 以降)、標準シェル(/etc/shells の定義)になっていないユーザは、このリストに関係なく拒否される。 bbb# cat /etc/ftpusers # $OpenBSD: ftpusers,v 1.50 2014/03/17 21:01:02 sthen Exp $ # # list of users disallowed any ftp access. # read by ftpd(8). # by default, uids below 1000 are not permitted; see ftpd's -m option. nobody !! chroot '''/etc/ftpchroot''' に列挙されているユーザは、chroot によってルートがホームディレクトリに変更される。 また、anonymous FTP のユーザ( ftp または anonymous )は、~ftp/ に chroot される。 chroot されると、パスワードファイル(/etc/passwd 正しくは、pwd.db)やグループファイル(/etc/group)などがないため、ユーザー名などが表示されない。必要に応じて、適切なファイルを作成する。 ------------------ !!! anonymous FTP 不特定多数に配布するためなどに利用される匿名のFTPサービス。 アノニマスFTPを利用するには '''ftp''' というユーザアカウントを用意する。 そして、ftp ユーザのホームディレクトリに chroot され、そのユーザ権限で読み書きが行われる。 !!ftp ユーザの作成 今回は、ホームディレクトリは '''/var/ftp''' 、グループは users 、ログイン不可 で作成する。 bbb# useradd -b /var -s /sbin/nologin -g users -c "anonymous ftp" ftp useradd: Warning: home directory `/var/ftp' doesn't exist, and -m was not specified !!アノニマスFTPのディレクトリ作成 ftp ユーザのホームディレクトリ /var/ftp 、配下に、ユーザ・グループファイルを置く etc と 慣例的に pub を作成する。 bbb# mkdir -p /var/ftp/{pub,etc} bbb# chown -R root:wheel /var/ftp bbb# ls -l /var/ftp total 8 drwxr-xr-x 2 root wheel 512 Feb 26 20:45 etc drwxr-xr-x 2 root wheel 512 Feb 26 20:45 pub !!passwd と group 作成 ls コマンドで表示するさいに番号でなく、ユーザ名・グループ名で表示されるように passwd (pwd.db) と group を作成する。 bbb# grep /etc/group -e "^wheel" -e "^users" > /var/ftp/etc/group bbb# grep /etc/master.passwd -e "^root" -e "^ftp" > /var/ftp/etc/master.passwd bbb# pwd_mkdb -d /var/ftp/etc /var/ftp/etc/master.passwd bbb# bbb# ls -l /var/ftp/etc total 172 -rw-r--r-- 1 root wheel 35 Feb 26 20:52 group -rw------- 1 root wheel 162 Feb 26 20:52 master.passwd -rw-r--r-- 1 root wheel 40960 Feb 26 20:52 pwd.db -rw-r----- 1 root _shadow 40960 Feb 26 20:52 spwd.db bbb# rm /var/ftp/etc/master.passwd /var/ftp/etc/spwd.db bbb# ls -l /var/ftp/etc total 84 -rw-r--r-- 1 root wheel 35 Feb 26 20:52 group -rw-r--r-- 1 root wheel 40960 Feb 26 20:52 pwd.db bbb# !!確認 ※ftpwelcome とホーム直下に .message を作成している。 bbb# ftp localhost Trying 127.0.0.1... Connected to localhost. 220- 220- ,'', ,', ,', 220- ; ; ; ; ; ; 220- ; ; ; ; ; ; ,'',,'', ,'', ,'',,'', ,'',,'', ,'',,'',,'', ,'',,'', 220- ; ; ; ; ; ; ; ;',,' ; ; ; ;',,' ; ;; ; ; ;', ;', ; ; ;',,' 220- ; ; ; ; ; ; ; ;',,' ; ; ; ; ; ;; ; ; ; ; ; ; ; ; ;',,' 220- ; ;,' ;,' ; ; ; ,, ; ;,'', ; ;,'', ; ;; ; ; ; ; ; ; ; ; ; ,, 220- ',,'',,'',,' ',,'',,' ',,'',,' ',,'',,' ',,'',,' ',,' ',' ',' ',,'',,' 220- 220 bbb.intranet FTP server ready. Name (localhost:bbb): anonymous 331 Guest login ok, send your email address as password. Password: 230 Guest login ok, access restrictions apply. Remote system type is UNIX. Using binary mode to transfer files. ftp> cd / 250- 250- **** Public ftp Service **** 250- 250- Welcome to Public ftp Service. 250- 250 CWD command successful. ftp> bye 221 Goodbye. bbb#