共有環境でProFTPdを安全に構成する

共有環境でProFTPdを安全に構成する

現在、共有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"

関連情報