web-dev-qa-db-ja.com

Windowsでフォルダーを読み取り専用にするにはどうすればよいですか?

だから私は自分がいくつかのファイルをフォルダに書き込むのを防ぎたいです。私は常に比較し、ターゲットプロジェクトにデータを転送するback_upフォルダーを操作します。問題は、誤ってバックアップファイルを編集してしまうことです。自分の編集/書き込み権限を拒否する方法はありますか?ファイルの名前を変更/削除したくありません。フォルダーの読み取り専用フラグを設定することは、まったく何もしないことです。その後、問題なくファイルを編集/削除できます(少なくともWindows 8.1では)。これは私にとって非常に重要です-今のところ、多くのback_upファイルをそのように破損しているため、多くの問題が発生します。何か案は?

Windows 8.1 x64の最新バージョンを実行しています。

7
Nemo759

ファイルを含む単一のフォルダーです。変更を加えるたびに、「名前を付けて保存」を行い、バージョン番号を増やします。ただし、誤って「保存」を押してファイルを上書きしてしまうことがあります– Steven Vascellaro


フォルダー内のファイルを読み取り専用でアクセス可能にする方法

[〜#〜] icacls [〜#〜] を使用して、すべてのファイルに対するwrite attributes権限を明示的に拒否できます特定のフォルダー内で、自分(またはセキュリティグループ)がこれらのファイルを上書きまたは変更することを防ぎますが、読み取りアクセスを許可してそれらを開くことができます。

以下は、現在のドメイン(またはローカルマシン名)を定義する環境%userdomain%\%username%変数と、バッチスクリプトを実行するマシンにサインインしたユーザー名(<domain>\<username>)を使用したバッチスクリプトです。アカウント;これは、必要に応じて、有効なドメインセキュリティグループ名(<domain>\<securitygroupname>など)に簡単に置き換えることができます。

バッチスクリプト

Folder=変数の値を、読み取り専用でアクセスできる既存のファイルをアクセス可能にするために必要な場所への完全な明示的なフォルダーパス(またはUNCパス)に置き換えます。

@ECHO ON

SET Folder=C:\Users\User\Desktop\Test
SET Security=%userdomain%\%username%

ICACLS "%Folder%\*" /deny "%Security%":(OI)(WA)
EXIT

ファイルのACLアクセス許可を見ると、write attributesがあり、に適用されている明示的な拒否が表示されていますこのフォルダとファイル

enter image description here

これは、V1、V2などのテストドキュメントが含まれているフォルダで、既にバッチスクリプトの実行対象となっています。

enter image description here

ファイルを保存しようとすると、名前を付けて保存ダイアログがポップアップ表示され、同じファイル名ですでに存在するファイルを上書きしようとすると、そのファイルは読み取り専用でアクセスできるため、アクセス拒否のエラーメッセージが表示されます。アカウント。

enter image description here

名前を付けて保存し、ファイルに別の名前を付けますが、読み取り専用でアクセスできるようにすべてのファイルをロックした同じフォルダーに保存します。ここで、番号を1つまたはいくつか増やします。

このフォルダーに新しく保存されたファイルは、write属性が拒否されているため、これらのアクセス許可の制限が適用され、新しいファイルを含むファイルがすぐに有効になります名前はこのフォルダに保存されます。

enter image description here


参考資料とリソース

  • 環境変数

  • [〜#〜] icacls [〜#〜]

    /deny Sid:perm explicitly denies the specified user access rights.
        An explicit deny ACE is added for the stated permissions and
        the same permissions in any explicit grant are removed.
    
    WA - write attributes
    
    
        inheritance rights may precede either form and are applied
        only to directories:
    (OI) - object inherit
    
2
Pimp Juice IT

元の回答:

NTFSの場合は、ファイルシステムのセキュリティ機能を使用できます。

  1. フォルダの「セキュリティ」タブを編集します。これまでに変更していないと想定しています。「認証されたユーザー」を削除すると、最初に継承を無効にする必要があることを警告する場合があります。「詳細」オプションで削除してください。

  2. UACがオンになっていることを確認します。

これで、そのフォルダー内の何かを編集、追加、削除しようとすると、UACから警告が表示されます。さらに高いレベルに設定して、毎回パスワードを入力する必要があります。

編集:上記の方法は、Windows Vista +にのみ適用され、管理者権限と、最初はファイルやフォルダのセキュリティ設定が調整されていないことを必要とする、間違いのない簡単なガイドです。

ただし、背後にある原理を理解していれば、NTFSを使用するほぼすべてのWindowsバージョンで、任意のユーザーアカウントでこれを実行できます。

通常の作業アカウントがAで、別の「安全な」アカウントがBであるとすると、フォルダーの所有者をBに設定し、それに完全な特権を与えることができます(「すべての子オブジェクトのアクセス許可をこのオブジェクトから継承可能なアクセス許可で置き換える」をチェックすることを忘れないでください")、次にアカウントAを読み取り専用として追加すると、現在はアカウントBでのみ書き込みが可能ですが、それでも毎日のアカウントAで読み取り/使用できます。

管理者権限がない場合、アクセスリストから管理者を削除することも、管理者である場合は所有者を変更することもできません。しかし、メソッドはとにかく機能するはずです。また、フォルダを作成する場合、所有者はデフォルトであなたに設定されているはずです。

PS。上記のすべては私の経験に基づいています、より良い方法がある場合はアドバイスを歓迎します。

2
Sam

Romeoは正解です。プロパティを使用して、個別のファイルを読み取り専用にすることができますが、削除から保護することはできません。

複数のファイルを読み取り専用にすばやく変更したい場合のさらなる提案。

ワイルドカードattrib +r [path]を利用して、コマンドプロンプトを開き、コマンド*を入力します。

1
Norr