web-dev-qa-db-ja.com

/ var / wwwへの書き込み権限を持つchrootされたsftpユーザー

展開しようとしているこのセットアップについて混乱しています。皆さんの誰かが私に手を貸してくれることを願っています。

背景情報

サーバーはDebian 6.0、ext3で、Apache2/SSLとNginxがリバースプロキシとして前面にあります。 Apacheルートディレクトリ(/ var/www)へのsftpアクセスを提供する必要があります。これは、sftpユーザーがRWX権限でそのパスにchrootされていることを確認します。

/ var/wwwのデフォルトのパーミッションを変更することなく、これらすべて。

drwxr-xr-x  9 root root  4096 Nov  4 22:46 www

/ var/wwwの中

-rw-r----- 1 www-data www-data     177 Mar 11  2012 file1
drwxr-x--- 6 www-data www-data    4096 Sep 10  2012 dir1
drwxr-xr-x 7 www-data www-data    4096 Sep 28  2012 dir2
-rw------- 1 root     root          19 Apr  6  2012 file2
-rw------- 1 root     root     3548528 Sep 28  2012 file3
drwxr-x--- 6 www-data www-data    4096 Aug 22 00:11 dir3
drwxr-x--- 5 www-data www-data    4096 Jul 15  2012 dir4
drwxr-x--- 2 www-data www-data  536576 Nov 24  2012 dir5
drwxr-x--- 2 www-data www-data    4096 Nov  5 00:00 dir6
drwxr-x--- 2 www-data www-data    4096 Nov  4 13:24 dir7

私が試したこと

  1. 新しいグループを作成しましたsecureftp
  2. secureftpおよびwww-dataグループに参加した新しいsftpユーザーを作成しましたnologinシェルも使用します。ホームディレクトリは/
  3. sshd_configを編集
Subsystem sftp internal-sftp 
AllowTcpForwarding no 
Match Group <secureftp> 
      ChrootDirectory /var/www 
      ForceCommand internal-sftp

Sftpユーザーでログインし、ファイルをリストできますが、書き込みアクションは許可されていません。 Sftpユーザーはwww-dataグループに属していますが、/ var/wwwのアクセス許可はグループビットの読み取り/読み取り+ xなの​​で、機能しません。

ACLも試してみましたが、sftpユーザーのACL RWX権限を/ var/www(ディレクトリとファイルに再帰的に)を適用すると、UNIXの権限も変更されてしまい、望ましくありません。

ここで何ができますか?

ユーザーwww-dataがsftpとしてログインできるようにして、www-dataが/ var/wwwで所有するファイル/ディレクトリを変更できるようにすることを考えていました。しかし、何らかの理由で、これはセキュリティ面での愚かな動きになると思います。

10
bashintosh

私がやったことは、ユーザーをホームディレクトリにchrootし、mount --bindを使用してホームディレクトリにリンクを作成することです。

次に、setfaclを使用して、ディレクトリ内の新しいファイルに対するwww-data maintans書き込み権限を確認しました。この効果は/var/wwwに再帰します。これは、実行したいことです。

ディレクトリにg+sを設定すると、その中に作成されたすべての新しいファイルとディレクトリは、親からグループの所有権を継承します。

useradd someuser
mkdir -p /home/someuser/www
mount --bind /var/www /home/someuser/www
chmod g+s /home/someuser/www
chown -R someuser:www-data /home/someuser/www
setfacl -d -m g::rwx /home/someuser/www

これでうまくいくはずです。

マウントを永続化する

当然、サーバーを再起動したときにマウントがまだ残っている必要があります。マウントを/etc/fstabに追加するのと同じくらい簡単です。すべてのプロバイダーがこのファイルに触れることを許可するわけではありませんが、ほとんどのプロバイダーはそうします。

次のような行を追加するだけです。

/var/www        /home/someuser/www        none        bind        0        0

それが機能することを確認するために再起動することをお勧めします。

15
Steen Schütt