SambaファイルサーバにLinuxからアクセス

ファイルサーバを共有するのによくある構成は, Linux機をSambaサーバにして, 複数のWindows機からアクセスし、Windows機どうしでファイル・フォルダを共有する, という形です。

Linux機どうしだと、NFSを使うことになると思います。

しかし, LinuxはCIFS/SMBファイルシステムをローカルにマウントできるので、クライアントにWindows機、Linux機が混在している場合, Sambaだけで済ます手もあります。

ここでは, SambaサーバにLinuxクライアントからもアクセスするために, 追加でおこなう設定などを解説します。

mount.cifsコマンド

Fedora Core 6では、samba-clientパッケージに mount.cifsコマンドがある。これでCIFSサーバのディレクトリをローカルにマウントできる。

# mount.cifs --verbose -o vers=2.1,username=ユーザ名,password=パスワード,domain=ドメイン名 //サーバのホスト名/公開パス /mnt/マウントポイント

-oのあとに続けるオプションの意味。

username
Windowsログイン名
password
Windowsログインパスワード
domain
ユーザのドメイン(またはワークグループ)名
vers
SMBバージョン。"2.1"でWindows 7互換。デフォルト値は"1.0".

Sambaサーバの追加設定

(1) ファイル名の文字コード

(2008.8.10 この節を加筆。)

日本語のための文字集合として、JIS X 0208 を拡張した JIS X 0213が登場しました。

2000年の JIS X 0213:2000 のときは Unicode のコードポイントとの対応が完全ではなかったりして、まともな実装は現れず、広まりませんでした。

2004年版 (JIS X 0213:2004; JIS2004) はそういった問題もほぼなくなり、Windows Vista や Mac OS X など、実装も現れてきました。

WindowsクライアントとSambaサーバ間は、現在では、Unicode で通信することになっています。そこは問題ありません。

Sambaサーバ側でのファイル名の文字コードに注意が必要です。

JIS X 0213では文字がずいぶん追加されたため、EUC-JP またはシフトJISにコード化するには、新たに専用のテーブルが必要です。が、Linux ではまともなテーブルはありません。

Sambaサーバでは、文字コードは必ずUnicodeベースのものにしなければなりません。Linux ではUTF-8にします。

smb.conf ファイルでの、サーバ側の文字コードは unix charset で指定します。初期値はUTF-8 です。

[global]
  ; unix charset = UTF-8

(2) ファイル名の取り扱い

Sambaサーバで公開しているフォルダをWindows機だけから使う場合は、あまり設定に気を付けることはありません。

しかし、SambaサーバにUNIXユーザとしてログインして、サーバ内でローカルにファイルを扱う場合は、いくつか設定を変えておいたほうがいいところがあります。

1. sshでサーバにログイン後、Windowsファイル名として不正な名前のファイルを作る

$ touch fuga\:x
$ touch fuga\?y

2. ローカルにSMBファイルシステムをマウントし、lsする

$ ls
FWK4C8~0
FXY2CP~A 

デフォルト値は, case sensitive = auto, preserve case = yes (クライアントからの大文字小文字をそのまま利用), short preserve case = yes.

[global]
# ファイル名の大文字,小文字を区別するようにする。
  ; preserve case = yes
        # 'no'だと,ファイル作成時にdefault caseの指定通り変換される

  ; short preserve case = yes
        # 常にpreserve caseと同じにする
#   case sensitive = yes
        # これを'yes'にするとWindowsエクスプローラからファイルが見えなくなる

ファイルの属性

(2014.5) DOSアーカイブ属性をSambaサーバでどのように保存するか。

昔は "map archive" で指定していました。= yesで UNIXの実行属性が使われます。しかしそれでは、UNIX側でもそのファイルを使うときに, 本当の実行ファイルと区別がつかなくなります。

今は "store dos attributes" を使います。= yes にすると, 拡張属性に格納されます。

(2016.12) ドキュメント上は, store dos attributes = yes の場合には map archive は無視される、となっているが、実際の挙動はそのようになっていない。実行属性が併用される。

結局、次のように設定すればよい。

[共有フォルダ名]
    store dos attributes = yes
    map archive = no

getfattrコマンドで確認できる。

$ getfattr fuga.odp
# file: fuga.odp
user.DOSATTRIB

(3) シンボリックリンク

wide links パラメータは、Sambaが公開するディレクトリの外へのリンクを辿れるようにするかを決めます。yes で辿れ、no だと禁止します。noにするとパフォーマンスの問題があるので、yes でいいと思います。

UNIX側でディレクトリへのシンボリックリンクを張っていると、Windowsエクスプローラからシンボリックリンクを削除できません(リンク先のフォルダの中身を削除してしまう)。あるいは無限にフォルダを展開しようとすることがあります。

Sambaサーバ専用だとこの問題は発生しませんが、UNIX側にもログインするような使い方をするときは、シンボリックリンクを辿るのを禁止しておいたほうがいいでしょう。

(2014.11加筆。)
次の例は, シンボリックリンクを辿るようにします。この場合, unix extensions = no が必須. これがないと, クライアント側で「アクセス許可がありません。」エラーになります。

[global]
    unix extensions = no

[共有フォルダ名]
    wide links = yes
    follow symlinks = yes