読者です 読者をやめる 読者になる 読者になる

tweeeetyのぶろぐ的めも

アウトプットが少なかったダメな自分をアウトプット<br>\(^o^)/

macからCentOSに入れたSamba経由でファイルを作成・編集すると勝手にパーミッション(permission)が変更されてしまう対応(umask、chmod、create mask、directory maskへんのおさらい)

はじめに

Mac(OS X)にVMWare Fusion7(CentOS5.3)入れてます。
ゲストOSのcentossambaも入れて
ホストOSのmacからファイルアクセスできるようにもしました。

しかしmacからsamba経由でsublime textなどのエディタを通して
ファイルを作る&編集するとファイルのアクセス権限が変わってしまう。
これを解消したいとゆーはなし

ちなみにsamba入れたのはこんな感じ
Mac(OS X)とVMWare Fusion7(CentOS5.3)で開発環境を作る-Sambaの設定(smb.conf)でシンボリックリンクにもアクセスできるように設定する

ながれ

  1. 現象確認
  2. 対応
  3. なおせた確認

1. 現象確認

フォルダとファイル両方に起こることなんですが、
現象の確認って意味でファイルだけにしぼって確認します。

現象を確認する用意をする

ゲストOS側(vmwarecentos)
一応デフォルトのアクセス権を確認する
# umask
0002

# umask -S
u=rwx,g=rwx,o=rx

ファイルのデフォルトアクセス権は666を基準としてumaskの値を引いた値となります。
なので、こんな感じ

0666 - 0002 = 664

フォルダは777を基準にumaskの値を引いたものになります。

0777 - 0002 = 775

この辺りはこちらがすごく詳しく説明してくれています
デフォルトのアクセス権 - umask

用意をする
# pwd
home/hoge

※ テストするためのフォルダを作って移動しておく
# mkdir modtest
# cd modtest

※ まずはファイルを2つ作る
# touch file1.txt
# touch file2.txt

※ 今の権限を確認。umaskの値通り664で作成されている
# ls -al
-rw-rw-r--  1 hoge hoge    0 10月  9 21:02 file1.txt
-rw-rw-r--  1 hoge hoge    0 10月  9 21:02 file2.txt
ホストOS側(mac)

mac側からはsamba経由なのでsublime textなどで適当にファイルを作って保存します。

f:id:tweeeety:20141010101804p:plain

ここまでの確認

やろーとしてることと作った3つのファイルの確認です。

  • file1.txt:ゲストOS(centos)で新規作成したファイル
  • file2.txt:ゲストOS(centos)で新規作成したファイル&後でsamba経由で編集してみる
  • file3.txt:ホストOS(mac)で新規作成したファイル

現象を確認する

やっとここからが確認です

ゲストOS側(vmwarecentos)

おもむろにlsで確認。
この時点でmacで作ったfile3.txtのアクセス権は744になってしまっています。
sublime textが._file3.txtを作ってますが、これはバックアップ用でしょうか。
今回は特に気にしません。

# ls -al
-rwxr--r--  1 hoge hoge 4096 10月  9 21:42 ._file3.txt
-rw-rw-r--  1 hoge hoge    0 10月  9 21:02 file1.txt
-rw-rw-r--  1 hoge hoge    0 10月  9 21:02 file2.txt
-rwxr--r--  1 hoge hoge    5 10月  9 21:42 file3.txt
ホストOS側(mac)

今度はmac側からsamba経由でsublime textでfile2.txtを開いて適当に編集保存。
中にaiueoとか書いただけなので特にキャプチャはありません。w

ゲストOS側(vmwarecentos)

再度lsで確認。

# ls -al
-rwxr--r--  1 hoge hoge 4096 10月  9 21:42 ._file3.txt
-rw-rw-r--  1 hoge hoge    0 10月  9 21:02 file1.txt
-rwxrw-r--  1 hoge hoge    5 10月 10 10:26 file2.txt
-rwxr--r--  1 hoge hoge    5 10月  9 21:42 file3.txt

この時点でアクセス権限が3パターンになってしまいました。

  • file1.txt:-rw-rw-r-- = 664
  • file2.txt:-rwxrw-r-- = 764
  • file3.txt:-rwxr--r-- = 744
原因を推測

これは2進数で表すと良くわかります。
デフォルトは666、umaskは002のビットマスクとして表すとこんな感じになります

666 = 0110 0110 0110 (default)
002 = 0000 0000 0010 (umask)
↓ 引く
644 = 0110 0110 0100 (新規作成ファイル)

