さて、私はSQL経由で仮想ユーザーを認証し、そのディレクトリにリダイレクト/監禁することで、ウェブホスティング会社の基本的な設定を再現しようとしています。ここでの目標のほとんどを達成しました。ただし、ユーザーを自分のディレクトリにリダイレクト/監禁することは除きます。
ディレクトリは に保存され/home/ftp
、それがDefaultRoot
設定されます。各ユーザーが自分のディレクトリを持ち、そこに監禁されるようにしたいのですが、SQL の設定は効果がないようです。どのユーザーでも FTP にログインすると、ディレクトリ監禁やリダイレクトなしで にhomedir
ログインします。DefaultRoot
この最後のタスクをどうやって達成すればいいでしょうか?
答え1
DefaultRoot をコメントアウトしてみてください。データベース バックエンドから読み取られた値が上書きされる可能性があると思います。
編集:
DefaultRoot が設定されていて、~ 以外の値が設定されている場合、ユーザーは DefaultRoot をルートとするツリーに閉じ込められます。
DefaultRoot が ~ の場合、ユーザーはホーム ディレクトリをルートとするツリーに監禁されます。
答え2
前述のように DefaultRoot ~ を設定することに加えて、SQL 構成はどのようになっていますか? 実際にデータベースから抽出していますか?
DefaultRoot ~
<IfModule mod_dso.c>
LoadModule mod_sql.c
LoadModule mod_sql_mysql.c
</IfModule>
SQLLogFile /var/log/proftpd/mod_sql.log
PersistentPasswd off
AuthPAM off
AuthUserFile /some/path/to/dummy/passwd.ftp
AuthGroupFile /some/path/to/dummy/group.ftp
AuthOrder mod_sql.c mod_auth_file.c
SQLConnectInfo proftpd@localhost:3306 userdatabase password
SQLAuthTypes Backend Crypt Plaintext OpenSSL
SQLUserInfo user user_id password NULL NULL ftp_homedir NULL
SQLAuthenticate users
SQLDefaultUID 14
SQLDefaultGID 50
SQLMinUserUID 13
SQLMinUserGID 49
これは、データベースから 100% 認証を行い、DB にリストされているホームディレクトリにユーザーを閉じ込める、簡潔な例です。ユーザーがログインするときにホームディレクトリも動的に作成したい場合 (ユーザーをデータベースに追加し、サーバーにログインして作成したくない場合に便利です)、次のコードを追加できます。
CreateHome on dirmode 0755
...設定に追加します。上記にリストされている他の 2 つのダミー ファイルは、Red Hat/Centos サーバー上の ProFTPd インストールと一致します。
パスワード.ftp
ftp:x:14:50:FTP User:/var/ftp:/sbin/nologin
nobody:x:99:99:Nobody:/:/sbin/nologin
グループ.ftp
ftp:x:50:
nobody:x:99:
これにより、仮想ユーザーは、ログイン ユーザー名に関係なく、ハード ドライブ上で 14:50 の UID/GID を持つことになります。