sambaの設定とxargs
作業手順などの記録を残して億。
要件
- home directoryをまるごと公開したい
- home直下にある ~/.xxxx系の設定ファイルは WindowsPCからは見たくない
- いずれWebDAVとして外にも公開したい
作業手順
/etc/samba/smb.conf の作成
ホームディレクトリ公開部分のみ載せる。
[homes] comment = Home Directories path = %H browseable = no writable = yes veto files = /.??*/ # Windowsから非表示にするファイル、ディレクトリの設定 force group = mikenekosystem # ファイル、ディレクトリ作成時のグループ名 create mask = 0664 force create mode = 0664 security mask = 0664 force security mode = 0664 directory mask = 0775 force directory mode = 0775 directory security mask = 0775 force directory security mode = 0775
- vote files で、.で始まる設定ファイル類を Windowsから見えないようにしている。ただし、『.』 と 『..』 、はWindowsから非表示にしてしまうとディレクトリ自体にアクセスできなくなるため、その二つは非表示対象から除外する。
- 新規ファイル、ディレクトリのグループ名は setID で設定するため*1、force group の設定は不要かもしれない。
既存ファイル、ディレクトリの所有者及びグループを変更
$ chown -R mikeneko:mikenekosystem **2
Linux上で作業した時も、ファイル、ディレクトリの新規作成時のオーナーを『mikeneko:mikenekosystem』とする。
これをやるために、公開ディレクトリ配下の全ディレクトリに chmod g+s を適用する。
昔これをやったときはRubyスクリプト書いたんだが、そんなことしなくてもコマンド1行で出来ることがわかった。
ダメな例
$ chmod -R g+s *
これだと、g+s が ファイルにも適用されてしまう。
ちょっと残念な例
$ find -type d | xargs | chmod g+s
まず、find -type dでカレント以下の全ディレクトリを列挙する。
それをxargsに渡すと、渡された入力の数だけ、入力を引数として後続のコマンドを呼び出してくれる。
ただし、xargsは スペースを区切り文字とみなすため、ディレクトリにスペースが入っているとうまく動かない。
解決策
以下を homeディレクトリで実行する。
$ find -type d -print0 | xargs -0 | chmod g+s
これで上手くいく。
find -print0は、区切り文字をnull文字とするオプション、xargs -0 は入力がnull文字区切りであるとみなすオプション。
xargs については
http://openlab.dino.co.jp/2008/02/20/133431188.html
を参考にさせていただきました。感謝です。