SSブログ

「vsftpd」のソースからRPMファイルを作成する。 [vsftpd]

「vsftpd」のソースからRPMファイルを作成する。

■「vsftpd」のダウンロード、インストール。

       
[bibo-roku@centos Downloads]$ wget http://vsftpd.devnet.ru/files/3.0.2/packages/rhel6/vsftpd-3.0.2-1.el6.src.rpm ←ソースをダウンロード。

[bibo-roku@centos Downloads]$ su 
パスワード:
[root@centos Downloads]# mv vsftpd-3.0.2-1.el6.src.rpm /home/mockbuild/rpmbuild/SOURCES/ ←移動。

[root@centos SOURCES]# chown mockbuild:mockbuild vsftpd-3.0.2-1.el6.src.rpm ←所有者変更。

[root@centos SOURCES]# rpm2cpio vsftpd-3.0.2-1.el6.src.rpm | cpio --list ←ソースの一覧表示。
vsFTPd-3.0.2-ext1.tgz
vsftpd-ext-ssl.patch
vsftpd-ext-tcp_wrappers.patch
vsftpd.ftpusers
vsftpd.init
vsftpd.pam
vsftpd.spec ←「SPEC」ファイル。
vsftpd.user_list
vsftpd.xinetd
vsftpd_conf_migrate.sh
463 blocks

[root@centos SOURCES]# su mockbuild ←「rebuild」コマンド用ユーザー。

[mockbuild@centos SOURCES]$ rpmbuild --rebuild --clean vsftpd-3.0.2-1.el6.src.rpm ←ソースから作成。
vsftpd-3.0.2-1.el6.src.rpm をインストール中です。
警告: ユーザ phantom は存在しません - root を使用します ←「mockbuil」ではなかった。
警告: グループ shared は存在しません - root を使用します
---省略---
エラー: ビルド依存性の失敗:
        libcap-devel は vsftpd-3.0.2-1.el6.i386 に必要とされています ←不足分。

[root@centos SOURCES]# yum install libcap-devel ←不足分インストール。
---省略---
インストール:
  libcap-devel.i686 0:2.16-5.5.el6                                                              
完了しました!

[root@centos SOURCES]# rpmbuild --rebuild --clean vsftpd-3.0.2-1.el6.src.rpm ←「root」で再度。 
---省略---
書き込み完了: /root/rpmbuild/RPMS/i386/vsftpd-3.0.2-1.el6.i386.rpm ←作成完了。
---省略---

[root@centos ~]# ll /root/rpmbuild/RPMS/i386/vsftpd-3.0.2-1.el6.i386.rpm
-rw-r--r--. 1 root root 318491  /root/rpmbuild/RPMS/i386/vsftpd-3.0.2-1.el6.i386.rpm

[root@centos i386]# rpm -ivh vsftpd-3.0.2-1.el6.i386.rpm
準備中...                ########################################### [100%]
   1:vsftpd                 ########################################### [100%]
       
      
「vsftpd」に関しては先日はコンパイルしてインストールできたのですが、「Webmin」での設定が上手く反映されたりしなかったので、「RPM」ファイルでインストールした物と比較するために、ソースファイルから「rpmbuild」コマンドで「RPM」ファイルを作成してインストールしてみたいと思います。

 実は公式HPには「rpm」「src.rpm」のファイルがありませんでした。
「yum」コマンドではバージョンが低いので困っていたのですが、下記アドレスにファイルが存在しました。

http://vsftpd.devnet.ru/files/3.0.2/packages/rhel6/vsftpd-3.0.2-1.el6.src.rpm
http://www.rpmseek.com/rpm/vsftpd-3.0.2-6.fc20.i686.html?hl=com&cx=0:-:0:12063675:0:0:0:

 ファイルをダウンロードしたら「rpmbuild」コマンドを使用するために以前作成した「mockbuild」ユーザーの作業ディレクトリに移動させます。その際、「su」ユーザーでないと移動できません。

 一応、所有者を「mockbuild」にして「rpm2cpio」コマンドで「SPEC」ファイルの有無を確認してみます。
