外付け装置上の仮想ディレクトリの定義に必要な設定
0.設定ファイル
ラズビアンのアパッチ2.4では、httpd.confはなく、/etc/apache2/Apache2.conf がその機能を果たす。
<Directory /> </Directory>
<Directory /user/share> </Directory>
<Directory /var/www/> </Directory>
他に、
ports.conf
mods-enabled配下の設定ファイル
conf-enabled配下の設定ファイル
sites-enabled配下の設定ファイル
が使用される。
1.ホームディレクトリ
/etc/apache2/sites-available/000-default.conf で定義する。
<VirtualHost *:80>
DocumentRoot /var/www/html
</VirtualHost>
このデフォルトのドキュメントルートは、Apache2 が使用するユーザ www-data のホームフォルダ /var/wwwの配下にある。
ホームフォルダは、/etc/passwd ファイルで定義する
2.仮想ディレクトリの定義
/etc/apache2/mods-available/alias.conf の中に定義を書き込む
正統的には
/etc/apache2/mods-enabled/alias.conf (シンボリック・リンク)を、定義を書き込んだファイルに置き換え、上記のファイルはテンプレートとして残す。
・編集作業は例えばコマンドラインから
$ sudo leafpad mods-available.conf
と入力してエディタを起動する。
Alias /log/ "/var/www/log/"
<Directory /var/www/log">
Options FollowSymlinks
AllowOverride None
Require all grnted
</Directory>
“Options FollowSymLinks”は、このディレクトリ内でシンボリックリンクをたどれるようにする。
“AllowOverride All”は、このディレクトリ内で” .htaccess”形式のファイルによる設定を全て有効にする。
.htaccess ファイルは、ディレクトリ毎に置かれ、Webサーバの動作をディレクトリ単位で指定・制御する。
競合するときは下位ディレクトリが優先する。
httpd.conf (apache2.conf)で、設定できる項目を制御することができる。
IDとパスワードの入力を求める
指定のURLへ自動転送
PCとスマホなど指定条件で表示コンテンツを変える
NotFoundなどのエラーメッセージをカスタマイズ
指定のディレクトリやファイルへのアクセスを禁止する
自分だけ、仲間だけ、特定の場所からだけアクセス
デフォルトファイルをindex.html以外に
ファイル一覧を許可
CGI/SSI
URL作り替え(動的→静的)
“Require all granted”は、このディレクトリ内に無条件でアクセスできるようにする、セキュリティ上は問題ある設定。
(2.3まで)
Alias /jquery/ "/etc/jquery"
<Directory /etc/jquery>
AllowOverride None
Options None
Order allow,deny
Allow from all
</Directory>
(2.4以降)
Alias /jquery/ "/etc/jquery"
<Directory /etc/jquery>
AllowOverride None
Options None
Require all granted
</Directory>
仮想ディレクトリは、mod_alias と呼ばれるモジュールの機能を使うため、
<IfModule mod_alias.c> </IfModule> の間に置く。
3.アクセス権
ファイルやフォルダのアクセス権が適切に設定されていない場合、WEBユーザーがアクセスすることができない。
You don't have permission to access ** on this server. が出る理由: Alias /hoge/B/ "/var/local/hoge/B"
エラー Alias /hoge/B/ "/var/local/hoge/B/" OK
(1) エラーログ
/var/log/apache2/error.log
アクセス権違反が生じた時の状況がわかる。
(2) Apache2のユーザとグループ
web-data ユーザ としてアクセスする
ホームディレクトリが、/var/www に設定されている(passwd)
(3) ファイル毎のアクセス権の設定
各ファイルは、uid gid を有する
アクセス者に応じた権利を設定することができる
uid が一致(所有者によるアクセス)
gid が一致(仲間によるアクセス)
それ以外(他人によるアクセス)
3種類のアクセス者それぞれに対して許す権利を定義する
rwx (読み書き算盤)3ビット(0~7)
合計9ビット
設定されているアクセス権利は、$ls -l ファイル名
によって表示することができる。
アクセス権を変更するには、
$chmod 変更するアクセス権 対象ファイル
所有者を変更するには
$chown uid:gid 対象ファイル
(4)ディレクトリのアクセス権
ファイルとは意味が異なる
r 一覧
w ファイル作成・削除
x そのディレクトリへの移動
(5)ホームディレクトリ
passwd ファイルでユーザ毎に定義されているホームディレクトリ(Apache2の場合、web-data)配下へのアクセスを許可
それ以外へのアクセスは設定しないとできない。
4.Apache2サービスの停止、再起動
修正した設定を反映させる。
$sudo service apache2 start/stop/restart
$ps -eo user,group,args|grep apache というコマンドで、apache に関して起動されているプロセスを見ると、
www-data wwwdata /usr/sbin/apache2 -k start
があり、www-data というユーザ、グループで起動されている。
$cat /etc/passwd で調べると、
www-data:x:33:33:www.data:/var/www/usr/sbin/nologin
というユーザーがいる。また、
$cat /etc/group で調べると、
www-data:x:33 というグループが存在する。
5.ディレクトリの優先表示ファイル(index.htmlなど)
,htaccess ファイルに
DirectoryIndex index.html index.htm
の1行を加える
6.ユーザとグループ
全てのユーザは、グループに属する。明示的にグループを定義しない場合、ユーザ名と同じ名前の、
他に属するユーザがないグループが作成され、そこに属する。
ユーザは、/etc/passwd に登録されている。パスワードは/shadowに暗号化されて記録されている。
グループは、/etc/group に登録されている。
ファイル、ディレクトリの所有者とグループは、ls -l で表示する。
$sudo adduser hogehoge
Enter the new value or press ENTER for the default
Full Name
Room Number
Work Phone
Home Phone
Other [ ]
$sudo gpasswd -a hogehoge sudo (hogehoge ユーザをsudoグループに追加)
$sudo gpasswd -d hogehoge sudo (削除)
$id -a hogehoge 情報を見る
$sudo userdel -r hogehoge 削除
root uid=0 gid=0 groups=0
pi uid=1000 gid=1000 groups =
1000 (pi), 4(adm), 20(dialout), 24(cdrom), 27(sudo), 29(audio),
44(video),
46(plugdev), 60(games), 100(users), 101(input), 108(netdev),
999(spi), 998(i2c), 997(gpio)
190624時点でのユーザ(etc/passwd)
root www-data messagebus daemon backup statd bin list sshd
sys irc avahi sync gnats lightdm
games nobody epmd man systemd-timesync mail systemd-resolve news systemd-bus-proxy
proxy _apt pi mysql
$who (現在ログインしているユーザ)
pi, tty7 2019-6-12 15:00
(login でroot に入ると、whoに
root, pts/0, 2019-06-24 が追加される。
7.ディレクトリ所有者、所有グループの変更にまつわる諸説(WEB)
# chown hoge.apache /home/hoge
#ls -ld /home/hoge
drwxr-xrx-w hoge.apache 101 12月 22 22:25 /home/hoge
(ディレクトリの所有権をapacheユーザに変更しておかないと「Forbidden」となるので注意)
apacheグループのhogeユーザ
apacheユーザにシェルを持たせて権限チェックするのも便利
#su - --shell=/bin/bash apache
-bash-4.1$ id
uid=48(apache) gid=48(apache) groups=48(apache)
OSデフォルト定義は、
(1) /etc/passwd
root:x:0:0:root:/root:/bin/bash
bin:x:1:1:bin:/bin//sbin/bash
daemon:x:2:2:daemon:/sbin:/sbin/nologin
ada:x:3:4:adm/var/ada
lp:x:4:7
sync:x:5:0
shutdown:x:6:0
halt::x:6:0
mail:x:8:12
operator:x:11:0
(2) /etc/group
root:x:0:
bin:x:1:
daemon:x:2:
sys:x:3:
adm:x:4
tty:x:5
dik:x:6
lp:x:7
mem:x:8
kmem:x:9
(3)$cat /usr/share/doc/setup_2.8.14/uidgid
因みに
apache 48:48 /vr/www /bin/false apache
8.USBメモリ、SSDの接続
8-1.接続
・USBメモリを接続すると、GUI上で「リムーバブル・メディアが挿入されました」と表示。ファイルマネージャで開く選択肢が提示される。
/media/pi/DA0B-1C1B
に自動的にマウントされている。
/dev/sda がデバイスr、dev/sda1 がパーティション
・SSDをUSB接続すると、同様に
/media/pi/80F8D3DCF8D3CF12(16進16桁)のデバイスが登録される。
/dev/sdb がデバイスで、sdb2がパーティション
$ cat /etc/fstab コマンドで調べると、各デバイスとフォーマットが解る
8-2.デバイスのフォーマット
(1) /dev/配下に、sda, sdb, sdc : ドライブ sda1, sda2, sda3 :パーティション
パーティションを変更するためには、fdisk を用いる。
出荷状態のUSBメモリ、SSDには、既に一つのパーティションが切られ、フォーマットされている。
なお、Linuxにおいては、多重マウントが可能であるため、Apache2のためのディスク領域とMySQLのための
ディスク領域をパーティションで区別せずとも、同じパーティションを複数のマウントポイントに割り当てることにより、
分離ぽく動作させることができる。
#mount --bind old_directory new_directory
(2)フォーマット
Linux では主要なフォーマットのUSB外部ドライブを処理できる。
ext4 fat ntfs ...
$sudo mkfs -t ext4 /dev/sdb1 を実行すると、
/dev/sdb1 contains a nffs file system と出る。
Proceed anyway? (y,N) で進めようとすると、
進む!
Creating filesystem with 28316016 4k blocks and 7086080 inodes
Filesystem UUID: 1e596100-8046-44f(-a701-15b284ba2f29
Superblock backups stored on blocks:
32768, 98....
Allocating group tables : done
Writing inode tables: done
Creating journal (131072 blocks): done
Writing superblocks and filesystem accounting information : done
(3)マウント先の変更
$sudo mount /dev/sdb1 /mnt
$sudo cp /var/www/html/* ./ でhtmlファイルなどをコピーする
$sudo umount //mnt
=> busy tonaru. そこでシャットダウンする。
●マウント先を、/var/www配下にし仮想ディレクトリ設定することにより、Apache2でアクセス表示可能となる。
/var/www/html : index.htmlなど [/」
/var/www/log : メモリ [/log」
/var/www/ssd : ドライブ 「/ssd」
(4)SSDをつないだまま再起動
/etc/fstab にデバイスを登録することにより、起動時に自動マウントすることができる。
/dev/sda1 /var/www/ssd ext4 defaults 0 0
デバイスのUUIDを登録しておくことにより、デバイスのパスを変更することができる。
UUID=XXXXXXXX-YYYY /var/www/log fat
UUID は、
$ls -l /dev/disk/by-uuid
により調べる。
なお、USB-HDDを接続した時に所定のディレクトリに自動マウントするためには、
udevの設定を行なう。udevは、/etc/udev/rules.d以下のファイルを読み込むので、
新たなルールを記述した新たなファイルを作成してここに追加する。
ACTION="add" ENV{DEVTYPE}="partition", ENV{ID_FS_UUID}="xxxx-xxxx" 云々
(5)パーティション
一つのドライブに複数のパーティションを設ける場合には、fdiskコマンドを用いる。
8ー3.FATデバイスのセキュリティ
fat形式でフォーマットされたUSBメモリ等にセキュリティを設定することはできない。
デフォルトのセキュリティがfstabに定義されている。これを変更しなければファイルコピーができない場合がある。
8-4.DVDドライブ
DVDドライブは、接続すると/dev/dvdとして認識され、/mntに自動的にマウントされる。
取り外す際には /mntの外のディレクトリに移動し、$sudo umount /mnt を実行する。
9.server-status
http://192.168.3.19/server-status をアクセスすることにより、Apache2の動作状況に関する表示がある。
Apache Server Status for 192.168.3.19 (via 192.168.3.19)
Server Version : Apache 2.4.25 (Raspbian)
・・・以下長いリスト・・・
(インターネットからの表示は禁止されている。)
これには、mod_status.so というモジュールが有効になっている必要
モジュールが認識されている必要
以上の設定ファイルが読み込まれる必要
アクセス許可
vi httpd-info.conf
<Location /server-status>
SetHandler server-status
Require ip 127
Require ip xxx.xxx.xxx.xxx
</Location>
ExtendedStatus On
$systemctl reload httpd-serviceまたは
$service apache2 restart
コマンドで確認
$watch -n l "wget -q http://127.0.0.1/server-status?auto -O
$watch -n l "curl http://127.0.0.1/server-status?auto/"
http://URL/server-status?refresh=1
●同様の手順で、server-info ぞ
10.アパッチによるファイル、フォルダへのアクセス設定
Apache2.conf, alias.conf ナドの中で、フォルダ毎に閲覧可不可を設定することができる。
Ver.2.4 での変更に、多くのSEがはめられている。
grant all deny all 以外の細かい設定はどうするか?
100.日本語化(190612)
$ sudo apt-get update
$ sudo apt-get install fcitx-mozc
http://ftp.jaist.ac.jp/raspbian-archive/