ファイル転送は、セキュリティが低いftpではなく、sftpを使ってもらいます。
sftp用にアカウントを作ると、sshでログインできてしまうので、これを禁止します。
$ sudo vi /etc/ssh/sshd_configSubsystemの書き換えと、ファイルの最後に今回作るグループ(wwwusr)の設定を書き加えます。
: #Subsystem sftp /usr/lib/openssh/sftp-server Subsystem sftp internal-sftp : : # groupがwwwusrの場合の設定 Match group wwwusr # sftpのみ使用可 ForceCommand internal-sftp # 自分のディレクトリをルートとする ChrootDirectory /home/%usshの設定を再読み込みします。
$ sudo /etc/init.d/ssh reload
apache2用のグループ、wwwusrを作成します。
$ sudo groupadd wwwusr
グループ(wwwusr)に所属する、ユーザー(hoge)を作成します。
ホームディレクトリは手動で作るので、-M オプションを指定。
ホームディレクトリは root:root でないと、sftpが使ないので注意。
$ sudo useradd hoge -g wwwusr -M # ユーザーの作成
$ sudo passwd hoge # パスワードの設定
$ sudo mkdir /home/hoge # ホームディレクトリの作成
$ sudo mkdir /home/hoge/public_html # html用のディレクトリ作成
# オーナーの変更
$ sudo chown hoge:wwwusr /home/hoge/public_html
ここで一旦、sshで繋がらない事と、sftpで繋がる事を確認してください。
とりあえずチェック用の、ダミーページを作成しておきます。
$ sudo vi /home/hoge/public_html/index.html中身は適当に
Welcome to hoge!!
apache用の設定ファイルwwwusrを作成。
AliasMatchで全てのページが引っかかってしまうので、設定ファイルは最後読み込まれるように、
文字コード順が他の設定ファイルより後ろに来るようにしています。
$ sudo vi /etc/apache2/sites-available/wwwusr.conf
<IfModule mod_userdir.c> AliasMatch ^/([^/]+)/(.*) /home/$1/public_html/$2 </IfModule> <Directory /home/*/public_html> # オーバーライト許可 AllowOverride All # CGI 有効、SSI 有効 Options Includes ExecCGI FollowSymLinks # 全ホストからアクセス許可 Require all granted </Directory>
設定ファイル(wwwusr)と、モジュール(userdir)を有効にし、apache2を再起動。
$ sudo a2ensite wwwusr $ sudo a2enmod userdir $ sudo service apache2 restart
http://サーバー名/hoge/ にアクセスし、「Welcome to hoge!!」と表示されれば成功です。
全てのフォルダでphpを動かしたい場合は、php5.confを弄ります。
$ sudo vi /etc/apache2/mods-available/php5.conf「php_admin_value engine Off」の部分をコメントアウトします。
<FilesMatch ".+\.ph(p[345]?|t|tml)$">
SetHandler application/x-httpd-php
</FilesMatch>
<FilesMatch ".+\.phps$">
SetHandler application/x-httpd-php-source
# Deny access to raw php sources by default
# To re-enable it's recommended to enable access to the files
# only in specific virtual host or directory
Order Deny,Allow
Deny from all
</FilesMatch>
# Deny access to files without filename (e.g. '.php')
<FilesMatch "^\.ph(p[345]?|t|tml|ps)$">
Order Deny,Allow
Deny from all
</FilesMatch>
# Running PHP scripts in user directories is disabled by default
#
# To re-enable PHP in user directories comment the following lines
# (from <IfModule ...> to </IfModule>.) Do NOT set it to On as it
# prevents .htaccess files from disabling it.
<IfModule mod_userdir.c>
<Directory /home/*/public_html>
# php_admin_flag engine Off
</Directory>
</IfModule>