samba Tips

ファイル名の文字コードを変換する

ファイル名の変換にはconvmvを使った。以下のようにして使うと、再帰的にディレクトリをもぐっていって、ファイル名を変換してくれる。

ファイル名に変な記号が入っていても変換してくれたので、変換精度は割と良いのじゃなかろうか。

例)euc-jpからUTF-8に変換する

convmv --notest -f euc-jp -t utf8 -r * 

ファイルを開くと更新日時が変わってしまう

対処方法

dos filetimes = yes

原因 ローカルPC上にあるExcelやWorkのファイルを開くと、開いたときに更新日時が新しくなり、何も変更せずにファイルを閉じると更新日時が元に戻る、という動きをするようです。 samba上に置いたファイルでファイルの作成者とは別のユーザが同じことをやると、更新日時を元に戻そうとするときに権限の問題で操作できず、新しい日時のままになってしまうという現象のようです。 実際に試してみたところ、自分で置いたファイルを開いた場合は大丈夫でした。

Unix側からwindows共有にアクセス

smbclient

以下のコマンドはUNIX機からWindowsXX上にある共有tempへの逆samba

Windows機
コンピュータ名:p4845
ユーザID:userName
パスワード:passWord
# smbclient \\\\p4845\\temp -U userName%passWord

Sambaでユーザ認証ダイアログを省略するには

SambaでGuestアクセスを認め、登録されたユーザ以外からのアクセスがあった場合はGuestとみなし、認証ダイアログを省略するには、 smb.confに

guest ok = yes
guest account = guest
map to guest = Bad User

一般ユーザで smbpasswd が使えない

smb.conf において bind interfaces only が設定されているが、 127.0.0.1 のネットワークアドレスが interfaces パラメータに指定されていない場合は、 以下に示すような理由のため、 smbpasswd(8) や swat(8) などが 期待したように動作しないことがある。

ユーザの SMB パスワードを変更するために、 smbpasswd はデフォルトで localhost - 127.0.0.1 のアドレスに SMB クライアントとして接続を行ない、パスワード変更要求を送信する。 bind interfaces only が設定されているにも関わらず、 127.0.0.1 のネットワークアドレスが interfaces パラメータに含まれていなかった場合、 smbpasswd のデフォルトのモードでは接続に失敗してしまう。 smbpasswd については、 smbpasswd(8) に -r remote machine パラメータを指定して、 remote machine にホストのプライマリインタフェースのIPアドレスを設定することにより、 強制的にホストのプライマリIPインタフェースを利用させることも可能である。

つまる所、一般ユーザでの smbpassd と root でのsmbpasswdでは起動の仕方が異なる、rootでは直接smbpasswdを書き換えるが一般ユーザの場合はserver/clientモードでの書き換えつまり127.0.0.1を使うかららしい。

以下↓に変更しました。

interfaces = 192.168.0.10 127.0.0.1
bind interfaces only = Yes

そういや、swatでステータスを見たとき不思議に思ったんだがsmbdが起動中にも関わらずswat上では停止中と表示されてたんだよなー。で、上記の設定にしてみたらあっけなくswat上でも「起動中」と表示されるようになったよ!!

. で始まるファイルを表示させない

「.」からはじまるファイル名を Windows 側から表示させないようにする方法 を参考にしてください。

http://www.samba.gr.jp/project/kb/J0/0/26.html

[homes]
   veto files = /.??*/

現実的にはこのような設定にするのが妥当です。ただしこの場合、 .a や .~ といった名前のファイルは、表示やアクセスが可能なままですので、これらのファイル名は UNIX 上で使用しないようにするなど運用上での対策をとって下さい。

ゲストユーザーからプリンタ、共有フォルダを使えるように

プリンタと共有フォルダは誰でも使えたほうが便利です。そのための設定をしておくことにします。次の各行を追加します

 [global]
   map to guest = Bad User
   coding system = EUC
   client code page = 932
 [printers]
   guest = ok
 [public]
   guest = ok
 [share]
   write list = @samba
   read list = @samba
   create mask = 0774
   directory mask = 0774

map to guest = Bad Userでユーザー名、パスワードが違う人はゲスト扱いでログインできるようになり、ゲストに許可されているところだけ見えるようになります

[share]中の

write list,read listは書き込み可能なユーザー、読み込み可能なユーザーを指定します。

@○○でグループ名で指定できます。

created:

Back to top