[自分用メモ] CentOS 6.3でvsftpdを設定した

GoogleドライブやDropboxでは有料サービスでない限り大容量は確保できない。Amazon EC2のクラウドサービスでもディスク容量は別途金額が発生して大容量確保にはコストが掛かる。ということで、自社内の共有フォルダ用のディスク領域は、どうしてもHDDを増設した自前でサーバを立ち上げて社内用サーバを運用する必要に迫られるのが経験則だ。
もっとも最近ではBUFFALOなどの市販の家庭用ルータにUSBストレージ機能がついていて、USB接続のHDDを繋げるだけでお手軽お気軽にNASが構成できるというものも多いようだ。ウェブからもアクセスできるらしいので、WebDAVとしても使えるのだろうか?(使ったことないのでわからんけど)

ということで先日はSambaサーバを立ち上げたわけだが、1TBの共有にはまだ80%近くの余裕がある。そこでftpサーバを立てて外部とのファイル交換に使うことにした。

というのも、外部の取引会社や子会社と大容量ファイルをやりとりする必要が出てきたのだけれど、さきに書いたとおりコストのかかる大容量ストレージは容易に契約できず、自前で1TBの80%を残している大容量ストレージを抱えているにも関わらず単に社内専用の共有だけで使うのはもったいない…という発想から、ftpサーバの立ち上げを考えたわけである。
今回は、myuserというアカウントを用意し、このアカウントとファイルのやりとりをするように設定した。

ところで、いまどきならftpではなくセキュアなsftpで……なんだろうけれど、一般的な知名度としてsftpは広まっていない上に、説明も対応ソフトのインストールも面倒くさい。簡単なファイルならアクセス制限をかけた上でftpアクセスにしようと思い、vsftpdを上げることにした。
ただし職場はグローバルIPアドレス1個だけのNAT環境なので、境界ルータでポート変換を設定する必要がある。

vsftpdはCentOSに標準でインストールされているようなので、特にyumする必要はなかった。
設定ファイルの編集だけでOK。これは楽である。

まずvsftpdの設定ファイルのあるディレクトリに移動し、vsftpd.confを編集する。

[shell]
# cd /etc/vsftpd
# vi vsftpd.conf
[/shell]

ユーザにftp putさせたくなければ、write_enable=NOを設定すればいい。今回は先方からのファイル提供を受ける機会もありそうだったので、YESで設定した(これはデフォルトなのであえて設定しなくても問題はない)。

[text]
anonymous_enable=NO
local_enable=YES
write_enable=YES
anon_upload_enable=NO
userlist_enable=YES
userlist_deny=NO
chroot_local_user=YES
passwd_chroot_enable=YES
[/text]

匿名ユーザのftp getは許可しないので、anonymous_enable=NOに設定。
ローカルユーザをftpユーザの対象にするのでlocal_enable=YESで設定。
write_enable=YESは前述のとおり。
anon_upload_enable=NOはanonymous_enable=NOなので設定の必要はないと思われるが、念のため。
ユーザリスト(/etc/vsftpd/user_listファイル)は許可ユーザとして使用するのでuserlist_enable=YES、userlist_deny=NOで設定。
その際にローカルユーザのホームディレクトリにchrootさせて他のディレクトリへのアクセスは許可しないようにするためchroot_local_user=YESとpasswd_chroot_enable=YESで設定した。

user_listファイルには許可したユーザのみ設定する。ローカルユーザであっても、このファイルにないユーザのftpは許可しない。
なおuser_listファイルの最初の数行にコメントがあり、設定userlist_denyの設定について記述がある。

[text]
# vsftpd userlist
# If userlist_deny=NO, only allow users in this file
# If userlist_deny=YES (default), never allow users in this file, and
# do not even prompt for a password.
# Note that the default vsftpd pam config also checks /etc/vsftpd/ftpusers
# for users that are denied.
myuser
[/text]