「SPEC」ファイルはじめ、先日確認したファイル群がありますね。

 いよいよ「rpmbuild --rebuild」コマンドでソースファイルから「RPM」ファイル作成に入ります。
 警告。ぶっ。以前警告がでるので「mockbuild」ユーザーを作ったのですが、今回はまた別のグループとユーザーがコマンド使用には必要だったようです。「SPEC」ファイルにでも記載されているのでしょうか。
 もう面倒なので、「root」で進めてしまいましょう。

 で、不足分のパッケージをインストールします。
 再度作成し、完成しました。場所は「root」になっているので留意しておきましょう。

 出来上がった「vsftpd-3.0.2-1.el6.i386.rpm」をインストールします。


■「vsftpd」の動作確認。

       
[root@centos ~]# vi /etc/sysconfig/iptables ←編集。
# Firewall configuration written by system-config-firewall
# Manual customization of this file is not recommended.
*filter
:INPUT ACCEPT [0:0]
:FORWARD ACCEPT [0:0]
:OUTPUT ACCEPT [0:0]
-A INPUT -m state --state ESTABLISHED,RELATED -j ACCEPT
-A INPUT -p icmp -j ACCEPT
-A INPUT -i lo -j ACCEPT
-A INPUT -m state --state NEW -m tcp -p tcp --dport 22 -j ACCEPT
-A INPUT -m state --state NEW -m tcp -p tcp --dport 80 -j ACCEPT
-A INPUT -m state --state NEW -m tcp -p tcp --dport 10000 -j ACCEPT
-A INPUT -m state --state NEW -m tcp -p tcp --dport 21 -j ACCEPT ←一文追記。
-A INPUT -j REJECT --reject-with icmp-host-prohibited
-A FORWARD -j REJECT --reject-with icmp-host-prohibited
COMMIT

[root@centos init.d]# /etc/init.d/iptables restart ←再起動。
iptables: チェインをポリシー ACCEPT へ設定中filter         [  OK  ]
iptables: ファイアウォールルールを消去中:                  [  OK  ]
iptables: モジュールを取り外し中:                          [  OK  ]
iptables: ファイアウォールルールを適用中:                  [  OK  ]

[root@centos ~]# chkconfig --add vsftpd ←起動スクリプトを管理対象に追加。

[root@centos init.d]# service vsftpd start ←起動。
vsftpd 用の vsftpd を起動中:                               [  OK  ]

[root@centos init.d]# service vsftpd status ←確認。
vsftpd (pid 7314) を実行中...
       
      
 ポートを空けて、再起動してやり再度「vsftpd」を起動してやります。
 そして起動を確認。動いてくれているようですね。


■「FTPクライアント」で接続。

       
[root@centos ~]# cp /etc/vsftpd/vsftpd.conf /var/ftp/pub/ ←コピー。

[root@centos pub]# ll
合計 8
-rw-------. 1 root root 4600  5月 15 00:12 2015 vsftpd.conf
[root@centos pub]# chmod 755 vsftpd.conf ←パーミッション変更。

Microsoft Windows [Version 6.3.9600] ←コマンドプロンプト。
(c) 2013 Microsoft Corporation. All rights reserved.

C:\Users\westbird>ftp ←FTPクライアントに。
ftp> open ←開始。
宛先 192.168.0.66 ←接続先。
192.168.0.66 に接続しました。
220 vsFTPd 3.0.2+ (ext.1) ready...
ユーザー (192.168.0.66:(none)): ftp ←ユーザー名(anonymous)。
331 Please specify the password.
パスワード: ←なし。
230 Login successful.
ftp> ls ←リスト。
200 PORT command successful. Consider using PASV.
150 Here comes the directory listing.
pub
226 Directory send OK.
ftp: 8 バイトが受信されました 0.00秒 8.00KB/秒。
ftp> cd pub ←フォルダ移動。
250 Directory successfully changed.
ftp> ls 
200 PORT command successful. Consider using PASV.
150 Here comes the directory listing.
vsftpd.conf
226 Directory send OK.
ftp: 16 バイトが受信されました 0.00秒 16.00KB/秒。
ftp> get vsftpd.conf ←ダウンロード。
200 PORT command successful. Consider using PASV.
150 Opening BINARY mode data connection for vsftpd.conf (4600 bytes).
226 Transfer complete.
ftp: 4600 バイトが受信されました 0.00秒 4600.00KB/秒。
ftp> quit ←終了。
221 Goodbye.


