Администраторам часто нужно(или просто хочется) выполнять настройки удаленно. Это позволяет не отрывать лишний раз от работы пользователя и укреплять знание принципов работы ОС.
Разберемся как создать на удаленном ПК сетевую папку используя PsExec
Создаем сетевую папку
Одновременно создать папку и назначить на нее права средствами CMD нельзя, поэтому предварительно создадим папку
1 |
psexec \\COMP2135 cmd "/c md C:\Users\Username\Test" |
По умолчанию, если при открытии сетевого доступа к папке вы не назначили нужные вам права, будет назначен доступ на чтение только для группы Everyone.
Делаем папку сетевой
1 |
psexec \\COMP2135 net share ShareFolder=C:\Users\Username\Test |
Если теперь вы попробуете добавить папке права следующей командой,
1 |
psexec \\COMP2135 net share ShareFolder=C:\Users\Username\Test /grant:"user1",full /grant:"user2",change /grant:"user3",read |
то получите сообщение о том, что
1 |
Общий доступ к этому имени уже открыт. |
По описанной выше причине, расшаривать папку нужно сразу, указывая нужный набор прав, иначе придется снять с папки сетевой доступ командой
1 |
psexec \\COMP2135 net share Test /delete |
и выдать доступ по новой, с уже заданными правами.
Upd: Добавление прав на сетевую папку средствами Powershell
Для этого можно использовать командлет из модуля SmbShare
1 |
Grant-SmbShareAccess -CimSession "ServerName" -Name "ShareName" -AccountName "Domain\Username$" -AccessRight Read -Confirm:$False |
Проверить успех операции можно командлетом
1 |
Get-SmbShareAccess -Name "ShareName" |
Назначение сетевых прав через Powershell
Необходимость в предварительном создания папки никуда не пропала
1 |
psexec -s \\COMP2135 powershell -command New-Item -ItemType Directory -Path C:\Users\Username\Test |
Делаем папку общей и назначаем ей права сетевого доступа
1 |
psexec -s \\COMP2135 powershell -windowStyle hidden -command New-SmbShare -Name Test -Path C:\Users\Username\Test -FullAccess user1,user2 -ReadAccess user3 |
Назначение прав NTFS
Вспомним как назначаются права доступа через Powershell
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 |
# Считываем текущие параметры ACL для нашей папки $acl = Get-Acl C:\Users\Username\Test # Создаем набор разрешений, который мы назначим папке $permission = "user1","fullcontrol","containerinherit,objectinherit","none","allow" # Смотрим текущие ACE $acl.Access # ACE - Запись соответствия пользователя и его прав доступа для данного объекта # Создаем объект ACE на основе ранее записанных разрешений $ace = new-object security.accesscontrol.filesystemaccessrule $permission # Вносим сделанные изменения в исходный ACL $acl.setaccessrule($ace) # Назначаем ACL на выбранную папку $acl | set-acl C:\Users\Username\Test |
Как видим, параметры доступа в Powershell не задаются одной строкой.
Поэтому для удаленного назначения прав NTFS стоит воспользоваться CMD утилитой icacls:
1 |
psexec \\COMP2135 icacls "C:\Users\Username\Test" /grant user1:F /Q |
/Q — не выводить сообщения о успешной выполненных командах
user1:F — предоставить пользователю user1 полный доступ.
Так же допустимы варианты и другие варианты. Например:
R — доступ на чтение
W — доступ на запись
А более подробно про ACL можно прочитать в отдельно посвященной этой теме статье