スポンサーサイト

上記の広告は1ヶ月以上更新のないブログに表示されています。
新しい記事を書く事で広告が消せます。

【同じタグを付けた記事の一覧】

cacls コマンドでファイルのアクセス権を一括変更

2012年04月20日(金)07時51分

「WinXP → Win7」で困ったこと その1(アクセス許可問題)

WinXP から Win7 へ移行するにあたって、まず WinXP 上のネット環境で、Win7 インストール時に必要となるデバイス・ドライバなどを集めました。
そのうえで Win7 を入れ、入手しておいた各種ドライバの SETUP プログラムを実行すると、「指定されたデバイス、パス、またはファイルにアクセスできません。アクセス許可がない可能性があります。」というメッセージが出て、起動できませんでした。
また、備忘録がわりに作っておいた TEXT ファイルなども、ダブルクリックするとメモ帳は起動するものの、「アクセスが拒否されました。」というダイアログが出て開けなかったりします。
しかもこれが、「WinXP で作ったファイルは全て不可」というわけでなく、使えるものもあったりするのが不思議なところです。

ファイルのアクセス権

これはどうも、NTFS に存在するセキュリティ機能である、ファイルのアクセス権が問題なようです。
とはいえ自分は、WinXP でも Win7 でも「Administrator(管理者)」としてログインして使用しています(UNIX 系の方から見れば「信じられない暴挙」で「危なっかしくて見ていられない」ことかもしれませんが Windows ユーザーにとってはわりに普通のことかと思われます)。
そして、その環境で作られたファイルには、所有者として「管理者」が設定されているはずで、同じ「管理者」であれば当然使えるはずだと思っていました(そもそも「管理者」なら全権を持っているはずなので「権限がない」などということがあるはずがない、と)。

UAC と「管理者」違い

原因として思いついたのが、WinXP にはなかった UAC(ユーザーアカウント制御)という仕組みです。
前述のとおり、Windows ユーザーは「常に Administrator」というのが一般的で、これを少しでも安全にするため、Vista 以降では管理者でログインしていても、普段は標準ユーザーとしての権限しか与えられず、必要に応じて「管理者権限の付与」を手動で認めるように変更されました。
ですので、WinXP 時代と同じく「Administrator」であるつもりが、実は単なる「User」でしかない、という状態なわけです。
もう一つ考えられることとして、ファイルのプロパティでセキュリティの項目を見ると、?マークの付いた「不明なアカウント(英数羅列)」というユーザーが、ACL(アクセス制御リスト)にリストアップされていました。
もしかしたら、これが WinXP 時の「Administrator」で、たとえ Win7 で同じ「Administrator」という名の管理者権限を与えたアカウントを作ったところで、それは WinXP の「Administrator」とは別のもの、ということなのかもしれません。
つまり、「管理者」として同格の別アカウントが作ったファイルには、同じく管理者権限を持っていても、自由にはできない、と。

うちだけ?

ただ、Windows での管理システム上の矛盾が原因であるなら、全ファイルが使用不可になっていてしかるべきで、しかも、世間的には「WinXP → Win7」という移行は、おそらくそれほど珍しいことではないと思われますので、こういう現象が起こりうるのであれば、もっと話題になっていそうなものです。
しかし、ネットで検索した限りではそういう話が書かれていることは全くなく、これはどうも、我が家の環境だけに起こった特殊な問題であると考えられます。
もしかしたら、単に自分がおぼえていないだけのことで、過去にセキュリティ強化を狙って何かしらの設定変更を「やらかして」しまっており、その影響でこんなことになってしまっているのかもしれません。

フォルダの所有権を変更してみる

まあ、理由はよくわからないのですが、いずれにしてもこれでは不便ですので、とりあえず、それらのファイルが含まれる大もとのフォルダに「Everyone」というフルコントロール権限を付加してみることにしました。
これで、そこに含まれる全ファイルに同じ権限が付与されるのではないか?と期待してのことだったのですが、そう簡単にはいきませんでした。
確かに、付与後のフォルダ内に生成したファイルには「Everyone フルコントロール」が付くのですが、既存ファイルの権限は変更されません。
ただ、変更されたものもあるような気がして、挙動がよくわかりませんでした(この辺りは変更前の状態を厳密に記録していなかったため検証できず記憶があいまいです)。