C:\Users\westbird>ftp
ftp> open 192.168.0.66
192.168.0.66 に接続しました。
220 vsFTPd 3.0.2+ (ext.1) ready...
ユーザー (192.168.0.66:(none)): bibo-roku ←ローカルユーザー名。
530 This FTP server is anonymous only. ←エラー。
ログインできませんでした。
ftp>

[root@centos ~]# vi /etc/vsftpd/vsftpd.conf ←コンフィグファイル編集。
---省略---
# Uncomment this to allow local users to log in.
local_enable=YES ←コメントアウト外す。
#
# Uncomment this to enable any form of FTP write command.
write_enable=YES ←コメントアウト外す。
#
# Default umask for local users is 077. You may wish to change this to 022,
# if your users expect that (022 is used by most other ftpd's)
local_umask=022 ←コメントアウト外す。
---省略---

C:\Users\westbird>ftp ←再度。
ftp> open
宛先 192.168.0.66
192.168.0.66 に接続しました。
220 vsFTPd 3.0.2+ (ext.1) ready...
ユーザー (192.168.0.66:(none)): bibo-roku ←ローカルユーザー。
331 Please specify the password.
パスワード:
230 Login successful. ←接続確認。
       
      
 まずは、今回のコンフィグファイルと、コンパイルした場合のコンフィグファイルに違いがあるのか確かめたいので「Windows」にダウンロードします。
「/etc/vsftpd」ディレクトリ内にあるコンフィグファイルを「ftp」ユーザーのルートディレクトリ以下の「pub」内にコピーします。
 FFFTPクライアントにて「anonymous」で接続。成功。ファイル目視完了。ダウンロード失敗。
 原因はパーミッションで「600」を「755」にしてダウンロード成功。

 続いて「bibo-roku」(ローカルユーザー)で接続してみると、「530 This FTP server is anonymous only.」とのこと。
 へぇ。デフォルトでは「anonymous」と「ftp」ユーザーは接続可能だけど、「ローカルユーザー」は駄目なんですね。

 ということで、「/etc/vsftpd/vsftpd.conf」を「vi」コマンドで開き「local_enable=YES」が「ローカルユーザー」の接続(ログイン)許可です。
 関連して「write_enable=YES」(書き込み系コマンド許可)や「local_umask=022」(パーミッションを「755」に。)を設定して、「vsftpd」を再起動します。

 それにしても、理解できている設定をして、自由に動かせると気持ちいいですね!

■「anonymous」ユーザーでアップロード。

       
「FFFTP(Win)(クライアント)」→「vsftpd(CentOS)(サーバ)」 ←接続完了。
550 Permission denied. ←ファイルアップロードエラー。

「Webmin」Anonymous can upload:「Yes」 ←「Yes」に変更。
「Save Changes」→「vsftpdに戻る」→「Restart vsftpd Server」

「FFFTP(Win)(クライアント)」→「vsftpd(CentOS)(サーバ)」 ←接続完了。
553 Could not create file. ←ファイルアップロードエラー。

[root@centos ~]# ll /var/ftp/
合計 4
drwxr-xr-x. 2 root ftp 4096  5月 15 03:47 2015 pub ←「755」を「777」に変更。

「Webmin」
「Save Changes」→「vsftpdに戻る」→「Restart vsftpd Server」

「FFFTP(Win)(クライアント)」→「vsftpd(CentOS)(サーバ)」 ←接続完了。←ファイルアップロード完了。
       
      
「Webmin」で「anonymous」ユーザー時でもアップロードができるように設定したにも拘わらず実行できない理由を調査しました。

---追記---
 下記問題について、次の項目にて解決しています。
---追記---

「FFFTP」(クライアント)「anonymous」ユーザーで接続。ファイルアップロード。
「550 Permission denied.」エラー発生。
 これを解決するのには、「vsftpd.conf」の「#anon_upload_enable=YES」のコメントアウトを外す必要があり同時に「#write_enable=YES」こちらも外すとのこと。

 これらの操作を「Webmin」がしてくれると思い、操作をするも、「vsftpd.conf」には見た目変化なし。
 しかし再度接続してみると、エラーが「553 Could not create file.」変化しています。
 アップロード先のディレクトリ「/ver/ftp/pub」のパーミッションを「775」から「777」に変更。

