トップ 履歴 一覧 カテゴリ ソース 検索 ヘルプ RSS ログイン

OpenBSD/ftpd

INDEX

その他:4.7(ftpd セクション参照), 6.8, 7.7

OpenBSD ファイル転送サーバ (ftpd on OpenBSD 7.7)

OpenBSDのサーバ ftpd の設定。対象は、OpenBSD 7.7 ARMv7 on BBB。

ftpd の起動設定

 自動起動

サーバが起動したときに ftpd も実行されるように、/etc/rc.conf.localftpd_flags を指定する。

# Internet File Transfer Protocol server
ftpd_flags=

または、rcctl enable ftpd で有効にし、 rcctl set ftpd flags -l の様にフラグをセットする( /etc/rc.conf.localftpd_flags=-l が記載される)。

この時、anonymous FTP を無効にするには、-n オプションを付ける。逆に anonymous FTP のみとする場合は、-A オプションを付ける。

また、ftp のログを取るには、ftpd に -l オプションを指定する。-l の場合は、FTPのセッションを成功・失敗問わず記録する。-ll とした場合は、さらに操作(get, putなど)とその引数も記録する。

ftpd の設定

  Welcome メッセージ

ftp でアクセスしたとき(認証前)、ログインしたとき、特定のディレクトリに移動したときにそれぞれメッセージを返せる。

/etc/nologin があると、その内容を表示して、終了される。

/etc/ftpwelcome があると、ftp でアクセスしたときにメッセージが返る。

anonymous 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 、ログイン不可 で作成する。-m オプションをつけるとスケルトンを元にホームディレクトリを作成するので、付けずに実行する。

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 Jul  7 22:15 etc
drwxr-xr-x  2 root  wheel  512 Jul  7 22:15 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# ls -l /var/ftp/etc
total 168
-rw-r--r--  1 root  wheel       35 Jul  7 22:18 group
-rw-------  1 root  wheel      162 Jul  7 22:18 master.passwd
-rw-r--r--  1 root  wheel    40960 Jul  7 22:18 pwd.db
-rw-r-----  1 root  _shadow  40960 Jul  7 22:18 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 Jul  7 22:18 group
-rw-r--r--  1 root  wheel  40960 Jul  7 22:18 pwd.db
bbb#

 確認

bbb# ftp localhost
Trying 127.0.0.1...
Connected to localhost..
220 bbb.local 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> pwd
257 "/" is current directory.
ftp> ls
150 Opening ASCII mode data connection for '.'.
total 8
drwxr-xr-x  2 root  wheel  512 Jul  7 22:23 etc
drwxr-xr-x  2 root  wheel  512 Jul  7 22:58 pub
226 Transfer complete.
ftp> cd pub
250-
250-      ****  Public ftp Service   ****
250-
250-    Welcome to Public ftp Service.
250-
250 CWD command successful.
ftp> ls
150 Opening ASCII mode data connection for '.'.
total 4
-rw-r--r--  1 ftp  users  74 Jul  7 22:20 .message
226 Transfer complete.
ftp> bye
221 Goodbye.
bbb#
bbb# cat /var/ftp/pub/.message

     ****  Public ftp Service   ****

   Welcome to Public ftp Service.

bbb#

最終更新時間:2025年07月08日 12時34分35秒 指摘や意見などあればSandBoxのBBSへ。