ファイル転送は、セキュリティが低い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>