- ベストアンサー
Proftpdをinetdに変更する方法
- Centos8でstandalone方式でFTPサーバーを立ち上げているが、DDNSを使用して外部からアクセスするにはinetd方式に変更する必要がある。
- xinetdをインストールして起動し、proftpd.confのServerTypeをinetdに変更する。
- proftpdとxinetdを再起動するとproftpdは動作していない状態になる。解決策を探している。
- みんなの回答 (4)
- 専門家の回答
質問者が選んだベストアンサー
あいにく、Miracle Linux 8の経験はないのですが、 proftpdをinetdで起動させるということなら 考え方としては 1) systemctl stop proftpd ↑proftpdを止める(もう止まっているならエラーするけど無視) systemctl disable proftpd ↑ 次のOSの起動時にproftpdのデーモンが立ち上がらないようにする 2) xnetdからproftpdをキックする設定をするのに /etc/xinetd.d/ftp (OSによってはファイル名は xproftpdとかかも) を設置。 (disable=no にするのと、 server=はproftpd実行ファイルが実際に存在するパスになっているか) 3) systemctl restart xinetd ↑xinetdを再起動 systemctl enable xinetd ↑ 次のOSの起動時にxinetdが立ち上がるようする 4) firewall-cmdで ftpのポートとパッシブモードのポートを許可 (standaloneで設定した時にやってるなら不要) ということになるでしょう。
その他の回答 (3)
- superside0
- ベストアンサー率64% (461/711)
> 現在の私の状態では、/etc の配下に hosts.deny hosts.allow といったものはありません。 あっと、そうでした。 CentOS8からはtcpラッパーがなくなったのでした。 /etc/hosts.deny hosts.allowの件は 無視してください。
- superside0
- ベストアンサー率64% (461/711)
/etc/xinetd.d/ftp の最後に }が足りないようですが コピペだけの問題ですかね それと xinetdを使うと、(多分の通常設定だと) tcpラッパーでのアクセス制限が通るようになります。 つまり、/etc/hosts.denyでALL:ALL みたいにして基本は拒否設定を しているのなら、/etc/hosts.allowに FTPの許可の記述が必要です。 アプローチの件ですが それぞれ考え方があるとは思いますが 私なら以下の優先度で考えます。 1) 実験でなく実用で使うのであれば 24時間自宅サーバーをたちあげておく電気代と騒音と運用トラブルの ストレスを考えると、月500円程度の格安レンタルサーバーを使う #もちろん自宅サーバーで開発途中のシステムを外部から検証してもらうとか #技術的興味(勉強)で、自宅にサーバーを立てるということはありますけども。 2) 21番でないとパッシブポートのIP変換をしてくれないルーターならば LinuxサーバーのFTPを21ポートにして もう一つのNAS用のFTPは、VPN接続で使うか LinuxからNASをマウントしてLinuxへのFTPアクセスにまとめる。 これなら、proftpd.confで MasqueradeAddress を使わないですむので、standaloneでも問題ないし MasqueradeAddressがないということは LANからでもパッシブが使えるので。 3) 今やってるように、inetd方式とする。 できれば、ヘアピンNAT付きのルーターを使って LAN内からもグローバルIPでFTPアクセスできるようにし パッシブモードも使えるようにする 4) パッシブモードは使わない ですかねぇ。。
お礼
前回の質問時に、知人が(今となっては古くなった) centos6 で、inted 方式で proftpd が動作している、というお話をさせてもらいましたが、その知人からの情報を元に、以下ようにしたところ、動作するようになったので、ご連絡いたします。 (1) 先ほどコピペミスをしたファイル名を、 /etc/xinetd.d/ftp ではなく /etc/xinetd.d/ftp2121 とする。 (2) # vi /etc/services にて、このファイルに以下の2文を追加する。 ftp2121 2121/tcp ftp2121 2121/udp (3) systemctl restart xinetd で再起動。 とりあえず、LAN内部で inetd モードで ポート 2121 で動作するようになりました。 いろいろと教えて頂き、ありがとうございました。
補足
すみません。コピペミスでした。正しくは下記です。 上下でコピペミスをして、混乱させてしまいすみませんでした。 service ftp { disable = no socket_type = stream protocol = tcp wait = no user = root server = /usr/local/sbin/proftpd } >それと xinetdを使うと、(多分の通常設定だと) tcpラッパーでのアクセス制限が通るようになります。 つまり、/etc/hosts.denyでALL:ALL みたいにして基本は拒否設定を しているのなら、/etc/hosts.allowに FTPの許可の記述が必要です。 大変恐れ入りますが、上記の部分をもう少し詳しく教えていただけないでしょうか。 現在の私の状態では、/etc の配下に hosts.deny hosts.allow といったものはありません。 当初 /etc/xinetd.conf を変更して、「enable = 」の項目に ftp を設定するのかと想像していたのですが、ネット検索でもそのような例はなく、xinetd 配下で FTP を許可する方法は、私には見つけられていません。 また、アプローチの提案、参考にさせていただきます。 私の場合サーバーは商用で使うのではなく、個人の趣味(同好会活動を含む)なので、レンタルサーバーの制約条件を調べるより、root 権限で何でもできる自宅サーバを 選択してきましたが、エネルギー危機の時代、電気代の考慮も今後必要ですね。
- superside0
- ベストアンサー率64% (461/711)
standalone だと proftpdをデーモンとして起動しておいて待ち受け inetdだと、xinetdが待ち受けしてリクエストがあればproftpdをキック です。 なので、proftpd.confで inetdを指定しているのに systemctl restart proftpd としてデーモンとして起動しようとすること自体が、矛盾していませんか?
補足
superside0 様、前回の質問の際には大変お世話になりました。 改めてお礼申し上げます。 >standalone だと proftpdをデーモンとして起動しておいて待ち受けinetdだと、xinetdが待ち受けしてリクエストがあればproftpdをキックです。 なので、proftpd.confで inetdを指定しているのに systemctl restart proftpd としてデーモンとして起動しようとすること自体が、矛盾していませんか? 確かに、何となくおかしいとは感じているのですが、何しろ xinetd を使った経験がないので、ネット情報を参考に試行錯誤中というのが現状です。 ネット情報で、inetd モードの場合は「ProFTPDの起動設定はxproftpd」のような記載があったのですが、xproftpd をどうやって生成するのかに関して詳しい記載がありませんでした。 superside0 様の方で、このあたりの詳しい情報をお持ちでしたら、ご教示頂けると助かります。 以上、よろしくお願いいたします。
補足
いろいろとありがとうございます。 外部接続可能なサーバーは、サークル活動時の Web サーバーとして使っており、頻繁に再起動したりするのはマズイと思ったので、まずは LAN 内で正常に動作している standalone 方式の別の FTP サーバーを使って、これを inetd 方式に変更する、という事で進めています。 このアプローチは間違っていないでしょうか? このアプローチが問題無い、という事を前提に、ご教示頂いた方法をベースにいろいろと試行錯誤を繰り返していますが、まだ FTP サーバーと接続できていません。今までやった事は下記です。 なお、我が家のサーバーは 全てSELinux を停止、パケットフィルタリングも停止しています。 # systemctl stop proftpd ← proftpdを止める # systemctl disable proftpd ← 次のOSの起動時にproftpdのデーモンが立ち上がらないようにする 前回報告したように、xinetd はインストール済みなので、 # systemctl stop xinetd ← とりあえず xinetd は停止。 # vi /etc/xinetd.d/ftp で、以下の内容の ftp ファイルをネット情報を参考に作成する。 { disable = no socket_type = stream protocol = tcp wait = no user = root server = /usr/local/sbin/proftpd なお、最後のラインは実行ファイルが実際に存在するパスが不明だったので、 # find / -name proftpd を実行して、 /usr/local/src/proftpd-1.3.7f/proftpd /usr/local/lib/proftpd /usr/local/include/proftpd /usr/local/sbin/proftpd /var/log/proftpd の結果を得たので、上記の値にしました。 その後、 # systemctl restart xinetd ← xinetdを再起動 # systemctl enable xinetd ← 次のOSの起動時にxinetdが立ち上がるようするを実行 # systemctl status xinetd で状態を確認すると、以下のようにエラーはない事を確認。 ● xinetd.service - Xinetd A Powerful Replacement For Inetd Loaded: loaded (/usr/lib/systemd/system/xinetd.service; enabled; vendor preset: enabled) Active: inactive (dead) since Sun 2023-03-26 16:13:44 JST; 11min ago Docs: man:xinetd man:xinetd.conf man:xinetd.log Process: 1001 ExecStart=/usr/sbin/xinetd -stayalive -pidfile /var/run/xinetd.pid (code=exited, status=0/SUCCESS) Main PID: 1071 (code=exited, status=0/SUCCESS) 3月 26 15:48:33 XS35V4 xinetd[1071]: removing echo 3月 26 15:48:33 XS35V4 xinetd[1071]: removing echo 3月 26 15:48:33 XS35V4 xinetd[1071]: removing tcpmux 3月 26 15:48:33 XS35V4 xinetd[1071]: removing time 3月 26 15:48:33 XS35V4 xinetd[1071]: removing time 3月 26 15:48:33 XS35V4 xinetd[1071]: xinetd Version 2.3.15 started with loadavg labeled-networking options compiled in. 3月 26 15:48:33 XS35V4 xinetd[1071]: Started working: 0 available services 3月 26 16:13:44 XS35V4 systemd[1]: Stopping Xinetd A Powerful Replacement For Inetd... 3月 26 16:13:44 XS35V4 systemd[1]: xinetd.service: Succeeded. 3月 26 16:13:44 XS35V4 systemd[1]: Stopped Xinetd A Powerful Replacement For Inetd. ここで、 ・proftpd.conf を修正した。 # vi /usr/local/etc/proftpd.conf #ServerType standalone ServerType inetd 念のため、systemctl restart xinetd で xinetd の再起動も行った。 この状態で LAN 内部から、passive 、非passive のどちらのモードでも FTP サーバーに接続できない、という現状です。 気になるのは、systemctl status xinetd で状態を確認しても、ftp という語彙が無い事と、 /etc/xinetd.conf を私は編集した事が無いことです。 以上のような状況です。アドバイスをお願いしたしたく、よろしくお願い申しあげます。