pam-mount を利用してログイン時にユーザーホームをcifsマウントします。設定ファイルの書き方はとても簡単になりました。
このページは「Squeezeを40台にコピーするまでの手順(2010/9/10)」(3)の詳細です。
直接関係するパッケージはpam_mountとcifs-utilsですが、関連で必要なパッケージはapt任せでインストールしています。認証はすでにldapになっていてlibnss-ldapとlibpam-ldapとその関連がインストールされています。
libnss-ldap (264-2.2) 認証ですでに libpam-ldap (184-8.5) 認証ですでに nscd (2.11.2-2) 自動で libhx22 (3.4-1) 自動で libpam-mount (1.33-2) のちに (2.5-3) にアップグレード cifs-utils (2:4.5-2) samba-common (2:3.4.8~dfsg-2) 自動で samba-common-bin (2:3.4.8~dfsg-2) 自動で
pam_mountの設定ファイルは/etc/security/pam_mount.conf.xmlです。以前の経験が邪魔をして、試行錯誤がありましたが、結局 <volume の部分を書けばよいだけでした。楽になったものです。
# cat /etc/security/pam_mount.conf.xml <?xml version="1.0" encoding="utf-8" ?> <!DOCTYPE pam_mount SYSTEM "pam_mount.conf.xml.dtd"> <!-- See pam_mount.conf(5) for a description. --> <pam_mount> <!-- debug should come before everything else, since this file is still processed in a single pass from top-to-bottom --> <debug enable="0" /> <!-- Volume definitions --> <volume fstype="cifs" server="jonah" path="%(USER)" mountpoint="~" options="nobrl,dir_mode=0700,file_mode=0600"> <not> <or> <user>root</user> <user>beta</user> </or> </not> </volume> <!-- pam_mount parameters: General tunables --> <!-- <luserconf name=".pam_mount.conf.xml" /> --> <!-- Note that commenting out mntoptions will give you the defaults. You will need to explicitly initialize it with the empty string to reset the defaults to nothing. --> <mntoptions allow="nosuid,nodev,loop,encryption,fsck,nonempty,allow_root,allow_other" /> <!-- <mntoptions deny="suid,dev" /> <mntoptions allow="*" /> <mntoptions deny="*" /> --> <mntoptions require="nosuid,nodev" /> <path>/sbin:/bin:/usr/sbin:/usr/bin:/usr/local/sbin:/usr/local/bin</path> <logout wait="0" hup="0" term="0" kill="0" /> <!-- pam_mount parameters: Volume-related --> <mkmountpoint enable="1" remove="true" /> </pam_mount>
以前のバージョンではコメントとして書き込まれたものを参考に設定していましたが、今回(1.33-2)はほとんど何も書いてありません。マニュアルを読みながら以前のように <smbmount>、<smbumount>、<volume>の3つの書き込みをしたのですが、結局マニュアルに詳しく説明していなかった前2つを消去してお任せにするとうまく動きました。
この後のアップグレード(1.33-2 → 2.5-3)で、<path>の部分もなくなりました。
smbmountでなくcifsにしているのは以前の経験からです。smbmountに mount -t cifs と書いてcifsを使うことで不具合を解消したことがあります。
smbの接続では \\サーバー名\サービス名 で接続先になります。ここで server= にはサーバー名、path= にはサービス名を書きます。%(USER)は変数でマウントするユーザー名なのですがユーザーホームのサービス名でもあります。mountpoint= はローカル側のマウントポイントで、ユーザーホームを表します。
ユーザー名をalphaとすれば次のようなマウントを指示していることになります。
mount -t cifs //jonah/alpha /home/alpha -o "nobrl,dir_mode=0700,file_mode=0600"
「Firefoxをcifs(smb)マウントされたホームで使う(2010/4/27)」で解説しています。
Firefoxが内部で利用しているsqliteがファイルをロックできない環境では機能しなくなることへの対策です。なければFirefoxが機能しないことを再度確認しました。
「Linuxクライアントへの移行」の「smb(cifs)マウントの実行ビット (2007/12/27)」で解説しています。
普通に作ったファイルは実行ビットをたてずに、パーミッションの操作により実行可能にできるようにするものです。
UNIX/Linuxのファイルシステムではユーザー、グループ、その他のそれぞれに「読み込み」「書き込み」「実行」の権限を設定できます。しかし、cifs(smbfs)では所有者の概念はなく「読み込み専用」「アーカイブ」「システムファイル」「隠しファイル」などのフラグしかありません。操作の許可というよりは、ファイルの性格を示すものです。実行可能のフラグは他のフラグを流用して使っています。
C言語やスクリプト言語の学習には実行権の指定の概念は欠かせませんからこの設定が必要です。
<not>や<or>で書かれた部分はマウントするユーザーを選択したり制限するものです。これによってユーザーごとやグループごとにマウント先のサーバーを別のものにしたり、マウント先を別のディレクトリにしたりできるようになりました。
今回のバージョンから加わった記法のようです。
書き方はあまり美しくないように思いますが、上記の指定は、root という名前のユーザー(<user>)であるか(<or>)、beta という名前のユーザーの場合、このマウントはしない(<not>) という指定です。
rootはサーバー側でアクセスできない様に制限しているので、rootのホームをマウントできません。以前のpam_mount ではエラーでマウントを諦めてくれたのですが、今回の pam_mount ではデスクトップからパッケージマネージャを使ったり、スーパユーザーモードのターミナルを使ったりroot権限の必要なソフトウェアを使うときにもマウントしようとして失敗し、結果としてソフトウェアが使えません。
また、betaはテストユーザーでサーバーが止まった時でもローカルで使えるユーザーとして残して置きたいユーザーです。これはローカルなユーザーホームを使わせるためにマウントから除外します。
WindowsMeをクライアントに移動ユーザープロファイルのシステムを運用していた関係で、クライアントをLinuxに変更する時に同じ場所をWindowsからはマイドキュメントフォルダとして、Linuxからはユーザーホームとして共用したかったのです。Linuxではこの様な時にNFSとオートマウントを使うのが普通でこのシステムも一度試したのですが、NFSversion3はユーザー認証がなく、uidが同じならアクセスできてしまいます。KnoppixなどのCD起動のシステムが一般化するとこれではまずい。ユーザー認証のあるNFSversion4は当時まだ使えませんでした。
この様な時、Windowsのために既にあるsmb共有をpam-mountを使えば利用できることがわかり取り組んだのが始まりです。
Linuxクライアントを使用してみると、ソフトウェアの充実と使い勝手の改良が進んだ結果Windowsを維持しておく必要がないことが判明しました。新しいマザーボードではWindowsMe用のドライバがなく、新しいWindowsは組み立てるコンピュータのどの部品よりも高価です。今回の40台はLinuxのみの構成としました。
将来的にはcifs(smbfs)共有を維持していく必要がありませんからNFSv4やsshfsの使用を検討する必要がありそうです。
上記の2つのオプションを考えると無理をして使っていると感じます。
pamは様々な認証方式を使えるようにし、同時にその認証を使って様々なプログラムを実行します。pam-mountではファイルシステムのマウントをおこないます。
/etc/security/pam_mount.conf.xml はどのようなマウントをするのかの設定でしたが、pamにpam-mountを実行することを指定しなければなりません。これは従来なかなか面倒な作業でしたが、今回のバージョンではまったく自動で設定されて触る必要がありませんでした。これはめでたい。昔どれだけ煩わしかったかは「Linuxクライアントへの移行」の「ldap認証とpam_mount(2007/9/22)」で解説しています。
unix, ldap, pam_mount の3つが絡むと不自然な書き方になり、どうにかならないかと思っていたが、unix, ldapの組み合わせの時点で自然な書き方ができるようになってしかも、自動で書換えられた。長年のもやもやが解消
# cat /etc/pam.d/common-auth # # /etc/pam.d/common-auth - authentication settings common to all services # # This file is included from other service-specific PAM config files, # and should contain a list of the authentication modules that define # the central authentication scheme for use on the system # (e.g., /etc/shadow, LDAP, Kerberos, etc.). The default is to use the # traditional Unix authentication mechanisms. # # As of pam 1.0.1-6, this file is managed by pam-auth-update by default. # To take advantage of this, it is recommended that you configure any # local modules either before or after the default block, and use # pam-auth-update to manage selection of other modules. See # pam-auth-update(8) for details. # here are the per-package modules (the "Primary" block) auth [success=2 default=ignore] pam_unix.so nullok_secure auth [success=1 default=ignore] pam_ldap.so use_first_pass # here's the fallback if no module succeeds auth requisite pam_deny.so # prime the stack with a positive return value if there isn't one already; # this avoids us returning an error just because nothing sets a success code # since the modules above will each just jump around auth required pam_permit.so # and here are more per-package modules (the "Additional" block) auth optional pam_mount.so # end of pam-auth-update config root@star39:/home/beta#