Меня несколько смущает вся схема безопасности файлов Windows. Я работаю в UNIX, поэтому не совсем понимаю взаимосвязь между правами доступа к файлам / настройками безопасности и атрибутами; в частности, только для чтения, что может быть у файла.
Например, если я вхожу в систему как администратор в своем ящике и у меня есть файл, который позволяет администраторам полный контроль, но для которого установлен атрибут «только чтение», это означает, что я не могу писать в этот файл? Есть ли какой-либо способ, кроме удаления атрибута только для чтения, который я могу записывать в файлы, над которыми я предположительно имею полный контроль? Если нет, то в чем преимущество полного контроля, если у вас его нет на самом деле?
Права доступа к файлу определяют, какой у вас доступ к файлу - как бы это ни звучало. Полный контроль позволяет создавать, удалять, добавлять, изменять разрешения, изменять атрибуты и т. Д.
Файлы и папки могут иметь дополнительные атрибуты, как и файлы в большинстве файловых систем * nix. «Скрытый» приходит на ум в качестве примера на обеих платформах.
В Windows к некоторым дополнительным атрибутам относятся системные, только для чтения, архивные, зашифрованные и сжатые. Когда у вас есть полный контроль (или изменение), у вас есть возможность изменять эти атрибуты, но, как вы обнаружили, файл только для чтения доступен только для чтения даже для тех, кто имеет полный контроль. Хотя полный контроль дает вам возможность изменять атрибуты файла, он не отменяет их автоматически, как и ls
не показывает пользователю root скрытый файл по умолчанию в * nix.
Разрешение - это контроль безопасности. Атрибут применяется независимо от субъекта безопасности, пытающегося выполнить операцию.
Атрибутов гораздо больше, чем то, что вы видите в командной строке. К ним относятся, является ли файл ссылкой, зашифрованным, каталогом (тип файла) и целостностью (низкий, средний или высокий).
Константы атрибутов файла
http://msdn.microsoft.com/en-us/library/windows/desktop/gg258117%28v=vs.85%29.aspx
FILE_ATTRIBUTE_ARCHIVE
32 (0x20)Файл или каталог, представляющий собой архивный файл или каталог. Приложения обычно используют этот атрибут, чтобы пометить файлы для резервного копирования или удаления.
FILE_ATTRIBUTE_COMPRESSED
2048 (0x800)Сжатый файл или каталог. Для файла все данные в файле сжимаются. Для каталога сжатие используется по умолчанию для вновь создаваемых файлов и подкаталогов.
FILE_ATTRIBUTE_DEVICE
64 (0x40)Это значение зарезервировано для использования системой.
FILE_ATTRIBUTE_DIRECTORY
16 (0x10)Дескриптор, определяющий каталог.
FILE_ATTRIBUTE_ENCRYPTED
16384 (0x4000)Зашифрованный файл или каталог. Для файла все потоки данных в файле зашифрованы. Для каталога по умолчанию для вновь создаваемых файлов и подкаталогов используется шифрование.
FILE_ATTRIBUTE_HIDDEN
2 (0x2) Файл или каталог скрыт. Он не входит в обычный список каталогов.
FILE_ATTRIBUTE_INTEGRITY_STREAM
32768 (0x8000)Каталог или поток пользовательских данных настроен с соблюдением целостности (поддерживается только на томах ReFS). Он не входит в обычный список каталогов. Параметр целостности сохраняется с файлом, если он переименован. Если файл копируется, для целевого файла будет установлена целостность, если для исходного файла или для целевого каталога установлена целостность.
Windows Server 2008 R2, Windows 7, Windows Server 2008, Windows Vista, Windows Server 2003 и Windows XP: этот флаг не поддерживается до Windows Server 2012.
FILE_ATTRIBUTE_NORMAL
128 (0x80)Файл, для которого не установлены другие атрибуты. Этот атрибут действителен только при использовании отдельно.
FILE_ATTRIBUTE_NOT_CONTENT_INDEXED
8192 (0x2000)Файл или каталог не должны индексироваться службой индексации содержимого.
FILE_ATTRIBUTE_NO_SCRUB_DATA
131072 (0x20000)Поток пользовательских данных не должен быть прочитан сканером целостности фоновых данных (скруббер AKA). Когда он установлен в каталоге, он обеспечивает только наследование. Этот флаг поддерживается только на томах Storage Spaces и ReFS. Он не входит в обычный список каталогов.
Windows Server 2008 R2, Windows 7, Windows Server 2008, Windows Vista, Windows Server 2003 и Windows XP: этот флаг не поддерживается до Windows 8 и Windows Server 2012.
FILE_ATTRIBUTE_OFFLINE
4096 (0x1000)Данные файла доступны не сразу. Этот атрибут указывает, что данные файла физически перемещены в автономное хранилище. Этот атрибут используется удаленным хранилищем, которое представляет собой программное обеспечение для управления иерархическим хранилищем. Приложения не должны произвольно изменять этот атрибут.
FILE_ATTRIBUTE_READONLY
1 (0x1)Файл только для чтения. Приложения могут читать файл, но не могут записывать или удалять его. Этот атрибут не соблюдается в каталогах. Дополнительные сведения см. В разделе Невозможно просмотреть или изменить атрибуты только для чтения или системные атрибуты папок в Windows Server 2003, Windows XP, Windows Vista или Windows 7.
FILE_ATTRIBUTE_REPARSE_POINT
1024 (0x400)Файл или каталог, с которым связана точка повторной обработки, или файл, являющийся символической ссылкой.
FILE_ATTRIBUTE_SPARSE_FILE
512 (0x200)Редкий файл.
FILE_ATTRIBUTE_SYSTEM
4 (0x4)Файл или каталог, часть или исключительно используемый операционной системой.
FILE_ATTRIBUTE_TEMPORARY
256 (0x100)Файл, который используется для временного хранения. Файловые системы избегают записи данных обратно в запоминающее устройство, если доступно достаточное количество кэш-памяти, потому что обычно приложение удаляет временный файл после закрытия дескриптора. В этом случае система может полностью избежать записи данных. В противном случае данные записываются после закрытия дескриптора.
FILE_ATTRIBUTE_VIRTUAL
65536 (0x10000)Это значение зарезервировано для использования системой.
Я дам более подробный ответ, но в целом атрибуты, о которых вы говорите, являются устаревшими настройками файла со времен файловой системы DOS FAT. FAT хранит эти атрибуты как часть записей каталога файловой системы для файла. NTFS имеет собственный набор атрибутов, которые инкапсулируют старые атрибуты. По умолчанию любой пользователь с доступом к файлам может изменять их и может использоваться для предотвращения случайной перезаписи данных.
Разрешения зависят от NTFS, и изменениями в этих разрешениях можно управлять для каждого пользователя (так, чтобы пользователь не мог перейти с только для чтения на доступный для записи). В частности, если вы посмотрите на команду attrib (которая показывает как устаревшие, так и новые добавления атрибутов, такие как целостность в более поздних версиях Windows), можно иметь доступ только для чтения, установленный в разрешениях, но не иметь набор только для чтения в атрибутах. Также интересно (если не важно) понять, что из-за абстракции технически возможно включить устаревшие атрибуты (хранящиеся в атрибуте NTFS $ standard_information) без их обязательного отображения в обычном графическом интерфейсе.
В частности, разрешения на полный доступ позволяют изменять любые разрешения NTFS. Установка атрибута только для чтения предотвращает изменения, пока он не будет удален.
Атрибуты FAT будут иметь приоритет над атрибутами NTFS в Windows.