これを元に今回の現象を考えてみると、
ゲストOSで作ったファイル(file1.txt)、ホストOSで作ったファイル(file3.txt)と
ゲストOSで作ったファイルをsamba経由でホストOS側から編集したファイル(file2.txt)
の関係はOR演算になってるようです

664 = 0110 0110 0100
744 = 0111 0100 0100
↓ OR(上か下どちらかが1なら1)
764 = 0111 0110 0100

664と744のままでも数値が高いほうが優先されると考えても良いかもですね。
(もし違ったら教えてください(><))

2. 対応

ここまでわかったところで対応です。
前回のsambaの設定はてきとーすぎたのでcreate maskとcreate modeの設定をします

ゲストOS側(vmwarecentos)
# sudo vi /etx/samba/smb.cnf
---- vi追記 ----
# file permission
        create mask = 0644
        force create mode = 0
        security mask = 0644
        force security mode = 0

# directory permission
        directory mask = 0755
        force directory mode = 0
        directory security mask = 0755
        force directory security mode = 0
---------------

※ sambaを再起動
# sudo /etc/init.d/smb restart
SMB サービスを停止中:                                      [  OK  ]
NMB サービスを停止中:                                      [  OK  ]
SMB サービスを起動中:                                      [  OK  ]
NMB サービスを起動中:                                      [  OK  ]

smb.confの編集はcentosのほうのデフォルトに合わせて
create maskは664
directory maskは775
でも良いかもしれません。

3. なおせた確認

ということで同じ手順で確認してみます

ゲストOS側(vmwarecentos)
用意をする
# pwd
home/hoge/modtest

※ ファイルを2つ作る
# touch file4.txt
# touch file5.txt

※ 権限を確認
# ls -al
-rw-rw-r--  1 hoge hoge    0 10月 10 11:42 file4.txt
-rw-rw-r--  1 hoge hoge    0 10月 10 11:42 file5.txt
ホストOS側(mac)

mac側からはsamba経由でfile6.txtを作成する

ゲストOS側(vmwarecentos)

おもむろにlsで確認。
file6.txtは先ほど設定した644で作成されています

# ls -al
-rwxr--r--  1 hoge hoge 4096 10月  9 21:42 ._file3.txt
-rw-r--r--  1 hoge hoge 4096 10月 10 11:42 ._file6.txt
-rw-rw-r--  1 hoge hoge    0 10月  9 21:02 file1.txt
-rwxrw-r--  1 hoge hoge    5 10月 10 10:26 file2.txt
-rwxr--r--  1 hoge hoge    5 10月  9 21:42 file3.txt

-rw-rw-r--  1 hoge hoge    0 10月 10 11:42 file4.txt
-rw-rw-r--  1 hoge hoge    0 10月 10 11:42 file5.txt
-rw-r--r--  1 hoge hoge    5 10月 10 11:42 file6.txt
ホストOS側(mac)

mac側からsamba経由のsublime textでfile5.txtを開いて適当に編集保存。
中身はやっぱり適当にw

ゲストOS側(vmwarecentos)

再度lsで確認。
file5.txtは664のままになりました!

# ls -al
-rwxr--r--  1 hoge hoge 4096 10月  9 21:42 ._file3.txt
-rw-r--r--  1 hoge hoge 4096 10月 10 11:42 ._file6.txt
-rw-rw-r--  1 hoge hoge    0 10月  9 21:02 file1.txt
-rwxrw-r--  1 hoge hoge    5 10月 10 10:26 file2.txt
-rwxr--r--  1 hoge hoge    5 10月  9 21:42 file3.txt
-rw-rw-r--  1 hoge hoge    0 10月 10 11:42 file4.txt
-rw-rw-r--  1 hoge hoge    5 10月 10 11:46 file5.txt
-rw-r--r--  1 hoge hoge    5 10月 10 11:42 file6.txt

ちなみにsmb.confで設定した644じゃないのは上述した理由で
数値が高い方が優先されてるからです。

補足

windowsの場合はcreate modeらを設定しても直らないという記事もみかけました。
その場合はこちらで対応されてる方がいるので参考にしてみると良いかもしれません。
map archive = noで直るらしいです

まとめ

前回の記事みたいに手抜きして設定するとこうなるよ
っていうアレのたまものでもありますねw
とにかく直せたのでenjoy!ヾ(´ρ`)ノ゛