powersell

Bạn đã bao giờ muốn ủy thác một nhiệm vụ, nhưng thấy rằng các quyền cần thiết có thể quá rủi ro để đưa ra? Hoặc, bạn có muốn khóa những thứ như tạo nhóm trong AD để thực thi quy ước đặt tên của các nhóm không?

JEA có thể giúp bạn với điều đó và nhiều hơn nữa. Trong bài viết này, chúng ta sẽ tìm hiểu về cách bạn có thể ủy quyền các tập lệnh đã tạo của mình với PowerShell 5.1.

JEA là gì?

JEA là một giải pháp PowerShell của Microsoft, có thể hạn chế người dùng (và quản trị viên) chỉ có thể thực hiện các tác vụ được chỉ định trong một phiên PowerShell cụ thể, ngay cả khi họ yêu cầu quản trị viên cục bộ trên tài nguyên nói trên. Ngoài ra, bạn có thể cực kỳ cụ thể. Chỉ các lệnh bạn chỉ định mới có thể được thực thi, bạn chỉ có thể kích hoạt các giá trị tham số cụ thể và giá trị tham số phù hợp với một mẫu cụ thể.

Ví dụ: bạn có thể kích hoạt Serviceesk để chỉ khởi động lại một dịch vụ cụ thể với Restart-Servicehoặc chỉ thêm các nhóm vào AD theo quy ước đặt tên cụ thể. Bạn có thể làm tất cả những điều này mà không cần cấp cho họ quyền rõ ràng trên máy chủ hoặc trong AD. Đây là một công cụ có thể giúp bạn tiết kiệm rất nhiều thời gian và bảo vệ môi trường của bạn. Hãy bắt đầu bằng cách gói kịch bản của chúng tôi vào một chức năng.

Bước 1: Tạo một chức năng trong tập lệnh của bạn

Bước đầu tiên nếu bạn chưa làm như vậy là tạo một chức năng từ tập lệnh của bạn. Điều này khá dễ dàng, giả sử rằng bạn đã thiết lập parameters. Bên dưới,

Function New-FolderAndShare {
    [cmdletbinding()]
    param(
        # Name of the share
        [parameter(Mandatory)]
        [ValidatePattern("^(Project \d{5}|Team (Finance|HR|IT|Multi) [a-z ]+)$")]
        [string]$ShareName,

        # Directory of the new share folder locally
        [parameter(Mandatory)]
        [ValidatePattern("^(D|E|F):\\Shares\\$")]
        [string]$Path,

        # Who to have full access
        [parameter(Mandatory)]
        [ValidateSet("^CONTOSO\\")]
        [string]$FullAccess

    )

        $FullPath = Join-Path $Path $ShareName
    New-Item -ItemType Directory -Path $FullPath
    New-SmbShare -Path $FullPath -Name $ShareName -FullAccess $FullAccess

}

Bạn xác thực các tham số với ValidatePotype trong hàm, nhưng nếu đây là một phần của mô-đun, bạn có thể làm điều đó trong tệp RoleCapabilities thay vì với VisibleFifts .

Làm cho tập lệnh trở thành một hàm cho phép chúng ta kiểm soát tốt hơn các tham số nào được phép trong JEA và giúp xuất dễ dàng hơn.

Bước 2: Tạo khả năng nhập vai

Tệp RoleCapabilities quyết định vai trò được chỉ định (được xác định trong bước tiếp theo) được phép thực hiện. Điều này bao gồm những lệnh nào họ được phép chạy, những tham số nào họ có thể sử dụng và những mô-đun cần nhập.

Mặc dù Vai trò có thể được tạo thủ công, nhưng bạn nên sử dụng New-PSRoleCapabilityFilelệnh được tích hợp trong PowerShell 5.1. Cũng trong tệp này, bạn sẽ tải chức năng mà chúng ta đã tạo ở bước trước.

Tập lệnh follwing tạo một tệp có tên FileShareCreator.psrc và thêm New-FolderAndSharechức năng (cần được tải vào phiên hiện tại):

# RUN THIS IN THE SERVER THAT WILL BE THE JEA ENDPOINT

$RoleCapabilitiesParam = @{
    # Define a function that will be available in the cmdlet
    FunctionDefinitions = @{ 
        Name = 'New-FolderAndShare'
                # Import the code of the function
        ScriptBlock =  [ScriptBlock]::Create(
            (Get-Command New-FolderAndShare).Definition
        )
    }

    # Modules used in the function needs to be explicity imported
    ModulesToImport = @(
        "SmbShare",
        "Microsoft.PowerShell.Management"
    )
    Path = ".\FileShareCreator.psrc"
}

New-PSRoleCapabilityFile @RoleCapabilitiesParam

Sử dụng Get-Commandđể tìm nạp chức năng trong tham số FunctionDefinitions. Bạn cũng có thể thêm tập lệnh thô với các tham số.

Bạn cũng chỉ định cách bạn được phép sử dụng hàm trong VisibleCmdlettham số. Bạn làm điều này bằng cách chỉ định tên của hàm và các tham số của nó cùng với một biểu thức chính quy.

Với điều này, bạn có thể tạo một điều khiển cực kỳ chi tiết về những gì người dùng có thể và không thể làm. Nhưng có một cảnh báo để thực hiện công việc này, bạn cần thêm tệp psrc vào mô-đun.

Bước 3: Tạo Mô-đun cho Tệp Vai trò Khả năng

Đã đến lúc tạo ra một mô-đun mà bạn có thể đưa khả năng vai trò của mình vào. JEA tìm thấy Vai trò Khả năng theo tên tệp psrc mà không có phần mở rộng của nó, vì vậy hãy tránh trùng lặp nếu bạn sẽ tạo thêm khả năng vai trò sau này.

