現在、共有Webホスティング用のLAMPスタックがあり、ProFTPを使用しています。
現在、ProFTP設定はかなり固定されています~
。ユーザーは現在デフォルトのユーザー/グループとして実行されます。仮想ユーザーではなく、システムユーザーのみを使用します。
私たちはSuPHPを使用して各PHPプロセスを適切なユーザー/グループとして実行します。
私が本当に望むのは、ProFTPがuser:group
ログインしている人にアップロードされたファイルを自動的に設定することです。したがって、「customer-a」でFTPにログインすると、アップロードされたすべてのファイルを「customer-a」が所有するようになります。
これの主な理由は、私が今誰かにログインすると、その人は自分のホームディレクトリに書き込む権限がないためです。 ProFTPが権限を軽減するのではなく、ユーザーコンテキストを適切に切り替えたいと思います。
考えられる解決策
私が考えたことの1つは、各顧客ドメインに対して仮想ホストを宣言することでした。ユーザーそしてグループ別の指示。
1)これは痛みを伴うことなので、作成されたユーザーごとに設定を追加することを避けたいと思います。 2) ProFTPはサポートしていないようです。名前ベースの仮想ホスティング。
または、次のものを使用できます。ユーザー所有者そしてグループオーナーディレクティブを作成し、<Directory>
構成内の各顧客に対して新しいブロックを作成します。
私は次のことがうまくいくと思いました。
<Directory /home/customer-a/>
UserOwner customer-a
UserGroup customer-a
</Directory>
%u
ただし、ログに記録されている変数など、より一般的な方法で実行できる場合は良いでしょう。ここ。しかし、私はこれがUserOwnerには効果がないと思います。
いくつかの詳細
- Ubuntuの使用
- ProFTP 1.3.4a
- Apache 2.2
- PHP-CGIでSuPHPを使用してください。
答え1
より良い解決策は、クライアントごとにシステムアカウントを持つ代わりにMySQL認証を使用することです。これにより、ディレクトリの場所、ユーザーID、およびセキュリティが向上する柔軟性が向上します。
これを行うには、mysqlサポートを使用してproftpdをビルドします。
次に、mysqlにテーブル(「ユーザー」とも呼ばれる)を作成します。
CREATE TABLE users (
userid VARCHAR(30) NOT NULL UNIQUE,
passwd VARCHAR(80) NOT NULL,
uid INTEGER UNIQUE,
gid INTEGER,
homedir VARCHAR(255),
shell VARCHAR(255),
active BOOLEAN DEFAULT true
);
CREATE INDEX users_userid_idx ON users (userid);
次に、ユーザーを追加します。パスワードはproftpd.confのSQLAuthTypesディレクティブに応じてさまざまな形式にすることができますが、既存の暗号化されたパスワードをここに入れることができるはずです。
INSERT INTO users (username,password, uid, homedir) VALUES ('username','APassWord', 77, '/home/sftpcustomers/custname/')
proftpd.confには以下が必要です。
SQLBackend mysql
SQLAuthenticate users
AuthOrder mod_sql.c
SQLAuthTypes OpenSSL Plaintext Crypt
SQLConnectInfo dbname@localhost:3306 db_username db_password
SQLUserInfo users username password uid NULL homedir NULL
SQLUserWhereClause "Active = 1"