FTP接続と開発者向けユーザディレクトリの設定について(セキュアにするには)
2019年9月26日Linux Tips, トピックス
WEBサーバを設置して、複数の業者にコンテンツを任せようとするとついてまわるのはアクセス権の問題が圧倒的に多いのではないかと思う。WEBサーバはよく使われるのはApache Webサーバだが、そうするとフォルダーやファイルに対してのアクセス権限はデフォルトで行くならapacheユーザ、apacheグループになるだろう。
つまりコンテンツレベルのディレクトリ、ファイルアクセスはWEBサーバの設定に設置したUser,Groupディレクティブが使用されるわけです。WORDPRESSやフレームワーク、MovableType等様々ありますがこれらのプログラムでできているコンテンツはこのディレクティブの設定で動作します。
要するにCMSのようなブラウザ画面で更新ならapacheユーザ、グループでアクセスすることになります。FTPでアクセスする場合は、apacheユーザ、グループでアクセスすることは無いでしょう。それは危険だからです。
話は長くなりましたが、そうするとFTPで直接アクセスして編集するとなると何が怖いのか考えてみると、上位フォルダーから辿ってシステム探索されハッキングされることかもしれません。サーバ事業者間ならsftpでやるところですがWEBデザイン系が主体だったり、個人事業主がWEB制作に携わっているならvsftpdでchroot及びover SSLを行うことになるでしょう。
chrootすれば、ユーザがログインしたフォルダーより上の階層ディレクトリへ行くことができません。
しかし、欠点があります。WEBサーバのドキュメントルートは大体は/var/wwwの直下にあります。
ユーザは/home/user01のような感じのフォルダーへログインすることでしょう。離れたフォルダーへアクセスするにはソフトリンク(ln -s 大本 リンク先)を使うのが鉄則ですが残念ながらchrootするとソフトリンクしたフォルダーへはアクセスができません。
通常ならここで諦めて/etc/vsftpd/chroot_listにchrootを無効化するユーザを書くことになるかもしれません。
リファレンス:Vsftpdのインストール、ftps、chroot設定など大変参考になるサイト
しかし、chrootを外してセキュリティ設定を緩めるのは嫌ですよね!
そこでchrootでもソフトリンクの如くフォルダー間を接続する方法があります。それはmountコマンドの「–bind」オプションです。
下記のような感じでフォルダーをマウントすればchroot環境でも利用が可能です。
1 2 3 4 5 6 |
マウントする場合) # mount --bind /var/www/vhosts /home/user01/wwwroot ※マウント先のwwwrootは予め作成する必要ありません。 マウント解除したい場合) # umount /var/www/vhosts /home/user01/wwwroot ※解除したあとにwwwrootを確認すると空のフォルダーになっています。 |
これが済んだら次に考慮すべきはファイルのパーミッションです。大抵はapacheユーザ、グループでドキュメントルートは設定されているはずです。
コンテンツに自由にアクセスするにはapacheグループにユーザを追加します。しかし、WORDPRESSのようなCMSやフレームワークはフォルダー階層構造が複雑です。
グループユーザに対しchmodで775や664の設定をくまなく隅々まで実施するのは骨が折れる作業です。
でもこれを簡単に行う方法があります。findとxargsをパイプで組み合わせれば簡単にディレクトリとファイルのパーミッションを再帰的に探索して
設定してくれます。たまに連続置換などでお世話になるコマンドかと思いますがまさにそれを使います。
apacheグループに開発ユーザを追加した場合の理想の権限
- ファイルの場合:664
- ディレクトリの場合:775
以下のコマンドをコンテンツのフォルダーへ移動して実施すると一括でパーミッションを変更することができます。非常に楽ちんですね!
ファイルの場合のドキュメントルート配下権限一括置換)
1 2 3 |
# find . -type f -print | xargs chmod 664 Or # find . -type f -exec chmod 664 {} + |
ディレクトリの場合のドキュメントルート配下権限一括置換)
1 2 3 |
# find . -type d -print | xargs chmod 775 Or # find . -type d -exec chmod 775 {} + |