Monthly Archives: 5月 2015

[FreeBSD][メモ] ACL(Access Control Lists)を有効にする

Pocket

ACLとは、一般的なUNIXのパーミッション制御をさらに拡張したものである。
FreeBSDのハンドブックは以下の通りであるが、どうも実動作とハンドブックの内容に食い違いがあるようなのでメモ。

https://www.freebsd.org/doc/ja_JP.eucJP/books/handbook/fs-acl.html
https://www.freebsd.org/doc/en/books/handbook/fs-acl.html

ACLはファイルシステムごとに有効/無効を設定できる。
設定変更は、そのファイルシステムをumountするか、リードオンリーの状態でしかできない。
したがって、ルートファイルシステムの設定変更は、通常起動した後ではできない。

 

ACLの有効/無効化

GENERICカーネルであればACLが使える。

ACLを有効にするには、/etc/fstabの当該ファイルシステムオプションにaclsを追加し、再起動すればよい。
もちろん、ルートファイルシステム以外なら、再起動しないまでも、いったんumount、mountすればよい。
mount -uによる再マウントでは有効にならないので注意
fstab設定例は後述

 

ACLの有効/無効化のしくみ

ファイルシステムヘッダのスーパーブロックにACLの有効/無効フラグがある。tunefsコマンドでフラグを変更できる。
fstabでaclsが指定されていると、マシン起動時に、tunefsでスーパーブロックを書き換えののち、マウントされる。

 

注意点(一度ACLを有効にしたら永続…?)

ハンドブックによれば、一度ACLを有効にしたらその設定が永続する、という。
「スーパブロックフラグを設定すると、fstab に記述されていなかったり、デバイスの順番が変わってしまっても、常に ACLs が有効な状態でマウントされます」
※英語版も同じ。

 

ハンドブックとの違い?

ところが手元のマシンの動作を見ると、tunefsによる設定に関わらず、fstabのオプションしか参照していないようだ。
つまり、fstabでaclsを削ると、ACL無効でマウントされるようだ。
(fstabにaclsが無い場合、tunefs -a disableが実行される?)

それはともかく、上記を踏まえた設定例を示す。

 

fstabの設定変更

fstabのOptionsのところ、カンマに続けて「acls」と記載。
ルートファイルシステムなら、再起動。
ルートファイルシステム以外なら、umount,mountでよい。
ACLの設定はハンドブック参照。

設定前

設定後

以上。tunefsは考えなくてよし。

以下は記録。

 

tunefsのうごき

tunefs -pでACLの状態を確認できる。

tunefs -a enable/disableでACLの有効、無効を設定できる

/dev/ada0p2 は、ルートファイルシステムなのだが、そのまま起動すると、あるいは再起動するとtunefs -pの結果がdisabledに戻ってしまう。
さらに分からないのは、fstabにaclsの記載あるなしに関わらずdisabledになること。

 

実験(fstabしか見ていない…?)

fstabにaclsを記載し、あるファイルにsetfaclでACLを設定する。
ls -laで確認すると以下のように+が付く。

その後、fstabからaclsを削除し、再起動したのち、ls -laで確認すると+がない。

なお、上記の再起動前後を通してtunefs -pの結果はdisabled.

[FreeBSD] Samba 3.xからSamba 4.xへの移行

Pocket

Sambaの4.2.0リリースに伴い、3系列サポートが終了する、とのことなので、4.xに移行した。
顛末を記す。

Samba 3系列のサポート終了について

一応はソースを。
4.2.0のリリースノートに記載されている。

https://www.samba.org/samba/history/samba-4.2.0.html

With the final release of Samba 4.2, the last series of Samba 3 has been discontinued! People still running 3.6.x or earlier,should consider moving to a more recent and maintained version (4.0 – 4.2).

 

Samba 4について(Active DirectoryにしなくてもOK)

Samba 4はActive Directoryに対応しているが、従来のドメイン管理(NT4-style)もできる。
Active Directory対応の追加により、従来機能が差し替わることはないし、テストも続けられる。

なお、3から4へのアップデートで、自動的にActive Directoryへ変更されることはない。

 

移行先の選定(4.1にした)

どうせ移行するなら4.2がいいなと思ったんだけど、2015/4/28現在、4.2のports/packageはない。
しかたなく4.1にした。

 

移行にあたっての注意

4へのアップグレードにあたり注意すべきことは以下の三点である。
うっかりすると、マシン起動時にsambaが起動しなかったり、共有が消えたり、ユーザがアクセスできなくなったりする。あな恐ろし。

  1. rc.conf(マシン起動時のsamba起動設定)の書き換え
  2. samba設定ファイルの移行
  3. sambaユーザデータベースの移行

 

インストール(アップグレード)の流れ

全体の流れを示す。

  1. samba3を停める。
  2. samba3の削除
  3. samba4のインストール
  4. rc.confの書き換え
  5. 設定ファイルの移管
  6. ユーザーデータベースの移管
  7. 起動

 

Samba3の停止

アンインストールの前に。
なお、serviceコマンドで使うSambaの識別子は、3の”samba”が4では”samba_server”に変わる(後述)。

 

Samba3の削除とSamba4のインストール

pkgならsamba4のインストール時にsamba3を削除してくれる。
samba4インストール後のメッセージは超重要。

 

rc.confの書き換え

本記事の手順上、rc.confの書き換えをここに記載しているが、本来は設定ファイルの正常性確認や検証を済ませてからのほうがよい。

sambaの3と4では、rc.confの書式が違う。
ここを忘れたままだと、serviceコマンドでのsambaサーバの操作ができないし、次回のマシン再起動時にsambaが自動起動しない。

samba3だと;
samba_enable=”YES”
samba4だと;
samba_server_enable=”YES”

したがって、rc.confは以下のようになる。
もちろん、samba3の方は、不要なら削除して構わない。

 

設定ファイルの移管

sambaの3と4では、設定ファイルの場所は/usr/local/etc/の下で変更ないのだが、ファイル名が異なる。
気づかずにsamba4を起動すると共有フォルダが消える。

samba3だと;
smb.conf
samba4だと;
smb4.conf

samba3の書式はsamba4でも有効なので、コピーするかリンクを張る。
私はリンクにしておいた。

ユーザーデータベースの移管

samba向けのユーザデータベースも移管が必要である。
これをしないとユーザごとの認証ができない。
これには、ほとほと困らされた。

ユーザデータベースの置き場所は以下の通り。

samba3だと;
/usr/local/etc/samba/
samba4だと;
/var/db/samba4/private/

したがって、/var/db/samba4/privateとディレクトリを作成し、/usr/local/etc/samba/の下にあるファイルをコピーすればよい。

なお、samba4のユーザデータベース置き場をどう調べたかというと、ビルドオプションを表示させてPRIVATE_DIRを見た。
(こんなのすぐ分かるかよ!)

 

起動

起動前にtestparmでsmb4.confのチェックをするのはいい習慣であります。

では起動。
rc.confでsamba_server_enable=”YES”と記載しているなら、以下の通り。

していないなら、以下のように「onestart」にする。

以上。