четверг, 14 июня 2018 г.

Базовые сведения о безопасности в Windows


В безопасности, на самом базовом уровне, всё сводится к субъектам и объектам. Объект - это то, что вы защищаете. Субъект - это то, от кого вы защищаете. Субъекты и объекты используются в аутентификации (authentication) - проверка кто вы; авторизации (authorization) - предоставление доступа к чему-либо и аудите (auditing) - отслеживание, кто получил доступ. Примером субъекта - служит пользователь. Объектом - файл.

Существует такое понятие как принципал безопасности (security principal). В книге Windows Server 2008 Security Resource Kit, от Microsoft Press, даётся такое определение: A security principal is anything that can be assigned a security identifier (SID) and that can be given permission to access something (Принципал безопасности - это всё, чему может быть назначен SID и предоставлены права доступа к чему-либо).
 В Windows принципалами безопасности являются Пользователи (Users), Компьютеры (Computers) и Группы (Groups). А начиная с Windows Vista принципалом безопасности так же является Служба (Service), которая теперь тоже имеет SID.


SID - (Security ID, идентификатор безопасности)
Числовое представление принципала безопасности.

Access Control List (ACL) - Список контроля доступа (ACL) - Это список записей управления доступом (access control entries, ACE). Каждый ACE в ACL идентифицирует доверенное лицо (trustee) и указывает права доступа, разрешенные или запрещенные для этого доверенного лица (trustee). Дескриптор безопасности для защищаемого объекта может содержать два типа ACL: DACL и SACL.

SACL - System Access Control List
Содержит ACE используемые механизмом логирования событий

DACL - Discretionary Access Control List
Список избирательного управления доступом. Используется для управление доступом субъектов к объектам на основе списков управления доступом или матрицы доступа. Состоит из набора ACE.

ACE - Access Control Entries
Запись управления доступом (ACE) является элементом в списке управления доступом (ACL). ACL может иметь ноль или более ACE. Каждый ACE контролирует или отслеживает доступ к объекту определенным доверенным лицом (субъектом).


среда, 16 мая 2018 г.

Powershell Progress Bar


Небольшой пример организации Progress Bar. Скрипт простейший, в дополнительных пояснениях, думаю, не нуждается. Просто три вложенных цикла, в которых на консоль выводится и изменяется Progress Bar

Замечу, что параметр «ParentId» не обязательный. И в примерах я его обычно не встречал. Попробуйте запустить скрипт без него и вы увидите в чём разница. Так же обратите внимание на параметр «Completed». В этом примере я его не использую, но в реальной жизни он может пригодится для того, чтобы в какой-то момент скрыть progress bar

 Для особого шарма можно использовать «SecondsRemaining». Но я пока не понял, как его эффективно использовать. Видь мы никогда не знаем заранее время выполнения скрипта.  Подробнее о «Write-Progress» можно почитать тут: https://docs.microsoft.com/en-us/powershell/module/microsoft.powershell.utility/write-progress



for($a = 1; $a -lt 100; $a++ )
{
    Write-Progress -Id 1 -Activity "Main" -Status 'Progress->' -PercentComplete $a -CurrentOperation $a

    for($b = 1; $b -lt 100; $b++ )
    {
        Write-Progress -Id 2 -ParentId 1 -Activity "Sub1" -Status 'Progress->' -PercentComplete $b -CurrentOperation $b
       
        for($c = 1; $c -lt 100; $c++ )
        {
            Write-Progress -Id 3 -ParentId 2 -Activity "Sub2" -Status 'Progress->' -PercentComplete $c -CurrentOperation $c
        }
    }
}


В результате выполнения скрипта, увидите что-то вроде этого.

P.S.
Случайно заметил, что скорость исполнения этого скрипта в Powershell ISE в три раза выше чем в консоли Powershell. От битности это не зависит. Пока не понял, почему скорость выполнения разная. Кстати этот скрипт можно использовать, если есть необходимость погрузить процессор. Но конечно для генерации CPU load есть более правильные средства.

пятница, 4 мая 2018 г.

Альясы Powershell


Открыл для себя несколько замечательных альясов. Странно даже, что я раньше их не замечал.

В скриптах часто приходится использовать“Where-Object”.

Например:
Get-ChildItem -Path D:\ -Recurse | Where-Object { $_.PSIsContainer }

Вместо “Where-Object” можно использовать “?” (знак вопроса). Вышеупомянутый скрипт в этом случае приобретает следующий вид:

Get-ChildItem -Path D:\ -Recurse | ? { $_.PSIsContainer }

Обе эти записи абсолютно идентичны.

Второй альяс – это “%” знак процента. Он используется вместоForEach-Object” и “foreach”. Следующие три строки так же будут абсолютно идентичны.

  1. Get-ChildItem -Path d:\ -Recurse | ? { $_.PSIsContainer } | ForEach-Object {$_}
  2. Get-ChildItem -Path d:\ -Recurse | ? { $_.PSIsContainer } | foreach {$_}
  3. Get-ChildItem -Path d:\ -Recurse | ? { $_.PSIsContainer } | % {$_}

Список альясов можно получить командлетом Get-Alias.

P.S.
А еще вместо логического оператора -not можно использовать оператор “!” (восклицательный знак). В этом случае две нижеследующие записи будут идентичны.

  1. Get-ChildItem -Path D:\ -Recurse | Where-Object { -not $_.PSIsContainer }
  2. Get-ChildItem -Path D:\ -Recurse | Where-Object { ! $_.PSIsContainer }
P.P.S
Немного поработав с этими альясами пришел к выводу, что если скрипт укладывается в одну строчку, то восклицательный знак и знак вопроса придают строке компактность и выглядит и воспринимается лучше. Но если скрипт большой, в много строк, то Where-Object всё же читается лучше, чем непривычные знаки. Тем более, что в разных языках программирования подобные знаки имеют разные значения и порой приходится напрягаться, чтобы вспомнить их значение в данном конкретном случае.