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


24

サブフォルダーにのみアクセスできる仮想ユーザーを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私はどちらが一般的に安全性が低いかをお勧めします。
または、ここでポイントを逃しましたか?


このserverfault.com/questions/450214/が見つかるまで、認証に問題がありました。PAMにはMD5ハッシュに問題があるようです。このガイドはその問題を解決します。

回答:


31

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

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

ユーザーguest_username=vsftpdはvsftpd confファイルで一致する必要があります

ディレクトリアクセスの定義

ここで重要な行は次のとおりです

user_config_dir=/etc/vsftpd_user_conf

これは、user1ログインすると次のファイルを検索することを意味します

/etc/vsftpd_user_conf/user1

このファイルと同じなvsftpd.confので、新しいファイルを定義できますlocal_root

user1アクセスしたいだけの質問に戻ってvar/www/website_name1/sub_folder1vsftpd_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

これで、user1としてログインできるようになります。user1はvar/www/website_name1/sub_folder1、その中のすべてのフォルダーとファイルのみを表示でき ます。

これで、必要な数のユーザーを追加し、希望するフォルダーへのアクセスを制限できます。

ユーザーconfファイルを作成しない場合は、デフォルトでrootとしてvar / wwwフォルダーになります(上記の例)

ユーザーがサブフォルダーを変更できるようにする場合は、共有サブフォルダーの所有者を変更する必要があります。

chown vsftpd:nogroup /var/www/website_name1/sub_folder1

1)絶対パスを使用します(「var /」で始まるパスを「/ var」に置き換えます。2)Ubuntu 12.04にあるvsftpd 2.3.5はallow_writeable_chrootオプションをサポートしていません。パッチインストールすることで解決できます。vsftpdの
gadelat

こんにちは、sslパスワードで、-dで-cを省略しますか、または-cを省略しますか?また、2つ目のメモでは、クエリを再実行してパスワードを変更するだけですか?または別の方法があります。ありがとう
-mdixon18

useradd --homeを使用してホームディレクトリを作成する必要があるのはなぜですか?これは必要である?
e-info128

1
追加:安全なTLS接続を有効にします。digitalocean.com/community/tutorials/...
電子info128

1
apache2-utilsは一部のインストールで必要になる場合があります。これはすべてのユーザーに関連するものではないため、回答に含めていません。
アベニエット

12

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

どうやってするの

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

編集/etc/vsftpd.confして/etc/pam.d/vsftpd

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

正しいとセットのディレクトリchmodchown

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

  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. PAMを構成する /etc/pam.d/vsftpd

繰り返しますが、元のファイルをバックアップする必要があります

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

その前に/etc/ftpusers、ftpでの接続を許可されていない特定のユーザーを定義するファイルをチェックインすることをお勧めします。仮想ユーザーではなくローカルユーザー専用であると思いますが、念のためこのファイルに含まれる名前を選択しないでください。

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ます。

サーバーを再起動すると完了です!


local_root = / var / www / $ USERを強制するため、これはすでに非常に柔軟性に欠けています。1人または複数のユーザーに対して単一のディレクトリを指定することはできません。このディレクトリは通常、クライアントに応じて異なる目的と場所を持っています。応答してくれてありがとう。
アベニエット

0

はい、できます。柔軟性のために、userconfigディレクトリとファイル、 mkdir /var/www/userconfsまたはuserconfs名を変更するものを作成してから、特定のファイルを作成します。

vi /var/www/userconfigs/ftpuseraccount

内部タイプlocal_root=/var/www(またはdirでアクセスしたいもの) guest_username=www-data(ファイルの編集のubuntu所有者

更新後、vsftpd.confを追加してuser_config_dir=/var/www/userconfigs(または置き換えたものは何でも、このアカウントは指定されたsdir yoにアクセスします)

弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.