のらぬこの日常を描く

ノージャンルのお役立ち情報やアニメとゲームの話、ソフトウェア開発に関する話などを中心としたブログです。

sambaの設定とxargs

linux PCでsambaサーバを立てることにした。

作業手順などの記録を残して億。

要件 

  • 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
  1. vote files で、.で始まる設定ファイル類を Windowsから見えないようにしている。ただし、『.』 と 『..』 、はWindowsから非表示にしてしまうとディレクトリ自体にアクセスできなくなるため、その二つは非表示対象から除外する。
  2. 新規ファイル、ディレクトリのグループ名は 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

を参考にさせていただきました。感謝です。

*1:chmod g+s ...

*2:.sshとか変更すると問題おきそうな部分は除外する