Чому дозволи на зберігання файлів зберігаються під час переміщення файлів в одному обсязі?


9

Часом у нас виникає проблема, що файл має дозволи, які відрізняються від папки, в якій він знаходиться.

Тепер я з’ясував, що є стаття KB, яка пояснює причину цього:

За замовчуванням об’єкт успадковує дозволи від свого батьківського об'єкта під час створення або коли він скопійований або переміщений у свою батьківську папку. Єдиний виняток із цього правила відбувається, коли ви переміщуєте об’єкт до іншої папки на тому ж томі. У цьому випадку початкові дозволи зберігаються.

Таким чином, користувач перемістив файл з однієї папки в іншу, і дозволи з вихідної папки збереглися.

Моє запитання зараз: чому існує такий виняток? Які міркування за цим?

Відповіді:


8

Я пояснив це в публікації в блозі http://think-like-a-computer.com/2011/07/24/moving-files-on-the-same-ntfs-volume-does-inherit-permissions/, але це також пояснено нижче.

Коли файл копіюється, він повинен створити абсолютно новий файл і призначити йому новий набір дозволів, тому він отримує дозволи з батьківської папки, як відомо.

Коли файл переміщується в інший том, що насправді відбувається, це те, що він копіюється в новий том, а старий файл видаляється. Отже, повторюється той самий процес, що і вище, оскільки це знову новий файл і потрібні дозволи.

Коли файл переміщується в одному обсязі, насправді нічого не відбувається (на рівні диска). Він просто змінює логічне розташування файлу. Фактичні дані та фізичний файл на диску не торкнулися та не змінені. Ви коли-небудь помітили, коли ви переміщаєте файл 5 Гб в іншу папку на тому ж диску, це робиться майже миттєво? Ось чому, оскільки він насправді не перемістився, але вказівник на те, де файл логічно існує, змінився. Оскільки це не було змінено жодним чином, дозволи також не змінюються.

Це причина такої поведінки.

Редагувати: Щось я забув згадати ... Стаття MS не зовсім точна. Цитата MS:

За замовчуванням об’єкт успадковує дозволи від свого батьківського об'єкта під час створення або коли він скопійований або переміщений у свою батьківську папку. Єдиний виняток із цього правила відбувається, коли ви переміщуєте об’єкт до іншої папки на тому ж томі. У цьому випадку початкові дозволи зберігаються.

Вищенаведена цитата стосується лише об'єктів, яким надано ЕКСПЛІАТНО визначені дозволи сек (виключення успадкування). Як було сказано в моїх коментарях, справа полягає в тому, щоб максимально ефективно робити записи ACL. Розглянемо наступний приклад:

Щоб пояснення не було простим, скажімо, у вас встановлена ​​папка, яка дозволяє користувачам змінювати права лише. Нижче цього тисячі файлів, і жоден з них не має явних дозволів. Створювати ACL-файли для кожного файлу не дуже ефективно, оскільки вони абсолютно однакові perms, тому він встановлює ONE ACL-запис для папки. Цей наступний біт дуже важливий для розуміння; самі файли НЕ мають ACL PERMS. Отже, коли ви переміщаєте будь-який із цих файлів у нову папку того самого обсягу, MS стверджує, що перехідні речовини переміщуються разом із ним (як вище цитата). Задайте собі питання .... як? Перш за все у файлі не було пермісів, щоб переміщатися поперек. Це насправді неправильно, і я просто перевірив це зараз, щоб підтвердити. Скажімо, папка призначення, в яку ви переміщуєте файл, має perms, щоб дозволити всім групам змінювати права лише. Так як у файлу безпосередньо немає ACL, він успадковує ACL батьківської папки. Це означає, що хімічні речовини змінилися від змін користувачів (стара папка) до всіх модифікованих (нова папка).

Помітьте різницю ?? Цього разу переміщення файлу в іншу папку в тому ж обсязі насправді змінило візуалізацію, що МС каже, що цього не робить. Я щойно знайшов помилку в документації на MS, починаючи з 2000 року?

Тепер подивіться на той самий сценарій, коли використовуєте явні дозволи. Якщо ви встановите явні дозволи на файл у цій папці (спадкування вимкнено), який, наприклад, забороняє користувачам читати доступ, тепер він створює НОВУ запис ACL спеціально для цього файлу. Тепер, коли ви переміщуєте файл на нове місце, у ньому є запис ACL, безпосередньо пов’язаний з ним. У цьому випадку переміщення файлу на нове місце в тому ж обсязі ЗАБЕЗПЕЧАЄ свої дозволи (як стверджує MS)!


+1 Обидва є гарними відповідями, але ваша справа до речі. Мені подобається ваш коментар про те, як миттєво рухається файл 5 Гб. Гарний візуальний.
KCotreau

Я схильний вважати, що "жодної копії не відбувається" є основною причиною, чому ACL не торкається.
VVS

1
Немає технічних причин зміни таблиці файлової системи не повинні впливати на відповідний запис ACL. Я вважаю це пояснення правильним. Але я також думаю, що це описує ефект, а не фактичну причину. Причиною є власна модель безпеки ACL, що базується на обсязі. Операції переміщення / копіювання між різними томами, що розуміються як перенесення привілеїв та змін у тому ж томі, що і агностик привілеїв. За замовчуванням, природно.
Гном

