当社はIT技術のオンライン教育を得意としたセミナー専門会社です。 | 一戸英男

ITエンジニアの技術力UPをお約束します。

FTP接続と開発者向けユーザディレクトリの設定について(セキュアにするには)

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環境でも利用が可能です。



これが済んだら次に考慮すべきはファイルのパーミッションです。大抵はapacheユーザ、グループでドキュメントルートは設定されているはずです。


コンテンツに自由にアクセスするにはapacheグループにユーザを追加します。しかし、WORDPRESSのようなCMSやフレームワークはフォルダー階層構造が複雑です。
グループユーザに対しchmodで775や664の設定をくまなく隅々まで実施するのは骨が折れる作業です。


でもこれを簡単に行う方法があります。findとxargsをパイプで組み合わせれば簡単にディレクトリとファイルのパーミッションを再帰的に探索して
設定してくれます。たまに連続置換などでお世話になるコマンドかと思いますがまさにそれを使います。

apacheグループに開発ユーザを追加した場合の理想の権限

  • ファイルの場合:664
  • ディレクトリの場合:775

以下のコマンドをコンテンツのフォルダーへ移動して実施すると一括でパーミッションを変更することができます。非常に楽ちんですね!

ファイルの場合のドキュメントルート配下権限一括置換)

ディレクトリの場合のドキュメントルート配下権限一括置換)

※以上でフォルダーの権限は置換されます。