web-dev-qa-db-ja.com

特定のサブディレクトリにアクセスするvsftpdの仮想ユーザーを設定する方法は?

サブフォルダーにのみアクセスできる仮想ユーザーをvsftpdに追加できるようにする必要があります。仮想ユーザーを使用する理由は、サーバー上に実際のユーザーが1人しかいないことです。

FTP構造は次のとおりです。

  • www
    • website_name1
      • sub_folder1
    • website_name2
      • sub_folder2
      • sub_folder3
    • website_name3
    • website_name4

メインアカウントにはwwwフォルダーとすべてのサブディレクトリへのアクセス権があり、sub_folder1およびsub_folder1

また、混乱を避けるために、別のユーザーがsub_folder3sub_folder3。私のポイントは、ユーザーごとにどのフォルダーとサブフォルダーを選択できるようにする必要があるということです。

Strucutre全体を見るためにユーザーを追加する方法、またはフォルダーに名前を付けたユーザーをセットアップする方法を見つけました。

ここに投稿された同様の質問を見つけました:

特定のディレクトリを追加するなど、複数のユーザーに対してVSFTPDをセットアップする方法

しかし、proftpdをお勧めしますが、これは一般的に安全性が低いものでした。
それとも、ここでポイントを逃しましたか?

24
Avenyet

少し遊んで、私は半解決策を考え出すことができました(完璧ではありませんが十分です)

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を定義できます

user1var/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
29
Avenyet

このマニュアルで試してください。たぶんあなたのために働くでしょう。

どうやるか

VsftpdとPAMライブラリをインストールする

/etc/vsftpd.confおよび/etc/pam.d/vsftpdを編集します

カスタムディレクトリ(/ var/www /など)を使用してユーザーアカウントを作成します。

正しいchmodおよびchownを使用してディレクトリを設定します

サーバーへのフルアクセスを持つ管理ユーザーを作成します。

  1. vsftpd(Very Secure FTP Deamon)およびlibpam-pwdfileをインストールして、仮想ユーザーを作成します

FTPユーザーを作成したかったのですが、ローカルUNIXユーザーを追加したくありませんでした(シェルアクセスもホームディレクトリもありません)。 PAM(Pluggable Authentication Modules)は、仮想ユーザーの作成に役立ちます。

Sudo apt-get install vsftpd libpam-pwdfile

  1. 編集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
  1. 仮想ユーザーを登録する

ユーザーを登録するには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

  1. /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
  1. シェルアクセスなしでローカルユーザーを作成する

Sudo useradd --home /home/vsftpd --gid nogroup -m --Shell /bin/false vsftpd

Idコマンドid vsftpdで作成されたことを確認できます。 check_Shellパラメーターがあるため、ユーザーは/ bin/falseシェルを使用して定義します(使用しない場合でも)。エンドユーザーがFTPサーバーに接続すると、エンドユーザーは権利と所有権に使用されます。

chmodおよびchown

  1. 再起動vsftpd

一般的な方法は、すべてのデーモンのようにinit.dを使用することです

Sudo /etc/init.d/vsftpd restart

Sudo service vsftpd restart

  1. ディレクトリを作成する

構成に従って、すべてのユーザーはこのフォルダーに配置されます:/ 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で接続しようとすることができます

  1. サーバー全体にアクセスするための管理ユーザーを作成します

管理ユーザーを作成するには、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で開始します。

サーバーを再起動すれば完了です!

12
2707974

はい、できます。柔軟性のために、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にアクセスします)

0