生徒のホームディレクトリはサーバーのユーザーホームをsmbでマウントして使っている。なぜsmbか,その方法はというのはページを変えて説明することにし,ここではそのトラブルと解決を説明する。
ホームディレクトリにあるテキストファイルなどをダブルクリックすると次のようなダイアログが出る。
これはこのファィルの実行ビットがたっているからで,そうでなければなにもいわずにエディタで開かれる。
このファイルのパーミッション
rwx --- --- hoge:hoge log.txt
実際には作成日時やバイト数もわかるが省略。このファイルの所有者は hoge で,hoge は 読み(r),書き(w),実行(x)することができる。このパーミッションを0700であるという。
このファィルの内容は実行する必要のないものなので,
rw- --- --- hoge:hoge log.txt
になっているのが正しい。このパーミッションを0600という。
Windowsにもこのようなものがあり,ファイル属性と呼ばれている。Unix(linux)のパーミッションとは一致しない。Windowsでは実行するか開くかは拡張子で決まるので実行のビットは最近までなかったし,気にする必要はなかった。しかし,ここで実行されるのは困る。普通は何も起こらないが,たまたま内容がシェルスクリプトとして解釈できるものだと予期しない結果になるかもしれないし,ウェブから保存したファイルに何か仕掛けられるとセキュリティ上問題である。
サーバーはsambaを使ってユーザーホームを提供している。パーミッションを決するのはその設定ファイルであるsmb.confの create mask である。
create mask = 0700
これを 0600 にすれば新規ファイルのパーミッションは0600になる。
create mask = 0600
ところが,これだと実行ビットを立てたいときに立てることができない。普通はこれでも問題ないのだが,シェルスクリプトの勉強をしようというときこれができなければ実行することができない。
unixにおけるシェルスクリプトは
(1)スクリプトファイルの作成 0600 (2)chmod u+x で実行ビットを立てる 0700 (3)実行
という手順を踏む。(古典的なunixでは0644と0744)シェルスクリプトはファイルの削除など間違えると困る処理も含められるので不用意に実行されることがないよう,手間をかけるようにできている。さらに,パスにカレントディレクトリを含めず,ファイル名の前に ./ をつけて実行するか,bin など実行用のディレクトリに格納することとなっている。
ところがsmbでマウントした部分では,新規ファイルは0700になってしまうか,0600だが0700にできないかのどちらかになった。
もう一つsambaには security mask というものもある。現在のsambaでは security mask がパーミッションの制限で,create mask は新規ファイルのデフォルトという位置づけのようにマニュアルから読みとれる。そのとおりになるのなら,
create mask = 0600 security mask = 0700
とすれば良いはずだが,そうはならないところが悩みどころであった。
/etc/security/pam_mount.conf の中にもマスクを書くことができるが,unix extention が有効になったsambaではこれは無視されると書いてあり,その通りになる。
volume * smbfs jonah & /home/& file_mode=0600 - -
smb.conf に,
map archive = No create mask = 0700
と書く。
map archive はsmb.confの設定例や説明には書いてない。ほぼどのサーバーでも変更が必要にならないだろうということなのだろう。testparmのvオプションで見ることができる。
# testparm -v
map archive だけYesに設定されている。
map acl inherit = No map system = No map hidden = No map archive = Yes
map archive は dos の archive属性を user の x ビットで代替するもの。新規ファイルはdosからみればarchiveが必要なのでonにするということだった。たしかに touch で作った空のファィルは x がたたない。
現在のsambaでは security mask がパーミッションの制限で,create mask は新規ファイルのデフォルトという位置づけといわれるが,私の記憶ではversion1.9.18のあたりではそんな区別はなかった。はじめはWindows9Xのみを相手にしたものが,NTに対応するために security mask が導入され, create mask がの役割も変わっていったのだろう。map archive もそんな中で当時の必要から生まれてきたものに違いない。