Kịch bản sau đây là phiên bản sửa đổi của những gì bạn tìm thấy trong tài liệu chính thức của JEA . Nó tạo ra một mô-đun mới trong thư mục mô-đun, tạo các tệp và thư mục cần thiết cần thiết và sao chép tệp psrc mà bạn đã tạo trong Bước 2 vào nó:

# RUN THIS IN THE SERVER THAT WILL BE THE JEA ENDPOINT

# Create a folder for the module
$modulePath = Join-Path $env:ProgramFiles "WindowsPowerShell\Modules\FileShareJEA"
New-Item -ItemType Directory -Path $modulePath

# Create an empty script module and module manifest.
# At least one file in the module folder must have the same name as the folder itself.
New-Item -ItemType File -Path (Join-Path $modulePath "FileShareJEA.psm1")
New-ModuleManifest -Path (Join-Path $modulePath "FileShareJEA.psd1") -RootModule "FileShareJEA.psm1"

# Create the RoleCapabilities folder and copy in the PSRC file
$rcFolder = Join-Path $modulePath "RoleCapabilities"
New-Item -ItemType Directory $rcFolder
Copy-Item -Path .\FileShareCreator.psrc -Destination $rcFolder

Bây giờ bạn đã tạo ra một khả năng vai trò và một chức năng để bạn có thể sử dụng nó trong JEA. Những gì còn lại bây giờ là tạo Cấu hình Phiên PowerShell để ánh xạ các nhóm AD sang các vai trò bạn vừa tạo.

Bước 4: Xác định vai trò

Trong bước này, bạn sẽ tạo tệp Cấu hình Phiên PowerShell để xác định vai trò nào sẽ được chỉ định Khả năng (từ tệp . Psrc mà chúng tôi đã tạo ở Bước 2).

Bạn cũng sẽ tạo nhóm AD và thư mục bảng điểm ở đây.

# Create directory to store logs
New-Item -ItemType Directory -Path 'C:\ProgramData\JEAConfiguration\Transcripts' -Force

# Create AD group (you might need to do it on another server)
New-ADGroup -Path "OU=Groups,DC=contoso,DC=com" -Name 'JEA_FILESHARE_CREATOR' -GroupScope DomainLocal

# RUN THIS IN THE SERVER THAT WILL BE THE JEA ENDPOINT

# Define parameters for New-PSSessionConfigurationFile
$PSSessionConfigurationParams = @{
    # Run as a temporary account
    RunAsVirtualAccount = $True

    # That is a local administrator
    RunAsVirtualAccountGroups = @(
        "administrators"
    )

    # Path where to save log files of what connected users are doing
    TranscriptDirectory = 'C:\ProgramData\JEAConfiguration\Transcripts'

    # Map an active directory group to the capability we created
    RoleDefinitions = @{
        'CONTOSO\JEA_FILESHARE_CREATOR' = @{
            RoleCapabilities = 'FileShareCreator'
        }
    }
        
        # Path of the PSSC file
    Path = ".\SessionConfiguration.pssc"

}
# Create the PSSC file
New-PSSessionConfigurationFile @PSSessionConfigurationParams

Bước 5: Tạo Phiên PowerShell

Trong bước này, bạn sẽ đọc trong tệp SessionConfiguration.pssc mà bạn đã tạo ở bước trước. Điều này cho phép các thành viên của JEA_FILESHARE_CREATOR kết nối qua PowerShell với máy chủ:

PS51> Register-PSSessionConfiguration -Path .\SessionConfiguration.pssc -Name 'JEAFileShare' -Force

PSPath            : Microsoft.WSMan.Management\WSMan::localhost\Plugin\JEAFileShare
PSParentPath      : Microsoft.WSMan.Management\WSMan::localhost\Plugin
PSChildName       : JEAFileShare
PSDrive           : WSMan
PSProvider        : Microsoft.WSMan.Management\WSMan
PSIsContainer     : True
Keys              : {Name=JEAFileShare}
Name              : JEAFileShare
TypeNameOfElement : Container
Type              : Container

Bạn đã hoàn tất! Thêm người dùng vào JEA_FILESHARE_CREATOR không có quyền truy cập vào máy chủ thông qua các phương tiện thông thường và dùng thử với tư cách người dùng đó bằng cách nhập:

PS51> Enter-PSSession -ComputerName fs02.contoso.com -ConfigurationName JEAFileShare
PS51> New-FolderAndShare -ShareName "Project 12345" -Path D:\Share\

Bây giờ bạn có thể chạy lệnh với tư cách quản trị viên cục bộ tạm thời bị khóa và chỉ được bật để chạy một vài lệnh mặc định (hiển thị Get-Commandtrong khi trong phiên) và New-FolderAndSharechức năng được thêm vào trong tệp Khả năng Vai trò.

Nếu bạn muốn xem tài khoản được tạo tạm thời, hãy thêm VisibleExternalCommands @('c:\windows\system32\whoami.exe')vào các tham số Vai trò Khả năng của bạn trong Bước 2. Bạn có thể chạy whoami và xem tên quản trị viên cục bộ:

PS51 >whoami
winrm virtual users\winrm va_1_contoso_joe_helpdesk

Tóm lược

Sử dụng JEA có thể là một cách tuyệt vời và dễ dàng để ủy thác các nhiệm vụ và bảo vệ môi trường của bạn. Điều này không chỉ bao gồm các tập lệnh của riêng bạn mà cả các mô-đun tích hợp và các mô-đun được cài đặt. Mặc dù JEA có thể là một giá trị gia tăng tuyệt vời, hãy cẩn thận! Bạn có thể tạo ra rủi ro lớn cho môi trường của mình nếu bạn ủy quyền các lệnh sai hoặc chỉ định các tham số sai cho các cá nhân

Để lại một bình luận