USB メモリ経由で

で、次に思いついたのが、ACL は NTFS の機能ですから、それ以外のファイル・システムに移せばいい、というものでした。
「問題のファイル」は、実行したり開いたりはできませんが、さすが「管理者」というべきかわかりませんが、コピーしたり削除したりはできるのです。
ですので、FAT32 でフォーマットした USB メモリや SD メモリーカード等に移せば、セキュリティの制限は外せるであろう、と。
実際、この方法はうまくいったのですが、この先 Win7 を使い続けるにあたって、WinXP 時代のファイルを使うたびに、いちいちこの作業をするというのはどうか…、とは思うわけです。

cacls コマンド

ということで表題へとつながるのですが、いろいろ探していると、cacls コマンドという「指定フォルダ以下に存在するファイルのアクセス権を一括で変更」できるツールがありました。
この「cacls.exe」は、少なくとも WinXP や Win7 には標準で入っていますので、改めてどこかからダウンロードしてインストールする、というような必要はありません。
これで、例えば「C:\Win7\Driver」フォルダに存在する全ファイルの所有者を、フルコントロール権限の「Everyone」にする場合、「コマンド プロンプト」や BAT ファイルで以下のようにします(Vista や Win7 では管理者権限で実行する必要があります)。

cacls.exe "C:\Win7\Driver" /t /c /g everyone:f

上記コマンドでは、既存の所有者が全削除され、「Everyone フルコントロール」のみになりますが、これを保持したままで「追加」する場合には、以下のようにします。

cacls.exe "C:\Win7\Driver" /t /e /c /g everyone:f

BAT ファイル等での確認スキップ

なお、この cacls コマンドは、普通に実行すると「よろしいですか(Y/N)?」という確認が表示され、「Y」を入力しないと先へ進みません。
通常この手のコマンドには、こういう確認を非表示で強制実行するスイッチがあったりするものですが、なぜか cacls.exe にはないようです。
ですので、BAT ファイルでの自動処理などに組み込む際に困ったりするのですが、この解決策が「caclsコマンドをバッチ・ファイルで利用する」という、そのものずばりなタイトルの記事に書かれていました。

echo y|cacls.exe "C:\Win7\Driver" /t /c /g everyone:f

上記のようにして、echo コマンドとパイプで無理やり「y」の文字を流し込めばいいそうで、「なるほど!」という感じです。

所有権は不要

ちなみに自分は当初、「WinXP でしか使えないファイルなのだから WinXP でしか変更できないだろう」と考えており、Win7 使用中に「問題のファイル」に遭遇するたび、WinXP で起動しなおして「cacls.exe」していました。
ところが、ためしにそのまま Win7 上で変更してみると、普通に変更可能でした(「cacls.exe」を管理者権限で実行する必要がありますが)。
まあ、コピーや削除はできるわけですし、そもそも本来は万能なはずの「管理者」なのですから、考えてみれば当然だったのかもしれません。

「WinXP → Win7」で困ったこと その2(BATファイルにおける半角カッコ問題)

Win7 移行後にもう一つ困ったことが、「ファイル名・フォルダ名に半角カッコが含まれると BAT ファイルが管理者権限で実行できない」という現象です。
自分は物忘れが激しいタイプなので、例えば上記 cacls コマンド用の BAT ファイルであれば、「cacls(権限付与).bat」など、半角カッコで説明書きを付けて、しばらく使っていなくても、何に使うものなのかがすぐ思い出せるようにしていました。
そしてこの「cacls(権限付与).bat」という半角カッコつきの BAT ファイル名は、普通にダブルクリックで実行する分には問題ありませんが、管理者権限で実行しようとすると失敗してしまいます。
調べてみたところ、Windows が「cmd.exe」を呼び出す方法の問題らしく、ここで半角カッコに特殊な意味が持たされていることが原因のようです。

フォルダ名も

