外付け装置上の仮想ディレクトリの定義に必要な設定

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/