Настройка безопасности каталога, чтобы позволить пользователю и запретить все - PullRequest
1 голос
/ 07 июня 2010

У меня есть приложение winforms, в котором мне нужен доступ к защищенному каталогу.Я использую олицетворение и создаю WindowsIdentity для доступа к папке.

Моя проблема - написание модульных тестов для проверки безопасности каталога;Я хотел бы написать код, который создает каталог, защищенный только для ОДНОГО пользователя, который не является текущим пользователем, использующим UT (иначе тест будет бесполезным).

Я знаю, как добавитьразрешения для определенного пользователя, но как я могу отказать остальным, включая администраторов?(в случае, если пользователь, выполняющий UT, является администратором) (это будет мудрым решением?)

DirectoryInfo directoryInfo = new DirectoryInfo(path);
DirectorySecurity directorySecurity = directoryInfo.GetAccessControl();

directorySecurity.AddAccessRule(new FileSystemAccessRule("Domain\SecuredUser",
                    FileSystemRights.FullControl, 
                    InheritanceFlags.ContainerInherit | InheritanceFlags.ObjectInherit,
                    PropagationFlags.InheritOnly,                         
                    AccessControlType.Allow));

directorySecurity.RemoveAccessRule(new FileSystemAccessRule("??",   
                    FileSystemRights.FullControl, 
                    InheritanceFlags.ContainerInherit | InheritanceFlags.ObjectInherit,
                    PropagationFlags.InheritOnly,  
                    AccessControlType.Deny));

directoryInfo.SetAccessControl(directorySecurity);

Это не работает.Я не знаю, кого я должен отрицать.Домен \ Администраторы, Домен \ Администраторы, я ... Никому не отказывают, и когда я проверяю безопасность папки - SecuredUser имеет доступ к папке, но разрешения не проверяются, даже если я указал FullControl.

В основном я хочу закодировать это:

<authorization>
 <allow users ="Domain\User" />
 <deny users="*" /> 
</authorization>

Я думал об олицетворении UT-запуска со слабым пользователем без прав, но это привело бы к:папку, и я не уверен, что это правильный дизайн.

Помощь будет принята с благодарностью, спасибо.

Ответы [ 3 ]

2 голосов
/ 08 июня 2010

Я не уверен в этом, но я думаю, что отрицание имеет приоритет над разрешением. Поэтому, если вы попытаетесь отказать всем в разрешениях (используя группу «Все»), это, вероятно, отменит разрешения для специального пользователя, которому вы пытались предоставить доступ.
Что должно сработать, так это удалить все существующие права доступа, а затем добавить единственное правило, разрешающее доступ специального пользователя.

1 голос
/ 07 июня 2010

Я только что проверил пример кода MSDN из http://msdn.microsoft.com/en-us/library/system.io.directoryinfo.setaccesscontrol%28v=VS.100%29.aspx, и у меня та же проблема. Когда я пошагово отлаживаю образец программы, добавляются права доступа «только специальные права» вместо «readdata», как указано в программе.
Обновление: в Windows 7, в меню Файл -> Свойства -> Безопасность -> Дополнительно -> Действующие разрешения, разрешения отображаются как объявленные. Галочка «специальные разрешения» на самом деле вводит в заблуждение.
Обновление 2: если вы используете конструктор с пятью аргументами и установите для флагов «InheritanceFlags.ContainerInherit | InheritanceFlags.ObjectInherit» и «PropagationFlags.InheritOnly», то доступ отображается на вкладке безопасности точно так же, как было добавлено. Кажется, что длинный список доступа на вкладке безопасности отмечен галочкой, только если права наследуются и распространяются в каждом подкаталоге.

0 голосов
/ 17 июля 2011

Рассматривали ли вы группу учетных записей "{имя_домена} \ Пользователи домена"? Запрет доступа к этой группе должен запретить доступ всем пользователям в указанном домене.

...