そしてこれは、ファイル名だけの問題ではありませんでした。
当然ながら、この「内容説明のカッコ書き」はファイル名だけでなくフォルダ名にも行っており、例えばポータブルなツールを格納したそれぞれのフォルダには、「C:\Tools\FastCopy(フォルダ同期)」というように、そのツールを導入した理由を記していたのです。
で、BAT ファイル内で、そのフォルダにカレント・ディレクトリを移そうとして、「cd /d "C:\Tools\FastCopy(フォルダ同期)\"」というような行を書くと、そこで終了してしまいます。

解決策

この解決策として自分がとった方法は、「半角カッコを使わない」というものでした。
本来であれば、どうにか「半角カッコつきでも実行できるようにする」のが、「正しい」解決法かとは思いますし、その意味で何の参考にもならない内容ではありますが…。
しかしながら、自分の BAT ファイルの使用率は、確かに一般的な Windows ユーザーとしては比較的高めかとは思いますが(そもそも BAT ファイルなど使っている時点で「一般的な Windows ユーザー」のカテゴリーからはみ出ているような気もしますが)、それでも「目視で確認・手作業で修正」が可能な程度の量でしかありませんでした。
ですので、必要に応じてファイル名やフォルダ名から半角カッコを削除し、関係するBATファイルを書き換える、という「力技」で解決する方が簡単だったのです。

関連記事

【同じタグを付けた記事の一覧】
Windows

スポンサーサイト

コメントの投稿

非公開コメント

最新記事
最新コメント
Amazonおまかせリンク
カテゴリ
タグクラウド
Amazonお買い得ウィジェット
カレンダー
03 | 2017/04 | 05
- - - - - - 1
2 3 4 5 6 7 8
9 10 11 12 13 14 15
16 17 18 19 20 21 22
23 24 25 26 27 28 29
30 - - - - - -
月別アーカイブ
プロフィール

電脳太助

Author:電脳太助
Website:電脳スピーチ web

RSSリンクの表示
メールフォーム

名前:
メール:
件名:
本文:

サイト内検索
Ads by Google
FC2アクセスランキング
Ads by Google
FC2拍手ランキング
ユーザータグ

音楽管理(65)
ポータブル(57)
ソフト紹介(44)
プログラミング(42)
音声技術(41)
自作ソフト(34)
サイト運営(32)
FC2(31)
ブログ(30)
iTunes(26)
Windows(25)
LISMO(24)
音声合成(23)
音声認識(22)
x-アプリ(22)
電子ブック(22)
eラーニング(20)
バックアップ(19)
語学学習(19)
foobar2000(18)
ソースコード(17)
画像管理(15)
WindowsLiveWriter(15)
C++(14)
アフィリエイト(10)
DnspTools(10)
ウォークマン(9)
fi-6130(9)
FLAC(9)
Gracenote(8)
英語音読学習計画(8)
Prolog(8)
JavaScript(8)
ベクター(8)
雑記(8)
CodeBlocks(7)
SyntaxHighlighter(7)
TraConv(7)
wxWidgets(7)
spcbght(7)
DCP-J552N(6)
W63CA(6)
MP3Gain(6)
WinRT(6)
iGoinLM(6)
VirtualBox(6)
WindowsLiveMesh(6)
英語発音矯正実験(6)
ExactAudioCopy(6)
楽器演奏(5)
Mery(5)
LAME(5)
音楽技術(5)
GalateaProject(4)
LLVM(4)
nLite(4)
MIDI(4)
ホームページ(4)
WindowsLiveSkyDrive(4)
GalateaTalk(4)
PC-98(3)
カウンター(3)
AACGain(3)
iTCDini(3)
OverCutChecker(3)
拍手(3)
PK-513L(3)
UniversalExtractor(3)
アクセスランキング(3)
ImageCompositeEditor(2)
アクセス解析(2)
OCR(2)
qtaacenc(2)
資格試験(1)
AquesTalk(1)
AquesCmdDl(1)

FC2アクセスランキング
最新トラックバック
アクセスランキング
[ジャンルランキング]
コンピュータ
112位
アクセスランキングを見る>>

[サブジャンルランキング]
ソフトウェア
11位
アクセスランキングを見る>>
FC2カウンター
上記広告は1ヶ月以上更新のないブログに表示されています。新しい記事を書くことで広告を消せます。