1
І логічно, що дозволи на файл встановлюються при створенні. Зверніть увагу, коли ви змінюєте дозволи в папці, що ви повинні поширювати дозволи на всі дочірні об’єкти. Ось чому Windows іноді підкидає діалогове вікно, оскільки воно змінює всі дочірні об’єкти, якщо їх багато.
surfasb

1
@Mucker: Вибачте, але ваше пояснення просто неправильне. Windows завжди зберігає ACL-файли з файлами, навіть якщо вони передаються у спадок. І з точки зору файлової системи, вони завжди рухаються разом із файлом, якщо файл переміщується в одному обсязі. Залежно від певних системних налаштувань Windows Explorer вмикається та відрегулює дозволи після переміщення. Але це Провідник і не має нічого спільного з файловою системою. І ще гірше: це залежить від версії Windows та (як я вже згадував) певних системних налаштувань. Дивіться blogs.msdn.com/b/oldnewthing/archive/2006/08/24/717181.aspx
Пол Грок

6

Коли ви переміщуєте файли в одному обсязі, ви традиційно переставляєте свою файлову систему . Зміна дозволу на файл на рівні каталогу може вимкнути вас із цього файлу в момент закінчення операції переміщення. Це небажано, якщо, наприклад, ви просто випадково перемістили файл у систему або папку зі спеціальними дозволами власності або захищені іншим чином. Не було б способу виправити помилку, окрім отримання права власності на файл (якщо у вас є привілеї) чи ведення журналу з привілейованим обліковим записом. Враховуючи звичайну щоденну роботу комп’ютера, ви можете виявити, що не маєте контролю над своєю файловою системою.

Така поведінка є загальною серед більшості (якщо не всіх) операційних систем, що використовують ACL. Це гарантує звичайні операції з файловою системою в обсязі як користувачами, так і програмами.

І навпаки, під час переміщення файлів між томами ви традиційно віддаєте файл на контроль чимось чи кимсь іншим. Як ви добре розумієте, файл має включати дозволи цільової папки, які дадуть цілі необхідні дозволи, щоб потім переставити власну файлову систему, як вони вважають за потрібне.

Природно, це не завжди бажано. З цієї причини операції переміщення та копіювання можна визначити за допомогою спеціальних правил успадкування дозволу. З тієї ж статті:

  • Щоб зберегти дозволи, коли файли та папки копіюються або переміщуються, використовуйте утиліту Xcopy.exe за допомогою перемикача / O або / X. Оригінальні дозволи об’єкта будуть додані до спадкових дозволів у новому місці.

  • Щоб додати оригінальні дозволи об’єкта до спадкових дозволів під час копіювання або переміщення об'єкта, використовуйте утиліту Xcopy.exe з перемикачами –O і –X.


"Це небажано, якщо, наприклад, ви просто випадково перемістили файл у систему або папку зі спеціальними дозволами власності або захищені іншим чином." - Отже, ви переміщуєте файл, наприклад, у папку з дозволами лише для запису, і все ще можете перемістити файл назад .. чому це не бажано щодо різних томів?
VVS

1
@VVS, оскільки ACL - модель захисту файлової системи. Кожен том містить власну файлову систему і, отже, власну таблицю ACL. З точки зору безпеки ACL, різний об'єм є еквівалентом іншого "користувача". Перемістивши файл на інший об'єм, ви передаєте управління тому "користувачеві". Але вам все одно надають можливість цього не робити, якщо ви дійсно цього хочете. Просто поведінка за замовчуванням вирішує проблеми безпеки ACL.
Гном

1

Гаразд Це справжнє зниження. По-перше - ми говоримо про один ПК чи сервер? Я припускаю, що ми говоримо про Сервер. Отже .... як адміністратор Wintel компанії A, ви створюєте файлову систему на мережевому диску на новому сервері. Ви базуєте його на відділах, тобто кожен відділ має папку, і кожна папка має свій унікальний ACL через конфіденційність, як це, мабуть, норма - так? Тому, якщо ви збираєтеся перемістити файл у папку іншого відділу, чому б на землі ви не хотіли, щоб він успадкував перманентну нову папку? Що я маю на увазі - чому б у вас була файлова система на основі дозволів, якщо ви не збираєтесь її використовувати? Я можу навести приклад із реального життя, коли для переміщених файлів / папок важливо завжди успадковувати ACL батьківської папки, просто запитайте мене.

Переміщення файлів у томі або переміщення їх від vol X до vol Y ... У чому суттєва різниця? Наскільки ви пересуваєте місце розташування деяких файлів - на різних томах чи не відрізняєтесь у корпоративному середовищі, наскільки я бачу. Справжня причина, чому одна включає спадщину за замовчуванням, а інша вже не згадується Маккером - це "ефективність". Перетягування та видалення файлів у томі просто змінює запис в індексі - файли не переміщуються, а їх інформація про ACL залишається в спокої. Робиться для простої операції. Однак, коли файли переміщуються в різних томах, файли та їх ACL повинні бути переосмислені, тому правильне їх виконання та включення у спадщину має сенс, оскільки це не спричиняє накладних накладних витрат.

Я не можу зрозуміти, чому Microsoft не вирішує цю проблему. Було б занадто важко включити діалогове вікно як частину перетягування краплі Explorer? Щось на кшталт "Ви перемістили файли до місця з різними правами доступу? Чи бажаєте ви успадкувати дозволи нової батьківської папки? Y чи N?"

З повагою, Стоунгігант

Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.