「vsftpd」再起動後接続。アップロード成功。しかし「vsftpd.conf」に変化なし。
 とりあえず、変化なしは後に置くことにして、
「550 Permission denied.」には「Webmin」Anonymous can upload:「Yes」
「553 Could not create file.」にはパーミッションの変更。
 で対処できました。
 前者は「vi」コマンドなら「#anon_upload_enable=YES」を外すことで対処できました。

 結論。
 初めて「Webmin」で「anonymous」ユーザーのアップロードを許可しようと操作しても、アップロード先の「/var/ftp/pub」のパーミッションを「777」にしないとアップロードはできない。
 つまり、「777」にしておけば「Webmin」で初接続して「Yes」にすればアップロードはできたと思われます。アップロードできなかったのはパーミッションのせいだったと。
 また、「Webmin」で「anonymous」ユーザーのアップロードを許可する操作は、「vsftpd.conf」において「#」が外れた記述にならない。しかし設定は外された状態になる。
 つまり「Webmin」上の設定と「vsftpd.conf」上の設定に連動性が見られない。ただ、「Webmin」上では「Yes」と「No」で選択するが、「vsftpd.conf」上では「#」を付けたり外したりで設定するが、「No」も使えるはずで、その辺が絡んでくるのかも知れない。

 通常、「anonymous」にアップロードは許可しないので問題ありませんが、ちょっと混乱してしまいました。この部分に関してはコマンドラインで設定するのが良いかも知れません。
 ↓解決。


■「Webmin」での設定変更と「vsftpd.conf」との関連

       
例:「anonymous」ユーザーにアップロード権限を与える。

「vsftpd.conf」を手動で設定する場合。
[root@centos ~]# vi /etc/vsftpd/vsftpd.conf
anonymous_enable=YES
write_enable=YES
#anon_upload_enable=YES ←コメントアウトを外す。

「Wibmin」を使用して設定する場合。
「サーバ」→「vsftpd」→「anonymous FTP」→「anonymous enable」→「yes」→「anonymous can uploads」→「yes」→「save changes」
       
      
 いくつかサイトを回ってみたのですが、「vsftpd.conf」を手動で設定する場合、基本的に設定は 「~~~=YES」
 と表記されており
「#~~~=YES」は「No」を表し(というか「設定なし」=「No」という感じかな)、
「~~~=YES」は「Yes」を表しています。

 次に「Webmin」で設定する場合、HTMLのラジオボタン形式で「Yes」「No」を明示的に選択するようになっています。当方は
「Yes」は「~~~=YES」
「No」は「#~~~=YES」
 として、「vsftpd.conf」に反映されると考えておりました。

 しかし実際には「Webmin」で設定し、アップロードはできるようになったのに「vsftpd.conf」の「#anon_upload_enable=YES」はコメントアウトされたままだったので、混乱してしまいました。
「anon_upload_enable=YES」となると考えていたのです。

 色々設定をいじってみたのですが、結果解ったのは、
anon_upload_enable=YES
anon_mkdir_write_enable=NO
anon_other_write_enable=NO
 これらが追記されておりました。「vsftpd.conf」の一番最後に。見落としていました……。
 ごらんのように、「Webmin」で設定した場合、「#」ではなく普通に「YES」「NO」で追記する形で変更されると言うことです。
手動、「Webmin」の両方で設定を変えている場合は、気をつける必要があるかも知れません。

nice!(0)  コメント(1)  トラックバック(0) 
共通テーマ:パソコン・インターネット

nice! 0

コメント 1

Jerri

このパラグラフのすべてを説明するあなたの方法
本当に厳しいです、誰もがそれを意識することなくできるようになる、
どうもありがとう。
by Jerri (2018-03-01 03:03) 

コメントを書く

お名前:
URL:
コメント:
画像認証:
下の画像に表示されている文字を入力してください。

トラックバック 0

この広告は前回の更新から一定期間経過したブログに表示されています。更新すると自動で解除されます。