MS Office XPのEXCELにて上書き保存を実施した際、以下の内容のダイアログが表示され、上書き保存できません。
ファイル'xxx.xls'は、前回保存された後、他のユーザによって変更された可能性があります。操作を選択してください。
変更を保存するを選択しても保存が出来ません。
また、上記の問題以外にも上書き保存後アクセス権やACLが変更されてしまうことがあります。
以下は例となります。
ディレクトリのACLは以下の設定とします。
# getfacl test/
# file: test
# owner: root
# group: Domain\040Users
user::rwx
group::---
group:dev:rwx
mask::rwx
other::---
このディレクトリ内に保存されているファイルのACLは以下とします。
# file: 1.doc
# owner: odagiri
# group: Domain\040Users
user::rwx
group::---
group:dev:rwx
mask::rwx
other::---
# file: 2.xls
# owner: odagiri
# group: Domain\040Users
user::rwx
group::---
group:dev:rwx
mask::rwx
other::---
# file: 3.ppt
# owner: odagiri
# group: Domain\040Users
user::rwx
group::---
group:dev:rwx
mask::rwx
other::---
ファイルを上書きしようとしているユーザのIDは以下のとおりです。
# id takeuchi
uid=1000(takeuchi),gid=513(Domain Users) groups=513(Domain Users),1000(dev)
アップデート前の最新パッケージであるsamba-3.0.10.21AXを使用した場合、かつOffice 2000を使用して上書き保存後は以下の通りとなってしまいます。
# file: 1.doc
# owner: takeuchi
# group: Domain\040Users
user::r--
user:odagiri:rwx
group::---
group:dev:rwx
mask::rwx
other::---
# file: 2.xls
# owner: takeuchi
# group: Domain\040Users
user::rwx
group::r--
other::r--
# file: 3.ppt
# owner: takeuchi
# group: Domain\040Users
user::r--
user:odagiri:rwx
group::---
group:dev:rwx
mask::rwx
other::---
この場合、WORDやPowerPointのファイルにて更新者であるtakeuchiが読み取り専用となってしまっています。
次にOffice XPを使用して上書き保存した場合は以下のようになってしまいます。
# file: 1.doc
# owner: takeuchi
# group: Domain\040Users
user::rwx
user:odagiri:rwx
group::---
group:dev:rwx
mask::rwx
other::---
保存できない(ダイアログが表示される)
# file: 2.xls
# owner: odagiri
# group: Domain\040Users
user::rwx
group::---
group:dev:rwx
mask::rwx
other::---
# file: 3.ppt
# owner: takeuchi
# group: Domain\040Users
user::rwx
user:odagiri:rwx
group::---
group:dev:rwx
mask::rwx
other::---
エクセルにて保存ができない問題が生じます。
WORDやEXCELなどのMS-Office製品はファイルを編集し、上書き保存する場合(Notepadなどのテキストエディタとは異なり)正確な意味での上書きを行いません。そのため新規作成と同じアクセス権設定となってしまいます。
なぜこのような現象が起きてしまうかというとWORDは「文書.doc」を上書き保存する時、以下のシーケンスで行っている為です。
- 更新後のファイルを「文書A.doc」で新規作成
- 更新前のファイルを「文書.doc」→「文書B.doc」にRENMAE
- 「文書A.doc」→「文書.doc」にRENMAE
- 「文書B.doc」のアクセス権を「文書.doc」に設定
- 「文書B.doc」を削除
そこでこの問題を修正したSambaパッケージを以下のURLよりsamba-3.0.14aにアップデートする必要があります。
→samba アップデート
また、/etc/samba/smb.confで各共有セクションまたはglobalセクションにて
dos filemode = yes
の設定が必須となります。
パッケージのアップデート、設定ファイルの変更後、MS Office XP以上の製品についてはACLの変更などの問題なく上書き保存することが可能となります。
以下は[問題詳細]にて例としていたACLのファイルをSambaのバージョンをアップデートしてから上書き保存した場合です。
Office 2000を使用して上書き保存した場合。
# file: 1.doc
# owner: takeuchi
# group: Domain\040Users
user::rwx
user:odagiri:rwx
group::---
group:dev:rwx
mask::rwx
other::---
# file: 2.xls
# owner: takeuchi
# group: Domain\040Users
user::rwx
group::r--
other::r--
# file: 3.ppt
# owner: takeuchi
# group: Domain\040Users
user::rwx
user:odagiri:rwx
group::---
group:dev:rwx
mask::rwx
other::---
アップデート前の読み取り専用となってしまう件は解決しています。
次にOffice XPで上書き保存した場合。
# file: 1.doc
# owner: odagiri
# group: Domain\040Users
user::rwx
group::---
group:dev:rwx
mask::rwx
other::---
# file: 2.xls
# owner: odagiri
# group: Domain\040Users
user::rwx
group::---
group:dev:rwx
mask::rwx
other::---
# file: 3.ppt
# owner: odagiri
# group: Domain\040Users
user::rwx
group::---
group:dev:rwx
mask::rwx
other::---
ACLが変更されず、上書き保存することが可能です。
しかし、Office 2000以下を御利用の場合にはACLが変更となってしまう件については注意が必要となります。
以下の例を参考にして頂き、運用でカバーしてください。
(例はMS Office 2000での動作となります。)
1.docというWORDのファイルの上書き保存前のACLは以下のとおりです。
# setfacl 1.doc
# file: 1.doc
# owner: root
# group: sales
user::rwx
group::rwx
group:dev:rwx
mask::rwx
other::---
上記のACLではこのファイルに対して更新を実行できるユーザはroot、salesグループに所属するユーザ、devグループに所属するユーザとなります。
ここでプライマリーグループがDomain Usersであり、かつdevというグループに所属しているtakeuchiというユーザで上書き保存した場合、1.docのACLは以下のように変更されてしまいます。
# setfacl 1.doc
# file: 1.doc
# owner: takeuchi
# group: Domain Users
user::rwx
group::rwx
group:dev:rwx
group:sales:rwx
mask::rwx
other::---
もしくは
# setfacl 1.doc
# file: 1.doc
# owner: takeuchi
# group: Domain Users
user::rwx
group::r--
group:dev:rwx
group:sales:rwx
mask::rwx
other::---
つまり、更新したユーザのプライマリーグループ(上記の場合ですとDomain Users)に意図していないACLが付与されてしまうということになります。
これはSambaパッケージのアップデート前からの現象となっております。
しかし、確かにこのファイルのACLだけを見ますとDomain Userにフルアクセスが付与されているのですが、このファイルが保存されているディレクトリのACLにてDomain Usersへアクセス権を付与していなければファイルの更新等できません。
以下はディレクトリに対してのACLの例となります。
# getfacl test/
# file: test
# owner: root
# group: sales
user::rwx
group::rwx
group:dev:rwx
mask::rwx
other::---
default:user::rwx
default:group::rwx
default:group:sales:rwx
default:group:dev:rwx
default:mask::rwx
default:other::---
上記のACLを設定したディレクトリ内に保存されているファイルのACLに先ほどのファイルのACLのようにDomain Users等がフルコントロールで付与されていても更新されることはありません。