展開しようとしているこのセットアップについて混乱しています。皆さんの誰かが私に手を貸してくれることを願っています。
背景情報
サーバーは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
私が試したこと
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で所有するファイル/ディレクトリを変更できるようにすることを考えていました。しかし、何らかの理由で、これはセキュリティ面での愚かな動きになると思います。
私がやったことは、ユーザーをホームディレクトリに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
それが機能することを確認するために再起動することをお勧めします。