アクセスさせるユーザをmyuserのみに絞り、そのアカウントを作成する。-Gオプション付きでadduserコマンドを実行し、myuserグループもなければ同時に作る。そしてpasswdコマンドでパスワードを任意に設定する。

[shell]
# adduser -G myuser myuser
# passwd myuser
[/shell]

ちなみに今回はアカウントをそのまま作成しただけではない。せっかく社内共有フォルダであるsambaの設定もしているので、sambaのディレクトリ内にmyuserのホームディレクトリを設定し、社内とmyuserの間でやりとりするファイルはすべて、Windowsの共有フォルダを介して行うようにした。そうすることで、いちいち社内のユーザにftpに関する教育をせずとも、そのまま共有フォルダ内の特定のフォルダに配置するよう指示すれば済むからだ。

ということで、vipwコマンドでホームを/home/samba/myuserに設定した(ほかのコマンドでもホームディレクトリの設定変更はできると思うがvipwが使い慣れてるので使った)。

[shell]
# vipw
[/shell]

今度はグループの設定。グループはmyuserグループを作成し、/home/samba/myuserの所有者とグループは完全にmyuserだけに限定するように設定する。
が、ここで問題となるのは、共有フォルダ経由でアクセスする社員のアクセス権限である。Sambaは特に指定しなければnobodyユーザで動作しているので、共有フォルダに置いたファイルはすべてnobodyユーザの所有物となる。つまり、myuserからはnobodyユーザ(つまり社員が共有フォルダにコピーしたファイル)はftp getできず(permission denied)、逆にmyuserがftp putしたファイルも共有フォルダから取り出せない(アクセス権限がない状態となる)になってしまう。

当然これでは意味がないので、/etc/groupファイルを編集してnobodyユーザをmyuserグループにも所属させることにした。

[shell]
# vi /etc/group
[/shell]

以下のように、myuserを追加する。所属ユーザはカンマで区切って列挙できる。

[text]
myuser:x:502:myuser,nobody
[/text]

続いてディレクトリの作成。adduserコマンドで-dオプションを使ってホームディレクトリを同時に作成していれば、vipw使ったり以下のコマンドを実行する必要もないが、いずれにしてもパーミッションの設定は必要になると思う。CentOSではadduserコマンドで作成されるホームディレクトリのパーミッションはu+rwx(700)で設定されるらしいので、これにg+rwxを加えないといけない(770にする)。

[shell]
# cd /home/samba
# mkdir myuser
# chown myuser:myuser myuser
[/shell]

なおユーザやグループの権限設定を変更した場合、Samba(smbd)を再起動しないとならないっぽい。たぶん権限を変数内に所持しているため、ではなかろうか(完全想像)。

[shell]
# service smb restart
[/shell]

そしてvsftpdの起動。daemonの起動自体が設定されていない場合はchkconfigコマンドで有効にしてから、サービスを起動する。

[shell]
# chkconfig vsftpd on
# service vsftpd start
[/shell]

なお、tcp_wrappers=YESはデフォルトでYESの設定になっているので、TCP Wrappersを使ってアクセス制限を設定する場合には、/etc/hosts.allow、/etc/hosts.denyに設定を加えればよい。

絶対つまずかないLinux超入門 (日経BPパソコンベストムック)Linuxシステム[実践]入門 (Software Design plus)新Linux/UNIX入門 第3版 (林晴比古実用マスターシリーズ)ホントに初めてのLinux (日経BPパソコンベストムック)Linuxコンプリートバイブル (100%ムックシリーズ)
CentOS 6で作るネットワークサーバ構築ガイド (Network Server Construction Guide S)はじめてのCentOS6 Linuxサーバ構築編 (TECHNICAL MASTER)DVD付 CentOS徹底入門 第3版10日でおぼえるLinuxサーバー入門教室 CentOS対応 (10日でおぼえるシリーズ)プロのための Linuxシステム・10年効く技術 (Software Design plus)

コメントを残す

メールアドレスが公開されることはありません。

このサイトはスパムを低減するために Akismet を使っています。コメントデータの処理方法の詳細はこちらをご覧ください