12.04以降vsftpdのインストールに使用したプロセスは機能しなくなりました。サービスを再起動すると、エラーstop: Unknown instance
が表示されます。これは設定が間違っていることを意味すると思いますが、問題を追跡することはできません。仮想サーバーでこの問題が発生しています。
さらに、Sudo vsftpd
を実行すると、@ Beltranが示すように500 OOPS: munmap
になります。
ルート権限を取得する
Sudo -s
Vsftpdとlibpam-pwdfileをインストールします
apt-get install vsftpd libpam-pwdfile
Vsftpd.confを編集します
mv /etc/vsftpd.conf /etc/vsftpd.conf.bak
vim /etc/vsftpd.conf
次の行をコピーして貼り付けます。
allow_writeable_chroot=YES
anonymous_enable=NO
chroot_list_enable=YES
chroot_local_user=YES
guest_enable=YES
guest_username=vsftpd
hide_ids=YES
listen=YES
local_enable=YES
local_umask=022
local_root=/var/clients/$USER
nopriv_user=vsftpd
pasv_address=127.0.0.1
pasv_enable=YES
pasv_min_port=65000
pasv_max_port=65100
port_enable=YES
user_sub_token=$USER
seccomp_sandbox=NO
virtual_use_local_privs=YES
write_enable=YES
仮想管理者を登録する
apt-get install Apache2-utils
mkdir /etc/vsftpd
htpasswd -cd /etc/vsftpd/ftpd.passwd admin
vim /etc/vsftpd.chroot_list
Adminユーザーに1行追加します
admin
PAMを構成する
mv /etc/pam.d/vsftpd /etc/pam.d/vsftpd.bak
vim /etc/pam.d/vsftpd
これらの2行をコピーして貼り付けます。
auth required pam_pwdfile.so pwdfile /etc/vsftpd/ftpd.passwd
account required pam_permit.so
シェルアクセスなしでローカルユーザーを作成する
useradd --home /home/vsftpd --gid nogroup -m --Shell /bin/false vsftpd
ルートディレクトリを作成し、ローカルユーザーに適切なアクセス権を付与します。
mkdir /var/clients
chmod -R 755 /var/clients
chown -R vsftpd:nogroup /var/clients
投獄された仮想ユーザーの登録(最初は、この手順をスキップします)
htpasswd -d /etc/vsftpd/ftpd.passwd {user_name}
mkdir /var/clients/{user_name}
再起動サービス
service vsftpd restart
AWS EC2インスタンスでこの問題を受け取っている場合は、準仮想ではなくHVM仮想化を使用してインスタンスを作成してみてください。
それでも準仮想インスタンスが必要な場合は、AWSの仮想化を実行するために使用されるXenカーネルのバグであるため、いつバグが修正されるかはわかりません。
この問題に対処するバグスレッドの詳細は次のとおりです。 https://bugs.launchpad.net/ubuntu/+source/vsftpd/+bug/131345
ソフトウェアソースで信頼できる提案を有効にし、vsftpdを再インストールします。これが成功するかどうかを確認しています。
ソースで提案されたものを有効にしたくない場合は、vsftpdソースとビルドをこのページで入手できます。 https://launchpad.net/ubuntu/trusty/+source/vsftpd/3.0.2-1ubuntu2.14.04.1
Ubuntu 14.04は ser sessions を使用しますが、これは12.04では存在しなかったため、service
はシステムセッションではなくユーザーセッションを参照しており、ユーザーはvstfpd(root is)を実行していません。したがって、service
を使用してサービスのステータスを開始、停止、または確認する場合は、--system
を指定する必要があります。
vsftpdはupstartへのソフトリンクであるため、非特権ユーザーとして実行することはできません。そのようなプロセスのステータスを開始、停止、または確認するには、rootになる必要があります。
ls -l on /etc/init.d/vsftpd
を実行すると、次のことが明らかになります。
lrwxrwxrwx 1 root root 21 May 16 2013 /etc/init.d/vsftpd -> /lib/init/upstart-job*
これはcron
、resolvconf
などに類似しています。これらはすべて起動ジョブであり、起動または停止するにはルートである必要があります。
Upstartは、/ sbin/initデーモンのイベントベースの置換であり、ブート中のタスクとサービスの開始を処理し、シャットダウン中にそれらを停止し、システムの実行中にそれらを監視します。
これらのサービスは通常、起動時に開始されます。新興企業の詳細については、こちらをご覧ください。
さらに必要な場合は、upstartのmanページを参照してください!
要するに、開始、停止、ステータスの確認を行うには、ルートになる必要があります。次のようにできます。
Sudo service vsftpd {start|stop|status|restart}
パスワードを入力するか、次を使用します。
service vsftpd {start|stop|status|restart} --system
Ubuntuにはまだ新しい。面倒なことなくUbuntu 12.4で動作していましたが、Ubuntu 14.04では、これが私がやったことです:
/etc/vsftpd.conf
ファイルに次の2行を追加します。
allow_writeable_chroot = YES
seccomp_sandbox = NO
pam_service_name
の値をftp
に変更します。
これが誰かを助けることを願って
これはUbuntu 14.04で機能しました。ユーザーが/var/www/html/kofi_site
ディレクトリ内で投獄されている場合は、次を実行します。
Sudo chmod ugo-w /var/www/html/kofi_site