サブフォルダーにのみアクセスできる仮想ユーザーをvsftpdに追加できるようにする必要があります。仮想ユーザーを使用する理由は、サーバー上に実際のユーザーが1人しかいないことです。
FTP構造は次のとおりです。
www
website_name1
sub_folder1
website_name2
sub_folder2
sub_folder3
website_name3
website_name4
メインアカウントにはwwwフォルダーとすべてのサブディレクトリへのアクセス権があり、sub_folder1およびsub_folder1
また、混乱を避けるために、別のユーザーがsub_folder3とsub_folder3。私のポイントは、ユーザーごとにどのフォルダーとサブフォルダーを選択できるようにする必要があるということです。
Strucutre全体を見るためにユーザーを追加する方法、またはフォルダーに名前を付けたユーザーをセットアップする方法を見つけました。
ここに投稿された同様の質問を見つけました:
特定のディレクトリを追加するなど、複数のユーザーに対してVSFTPDをセットアップする方法
しかし、proftpd
をお勧めしますが、これは一般的に安全性が低いものでした。
それとも、ここでポイントを逃しましたか?
少し遊んで、私は半解決策を考え出すことができました(完璧ではありませんが十分です)
2707974の回答と情報を使用して、必要なものを取得できる他の場所で取得しました。
まず、vsftpとPAMがインストールされている必要があります
apt-get install vsftpd libpam-pwdfile
/ etc/vsftpd.confを編集
nano /etc/vsftpd.conf
次に、以下を貼り付けます
listen=YES
anonymous_enable=NO
local_enable=YES
write_enable=YES
local_umask=022
local_root=/var/www
chroot_local_user=YES
allow_writeable_chroot=YES
hide_ids=YES
#virutal user settings
user_config_dir=/etc/vsftpd_user_conf
guest_enable=YES
virtual_use_local_privs=YES
pam_service_name=vsftpd
nopriv_user=vsftpd
guest_username=vsftpd
正確なニーズに合わせて編集します。仮想ユーザーにとって最も重要なことは、仮想ユーザー設定コメントの後のすべてです
ユーザーの作成
データベースを使用するか、htpasswd
私が見つけたhtpasswd
をより速く簡単に使用できます。
ユーザーを保存するディレクトリを作成します
mkdir /etc/vsftpd
htpasswd -cd /etc/vsftpd/ftpd.passwd user1
ユーザーを追加する場合は、-c
を省略します
htpasswd -d /etc/vsftpd/ftpd.passwd user2
8文字に制限されているCRYPTを使用してのみ動作させることができました8文字以上を使用するには、opensslを使用して互換性のあるハッシュを生成し、htpasswdに直接パイプします
htpasswd -c -p -b /etc/vsftpd/ftpd.passwd user1 $(openssl passwd -1 -noverify password)
ユーザーが作成されたら、PAM構成ファイルを変更できます
nano /etc/pam.d/vsftpd
このファイル内のすべてを削除し、次のものに置き換えます
auth required pam_pwdfile.so pwdfile /etc/vsftpd/ftpd.passwd
account required pam_permit.so
これにより、/etc/vsftpd/ftpd.passwd
で定義された仮想ユーザーのログインが有効になり、ローカルユーザーが無効になります
次に、これらの仮想ユーザーが使用するユーザーを追加する必要があります。これらのユーザーはシェルにアクセスできず、vsftpd
と呼ばれます
useradd --home /home/vsftpd --gid nogroup -m --Shell /bin/false vsftpd
ユーザーはvsftpd confファイルのguest_username=vsftpd
と一致する必要があります
ディレクトリアクセスの定義
ここで重要な行は次のとおりです
user_config_dir=/etc/vsftpd_user_conf
これは、user1
ログイン時に次のファイルを検索することを意味します
/etc/vsftpd_user_conf/user1
このファイルはvsftpd.conf
と同じなので、新しいlocal_root
を定義できます
user1
にvar/www/website_name1/sub_folder1
へのアクセスのみを許可する質問に戻るため、vsftpd_user_conf
フォルダーを作成する必要があります。
mkdir /etc/vsftpd_user_conf
ユーザーファイルを作成します。
nano /etc/vsftpd_user_conf/user1
そして、次の行を入力します
local_root=/var/www/website_name1/sub_folder1
今vsftpを再起動します
service vsftpd restart
var/www/website_name1/sub_folder1
およびその中のフォルダーとファイルのみを表示できるuser1としてログインできるようになります。
これで、必要な数のユーザーを追加し、希望するフォルダーへのアクセスを制限できます。
ユーザーのconfファイルを作成しない場合、デフォルトではrootとしてvar/wwwフォルダーになります(上記の例)
ユーザーがサブフォルダーを変更できるようにする場合は、共有サブフォルダーの所有者を変更する必要があります。
chown vsftpd:nogroup /var/www/website_name1/sub_folder1
このマニュアルで試してください。たぶんあなたのために働くでしょう。
どうやるか
VsftpdとPAMライブラリをインストールする
/etc/vsftpd.conf
および/etc/pam.d/vsftpd
を編集します
カスタムディレクトリ(/ var/www /など)を使用してユーザーアカウントを作成します。
正しいchmod
およびchown
を使用してディレクトリを設定します
サーバーへのフルアクセスを持つ管理ユーザーを作成します。
vsftpd
(Very Secure FTP Deamon)およびlibpam-pwdfile
をインストールして、仮想ユーザーを作成しますFTPユーザーを作成したかったのですが、ローカルUNIXユーザーを追加したくありませんでした(シェルアクセスもホームディレクトリもありません)。 PAM(Pluggable Authentication Modules)は、仮想ユーザーの作成に役立ちます。
Sudo apt-get install vsftpd libpam-pwdfile
vsftpd.conf
最初に、元のファイルをバックアップする必要があります
Sudo mv /etc/vsftpd.conf /etc/vsftpd.conf.bak
次に、新しいものを作成します
Sudo vim /etc/vsftpd.conf
次の行をコピーして貼り付けます。ファイルには次の行のみが含まれている必要があります。
listen=YES
anonymous_enable=NO
local_enable=YES
write_enable=YES
local_umask=022
nopriv_user=vsftpd
virtual_use_local_privs=YES
guest_enable=YES
user_sub_token=$USER
local_root=/var/www/$USER
chroot_local_user=YES
hide_ids=YES
guest_username=vsftpd
ユーザーを登録するにはhtpasswd
を使用するので、サーバーでApache2
を使用していると仮定します。 vsftpd
フォルダーを作成し、そこに構成ファイルを配置します。
Sudo mkdir /etc/vsftpd
それから
Sudo htpasswd -cd /etc/vsftpd/ftpd.passwd user1
-cは、ファイルがまだ存在しない場合は作成することを意味します-dはMD5を強制します。ubuntu12.04で必要であり、常に使用
コマンドはパスワードを要求します。
後で新しいユーザーを追加する場合:
Sudo htpasswd -d /etc/vsftpd/ftpd.passwd user2
/etc/pam.d/vsftpd
でPAMを構成します繰り返しますが、元のファイルをバックアップする必要があります
Sudo mv /etc/pam.d/vsftpd /etc/pam.d/vsftpd.bak
新しいものを作成します
Sudo vim /etc/pam.d/vsftpd
これらの2行をコピーして貼り付けます(これが唯一のコンテンツである必要があります)。私はこれらの2行のみを主張し、オリジナルを維持するのに多くの時間を無駄にし、これらを追加しました。
auth required pam_pwdfile.so pwdfile /etc/vsftpd/ftpd.passwd
account required pam_permit.so
Sudo useradd --home /home/vsftpd --gid nogroup -m --Shell /bin/false vsftpd
Idコマンドid vsftpdで作成されたことを確認できます。 check_Shellパラメーターがあるため、ユーザーは/ bin/falseシェルを使用して定義します(使用しない場合でも)。エンドユーザーがFTPサーバーに接続すると、エンドユーザーは権利と所有権に使用されます。
chmod
およびchown
。
vsftpd
一般的な方法は、すべてのデーモンのようにinit.dを使用することです
Sudo /etc/init.d/vsftpd restart
Sudo service vsftpd restart
構成に従って、すべてのユーザーはこのフォルダーに配置されます:/ var/www/user1。
特定の権限でそれらを作成する必要があります:ルートフォルダーは書き込み可能ではありません!
/ [root = /var/www/user1] => 555
www [ /var/www/user1/www ] => 755
docs [ /var/www/user1/docs ] => 755
注:ユーザーは、ルートディレクトリにファイルまたはフォルダーを作成できません。
vsftpd.conf
にはchroot_local_user=YES
があるため、ユーザーは自分のフォルダの外には何も見えません。彼にとって、サーバーは次のようになります。
したがって、次のコマンドを実行するだけです。
mkdir /var/www/user1`
chmod -w /var/www/user1
mkdir www/user1/www
chmod -R 755 /var/www/user1/www
chown -R vsftpd:nogroup /var/www/user1
/var/www/user1
フォルダーが存在しない場合、接続は失敗します。
今、あなたはあなたのFTPで接続しようとすることができます
管理ユーザーを作成するには、htpasswd
で新しいユーザーを登録する必要があります。
その前に、ftpとの接続を許可されていない特定のユーザーを定義する/etc/ftpusers
ファイルをチェックインすることをお勧めします。仮想ユーザーではなくローカルユーザー専用であると思いますが、念のためこのファイルに含まれる名前を選択しないでください。
Sudo htpasswd -d /etc/vsftpd/ftpd.passwd theadmin
次に、/etc/vsftpd.conf
に新しい行を追加する必要があります
chroot_list_enable=YES
これは、ユーザーが/ etc /内のユーザーを除き、フォルダーに(jailとして)配置されることを意味します
vsftpd.chroot_list
このファイルを作成してユーザーを追加しましょう。ファイルは「theadmin」を含む単純な行です。 1行に1人のユーザーを追加します。つまり、/var/www/theadmin
フォルダーを作成する必要はありません。ユーザーはログインして/home/vsftpd
で開始します。
サーバーを再起動すれば完了です!
はい、できます。柔軟性のために、userconfigディレクトリとファイル、mkdir /var/www/userconfs
、またはuserconfs名を変更するものを作成してから、特定のファイルを作成します
vi /var/www/userconfigs/ftpuseraccount
内部タイプ、local_root=/var/www
(またはディレクトリによってアクセスしたいもの)guest_username=www-data
(ファイルトップ編集のubuntu所有者
更新後、vsftpd.confにuser_config_dir=/var/www/userconfigs
を追加して(または置き換えたものは何でも、このアカウントは指定されたsdir yoにアクセスします)