今更ですが、FTPを使ってみる。
SSHが入っていれば、SFTPとかSCPが使えるわけですが、Network スイッチのファームウェアやコンフィグをおいたり、PXEブートの参照先としてFTPが使いたいということもあろうかと思うのでやってみたいと思います。
Windowsでもいいんでしょうけど、Linuxのほうがなんとなく簡単な気がします。
インストール
前回もやりましたけど、
yumを使うと便利ですね。もちろんrpmでもできないことはないですが、パッケージの依存関係のメッセージが出たりして大変だったりします。
[root@host1 local]# yum install -y vsftpd
:
Installed:
vsftpd.x86_64 0:3.0.2-21.el7
Complete!
[root@host1 local]#
すでにインストールされているかどうかの確認であれば
# yum list installed |grep ftpd
リポジトリに入っているかどうかの確認であれば
# yum list available |grep ftpd
というのでチェックできます。
ftpサービスの起動
RHEL7からは、サービス関係の制御ではsystemctlを使用します。
[root@host1 ~]# systemctl start vsftpd
[root@host1 ~]#
エラーが出てないでの立ち上がっているかとは思いますが、念の為、起動状況も確認します。
[root@host1 ~]# systemctl status vsftpd
??sftpd.service - Vsftpd ftp daemon
Loaded: loaded (/usr/lib/systemd/system/vsftpd.service; disabled; vendor preset: disabled)
Active: active (running) since Fri 2018-01-12 09:15:17 JST; 29s ago
Process: 8204 ExecStart=/usr/sbin/vsftpd /etc/vsftpd/vsftpd.conf (code=exited, status=0/SUCCESS)
Main PID: 8205 (vsftpd)
CGroup: /system.slice/vsftpd.service
??8205 /usr/sbin/vsftpd /etc/vsftpd/vsftpd.conf
Jan 12 09:15:17 host1.example.com systemd[1]: Starting Vsftpd ftp daemon...
Jan 12 09:15:17 host1.example.com systemd[1]: Started Vsftpd ftp daemon.
[root@host1 ~]#
余談ですが、RHEL6で使用していたserviceコマンドも使えたりします。
[root@host1 ~]# service vsftpd status
Redirecting to /bin/systemctl status vsftpd.service
??sftpd.service - Vsftpd ftp daemon
Loaded: loaded (/usr/lib/systemd/system/vsftpd.service; disabled; vendor preset: disabled)
Active: active (running) since Fri 2018-01-12 09:15:17 JST; 3min 43s ago
Process: 8204 ExecStart=/usr/sbin/vsftpd /etc/vsftpd/vsftpd.conf (code=exited, status=0/SUCCESS)
Main PID: 8205 (vsftpd)
CGroup: /system.slice/vsftpd.service
??8205 /usr/sbin/vsftpd /etc/vsftpd/vsftpd.conf
Jan 12 09:15:17 host1.example.com systemd[1]: Starting Vsftpd ftp daemon...
Jan 12 09:15:17 host1.example.com systemd[1]: Started Vsftpd ftp daemon.
[root@host1 ~]#
firewallでftpを許可
これも前にやりましたが、
RHEL7からはfirewalldで制御します。RHEL6まではiptablesですね。
[root@host1 ~]# firewall-cmd --permanent --add-service=ftp
success[root@host1 ~]#
一時的に開けるだけなら --parmanentオプションは不要です。また、--parmanentを指定した場合は、サービスの再起動が必要です。
[root@host1 ~]# firewall-cmd --reload
success
[root@host1 ~]#
ftp用のユーザ設定
デフォルトの状態であれば、ブラックリストに載っていないLinuxのユーザであれば入れます。
Windowsのコマンドプロンプトのftpコマンドからだとこんな感じになります。
C:\>ftp 192.168.0.125
Connected to 192.168.0.125.
220 (vsFTPd 3.0.2)
User (192.168.0.125:(none)): hanako
331 Please specify the password.
Password: ...パスワードを入力
230 Login successful.
ftp>
successfulになっていればOKですね。
ちなみに、ブラックリストは次のファイルです。
[root@host1 ~]# cat /etc/vsftpd/ftpusers
:
root
bin
daemon
:
ここに、ftpで使われたくないユーザを書き込めばログインできなくなります。rootは使ってほしくないユーザNo.1なのでデフォルトで入っていますね。
デフォルトでanonymousも有効
ftpクライアントで、さっき入ったユーザのセッションを閉じて、anonymousで入ったら入れました。
ftp> close
221 Goodbye.
ftp> open 192.168.0.125
Connected to 192.168.0.125.
220 (vsFTPd 3.0.2)
User (192.168.0.125:(none)): anonymous
331 Please specify the password.
Password:
230 Login successful.
どのディレクトリにいるのかとpwdを実行するとなんと/(ルート)なのですが、
そこは流石にOSのルートなはずもなく、実際は/var/ftpのディレクトリとなります。
ユーザホーム以外へのftpアクセスについて
anonymousにファイルを公開するんであれば、このフォルダ配下にアップロードするユーザがアクセスできるフォルダを作っておけばいいですね。
と思ったんですけど、実際に/var/ftp配下にディレクトリを作って、所有者を変更後にftpでputとかmkdirをしても、errorで帰ってきてしまいました。
/var/log/messagesをみてみると、SELinuixが何やら拒否している形跡が。。
Jan 12 16:37:44 host1 setroubleshoot: SELinux is preventing vsftpd from write access on the directory share. For complete SELinux messages. run sealert -l 200a3b32-e9d4-4eef-b1c3-e0c16047367c
Jan 12 16:37:44 host1 python: SELinux is preventing vsftpd from write access on the directory share.#012#012***** Plugin allow_anon_write (53.1 confidence) suggests ******************#012#012If you want to allow vsftpd to be able to write to shared public content#012Then you need to change the label on share to....
どうやら、SE Linuxは、デフォルトでftp経由でのユーザのホームディレクトリ以外へのアクセスを制限しているらしく、解除してあげないと行けないらしく次のコマンドを実行したら解決しました。
# setsebool -P allow_ftpd_full_access
なんか、あっさりできるかなぁと思ったら案外いろいろありますね。
手っ取り早くFTPしたいときは、3d daemonですかね。
でも本家からのダウンロードはできない模様ですが。。