pozitronik: (Default)
[personal profile] pozitronik
21:44 05.02.2013
Из жизни пресмыкающихся
Возникла задача: сделать определённому юзеру больно запрет на удаление определённого каталога (да ещё лежащего в его пользовательском каталоге). Читать-смотреть можно, удалять-изменять - нельзя. Только сделать это надо непременно из командной строки - чтобы была возможность автоматизировать действие (ну а то галочки в свойствах безопасности каждый может проставить).
Казалось бы - icacls делает всё, что надо.
Где-то с этой мыслёй я провозился два часа, не добившись результата. Как только выставляю через icacls запрет на удаление объекта - пропадает возможность просмотра каталога (при этом права те, которые нужны). Выставляю права на просмотр/чтение - появляется возможность удалять (а запрет на удаление в правах всё остаётся по прежнему).
Это не говоря уж о том, что многие ключи в консольной справке icacls выглядят совершенно одинаково, и никаких пояснений этому не даётся. Например:
R - доступ только на чтение
RC - чтение
GR - общее чтение
RD - чтение данных, перечисление содержимого папки

Вот чем они отличаются?

Провожу эксперимент. Выставляю права из свойств каталога, мышкой. Всё, как надо.
Выставляю такие же права из консоли - фигушки. Причём в тех же свойствах все галочки на тех же местах.
Пытаюсь гуглить, но все ссылки с вопросами-ответами ведут на cacls - устаревшую версию утилиты. И на MSDN, конечно, где лежит почти тот же хелп, что встроен в утилиту (ну чуть побольше кажется, на что я сначала внимания не обратил)

Ладно, я же дипломированный сантехник по компьютерам. Должна быть возможность просмотреть ACL, в формате, понимаемом утилитой. Останется поставить разрешения мышкой, посмотреть ACL, а затем его тупо копировать. Тем более, что в MSDN написано - вызвать icacls для объекта без параметров, он и покажет все права.
Пытаюсь - еггог.

Видимо, я уже ждал подсознательно такой подляны, поэтому что сразу полез перепроверять на сервер (W2008R2). На сервере это работает. Также, как и опция /setowner, и ещё несколько опций, которые, по каким-то непонятным причинам, отсутствуют в icacls на Win7Pro.

Ну вот какого хрена, а?

Ладно, делаю, что придумал. Выставляю права, смотрю список прав:

username:(OI)(CI)(DENY)(D,Rc,WDAC,WO)
username:(OI)(CI)(W,RD,REA,X,DC,RA)


(при этом все доступы такие, как и требуются)

Из этого получаю вот такую команду:

icacls "путь к каталогу" /inheritance:d /remove username /grant username:(OI)(CI)(W,RD,REA,X,DC,RA) /deny username:(OI)(CI)(d,Rc,WDAC,WO)

Поясню: опция /inheritance:d нужна для того, чтобы отменить наследование прав от вышестоящего каталога, владельцем которого пользователь является, при этом не стирая их, а копируя. /remove нужно, чтобы удалить прежде выставленные права пользователя (иначе вносимые права просто допишутся к имеющимся).

Вроде оно. Но при попытке обратиться к этому каталогу из под указанного пользователя возникает ошибка отсутствия доступа (хотя все права остаются ровно теми же)!
Иду в свойства, меняю ЛЮБОЕ из них, возвращаю обратно (т.е. не меняется НИЧЕГО) - всё начинает работать.

Вы видите в этом логику? Я нет.
Ковыряю дальше.

read more at Журнал Великого Позитроника

This account has disabled anonymous posting.
If you don't have an account you can create one now.
HTML doesn't work in the subject.
More info about formatting

December 2016

S M T W T F S
    123
45678910
1112131415 1617
18192021222324
25262728293031

Style Credit

Expand Cut Tags

No cut tags
Page generated Jul. 24th, 2025 12:13 pm
Powered by Dreamwidth Studios