- PR -

全ユーザーが変更可能なファイルの保存先について

1
投稿者投稿内容
toto
会議室デビュー日: 2008/03/11
投稿数: 3
投稿日時: 2008-03-11 20:03
C#(VS2005)で作成したプログラムでファイルを作成する処理があり、
そこで作成したファイルの内容を別のプログラムが参照して処理を
行うようにしたいと考えています。

このファイルは全てのユーザーで共通のもので、どのユーザーでも変更が
できるようにしたいので、ユーザープロファイルではない場所に保存しておく
必要があるかと思います。
また、Usersに権限を与えたフォルダを用意してそこに保存させるやり方も
ありますが、できればそれは避けたいです。

どなたか良いアイデアをお持ちでしたら、教えていただけると幸いです。
よろしくお願いいたします。
Jitta
ぬし
会議室デビュー日: 2002/07/05
投稿数: 6267
お住まい・勤務地: 兵庫県・海手
投稿日時: 2008-03-11 20:08
All Users/Documents
toto
会議室デビュー日: 2008/03/11
投稿数: 3
投稿日時: 2008-03-11 22:04
早々のご回答ありがとうございます。

Usersに属しているアカウントを使用して、教えていただいた場所に対して
処理を試してみたところ、作成も更新も行うことができました!!

ここで疑問なのですが、Usersには「書込」の権限しか与えられていない状態でも
ファイルの更新ができてしまったのですが、それはなぜなのでしょうか?

※自分で調べてみた限りでは、特殊なアクセス許可で「データの書き込み」が
許可されているようだったのですが・・・。
 「AllUsers\Document」ではこれが既定の設定なのでしょうか?

本筋とは離れた質問になってしまいますが、ご回答いただけたらと思います。
ちゃっぴ
ぬし
会議室デビュー日: 2004/12/10
投稿数: 873
投稿日時: 2008-03-11 22:43
Windows Vista 以前の OS では CREATOR OWNER をちゃんと抑えてください。

CREATOR OWNER というものはその名の通り、作成した user に対して ACL を付与します。つまり、CREATOR OWNER に対して ACL を付与しておけばその object (file) を作成した account に対し CREATOR OWNER で付与された ACL が自動的に付与されるわけです。

これを理解した上で対象の file および folder の ACL を再度確認してみてください。

なお、個人的には documents folder に保存するか否かは対象の file が直接 user が扱う必要があるか否かで判断すべきだと思っています。

User が直接扱うものでないのであれば ALL Users の application data の方が適切でしょう。

もっともこちらは default で書き込むことができないので ACL の編集が必須です。
_________________
toto
会議室デビュー日: 2008/03/11
投稿数: 3
投稿日時: 2008-03-11 23:14
ご回答ありがとうございます。
前の質問の書き方が説明不足で、申し訳ありませんでした。

Windows Server 2003の環境で、Administrator権限を持つアカウントで作成した
ファイルを、User権限しかないアカウントで中身を修正したところ、そのまま
保存できてしまったので、疑問に思ったのです。
(もしかしたら、前に自分でアクセス権をいろいろと操作していたのを忘れているの
かもしれません。)

ただ、いただいた回答の内容を踏まえて考えると、今回のファイルの置き場所は
「Application Data」のほうが適切な気がします。
そうすると、アカウント制御を適宜変更しなければならないということなので、
その点も考慮して対応策を検討してみたいと思います。
ちゃっぴ
ぬし
会議室デビュー日: 2004/12/10
投稿数: 873
投稿日時: 2008-03-12 04:54
ごめんなさい。All Users profile では documents にしろ application data にしろ作成者が full control を持つのみで、一般の user は書き込みのみですね。
つまり、自分が作成されたものは変更できるけど、他の user が作成したものについては変更できません。

ということで、どちらにしろ要件を満たすためには ACL の変更が必須です。
で、この ACL の変更ですけど、user の account でできちゃったら扱えないはずのもを扱えることができちゃうんで脆弱性になりますね。
なんで、より強い権限を持つ account を使って実施する必要があります。
通常は installer で対応しますね。

ACL の変更は Win32 はもちろん WMI, .NET Framework とかいろいろ方法はあります。
Install 時に変更するので .NET Framework の利用は要件により厳しいかも?
確か .NET Framework 2.0 からの機能なので。

ただ、ちょっと考えて欲しいのは default の ACL が何でこうゆう設定になっているか?

その configuration file に path を記述してその path を application から起動する場合を考えましょう。
状況によっては不正な process を別のより強力な account で実行させる特権昇格の脆弱性につながりますよね。すべての user で編集可能な configuration file を扱うのはそれなりの危険性を伴います。

なので、すべての user で編集可能な configuration file を利用するのは本当に security に問題が無いか熟考してから行うようにしてください。
その application の configuration file を編集できる管理者を用意して、その管理者のみ編集を許可することで回避策もあるわけですから。

_________________
ちゃっぴ@わんくま同盟
ちゃっぴの監禁部屋

[ メッセージ編集済み 編集者: ちゃっぴ 編集日時 2008-03-12 05:02 ]
Jitta
ぬし
会議室デビュー日: 2002/07/05
投稿数: 6267
お住まい・勤務地: 兵庫県・海手
投稿日時: 2008-03-12 07:44
ご参考
http://blogs.wankuma.com/jitta/archive/2007/06/28/82782.aspx
1

スキルアップ/キャリアアップ(JOB@IT)