Computer >> Máy Tính >  >> Hệ thống >> máy chủ Windows

Định cấu hình chính sách thực thi tập lệnh PowerShell

Theo mặc định, cài đặt Windows ngăn không cho các tập lệnh PowerShell chạy. Từ góc độ bảo mật, điều quan trọng là hạn chế mã độc hại và không đáng tin cậy chạy từ các tập lệnh PowerShell. Chính sách Thực thi xác định cài đặt để chạy các tập lệnh PowerShell. Trong bài viết này, chúng ta sẽ xem xét các cài đặt có sẵn để chạy tập lệnh PS trên Windows, cách thay đổi Chính sách thực thi và định cấu hình chính sách thực thi tập lệnh PowerShell cho máy tính miền sử dụng GPO.

Chạy Tập lệnh PowerShell bị tắt trên hệ thống này

Khi cố gắng chạy bất kỳ tập lệnh PowerShell nào (tệp PS1) trên Windows 10 sạch, lỗi sau xảy ra:

Không thể tải
File C:\ps\script.ps1 cannot be loaded because running scripts is disabled on this system. For more information, see about_Execution_Policies at https:/go.microsoft.com/fwlink/?LinkID=135170.
+ CategoryInfo : SecurityError: (:) [], PSSecurityException
+ FullyQualifiedErrorId : UnauthorizedAccess

Định cấu hình chính sách thực thi tập lệnh PowerShell

Bạn có thể nhận cài đặt hiện tại cho Chính sách thực thi tập lệnh PowerShell trong Windows bằng lệnh sau:

Get-ExecutionPolicy

Định cấu hình chính sách thực thi tập lệnh PowerShell

Các giá trị Chính sách Thực thi PowerShell sau đây khả dụng:

  • Bị hạn chế - các tập lệnh PowerShell đang chạy bị tắt, bạn chỉ có thể thực hiện các lệnh tương tác trong bảng điều khiển PS;
  • Đã ký tất cả - chỉ cho phép các tập lệnh PS đã ký có chữ ký số của nhà xuất bản đáng tin cậy (bạn có thể ký tập lệnh bằng chứng chỉ tự ký và thêm nó vào chứng chỉ gốc đáng tin cậy). Khi chạy các tập lệnh không đáng tin cậy, cảnh báo sau sẽ xuất hiện:
    Do you want to run software from this untrusted publisher? File .ps1 is published by CN=test1 and is not trusted on your system. Only run scripts from trusted publishers.
  • Đã ký từ xa - bạn có thể chạy các tập lệnh PowerShell cục bộ mà không có bất kỳ hạn chế nào. Bạn có thể chạy các tệp PS từ xa bằng chữ ký số (bạn không thể chạy các tệp PS1 được tải xuống từ Internet hoặc khởi chạy từ một thư mục mạng chia sẻ qua đường dẫn UNC);
  • Không hạn chế - tất cả các tập lệnh PowerShell đều được phép chạy; Khi cố gắng chạy các tập lệnh PowerShell của bên thứ ba, bạn có thể được nhắc xác nhận khởi chạy (xem bên dưới).
  • Bỏ qua - cho phép chạy bất kỳ tệp PS nào (không có cảnh báo nào được hiển thị). Chính sách này thường được sử dụng để chạy các tập lệnh PS tự động mà không hiển thị bất kỳ thông báo nào (ví dụ:khi các tập lệnh được chạy qua GPO, SCCM, Trình lập lịch tác vụ, v.v.) và không được khuyến nghị sử dụng vĩnh viễn;
  • Mặc định - đặt lại cài đặt thực thi tập lệnh PowerShell về cài đặt mặc định; Trên Windows 10 giá trị mặc định cho Chính sách thực thi PowerShell là Bị hạn chế và trên Windows Server 2016 nó là RemoteSigned .
  • Không xác định - chính sách không được thiết lập. Chính sách hạn chế được áp dụng cho hệ điều hành máy tính để bàn và RemoteSigned cho máy chủ.

Cách cho phép PowerShell chạy tập lệnh bằng chính sách thực thi?

Để thay đổi giá trị hiện tại của Chính sách thực thi tập lệnh PowerShell, Set-ExecutionPolicy lệnh ghép ngắn được sử dụng.

Ví dụ:hãy cho phép chạy các tệp tập lệnh PS cục bộ:

Set-ExecutionPolicy RemoteSigned

Xác nhận thay đổi Chính sách Thực thi cho tập lệnh PS1 bằng cách nhấn Y hoặc A .

Định cấu hình chính sách thực thi tập lệnh PowerShell

Để tránh hiển thị lời nhắc xác nhận, bạn có thể sử dụng nút Buộc tham số.

Set-ExecutionPolicy RemoteSigned –Force

Nếu bạn đã đặt giá trị của Chính sách thực thi PowerShell thành Không hạn chế , bạn vẫn sẽ thấy lời nhắc khi cố gắng chạy các tập lệnh từ xa từ các thư mục được chia sẻ bằng các đường dẫn UNC hoặc các tệp được tải xuống từ Internet:

Security warning
Run only scripts that you trust. While scripts from the internet can be useful, this script can potentially harm your computer. If you trust this script, use the
Unblock-File cmdlet to allow the script to run without this warning message.
Do you want to run?
[D] Do not run [R] Run once [S] Suspend [?] Help (default is "D")

Định cấu hình chính sách thực thi tập lệnh PowerShell

PowerShell phân biệt giữa tập lệnh cục bộ và tập lệnh từ xa như thế nào? Đó là do ZoneId định danh một trình duyệt đặt trong luồng thay thế khi tải xuống tệp (xem bài viết Làm cách nào để Windows biết được tệp đã được tải xuống từ Internet hay chưa?). Bạn có thể bỏ chặn tệp bằng cách chọn Bỏ chặn trong thuộc tính tệp hoặc xóa nhãn vùng bằng cách sử dụng Unblock-File cmdlet.

Bạn cũng phải phân biệt giữa các phạm vi khác nhau của Chính sách thực thi PowerShell:

  • MachinePolicy - được đặt bằng GPO và áp dụng cho tất cả người dùng máy tính;
  • Chính sách Người dùng - cũng được thiết lập bằng GPO và áp dụng cho người dùng máy tính;
  • Quy trình - Cài đặt Chính sách thực thi chỉ được áp dụng cho phiên PowerShell hiện tại (và đặt lại sau khi quá trình powershell.exe kết thúc);
  • Người dùng hiện tại - Chính sách thực thi chỉ được áp dụng cho người dùng hiện tại (một tham số của khóa đăng ký HKEY_CURRENT_USER);
  • LocalMachine là chính sách dành cho tất cả người dùng máy tính (một tham số từ khóa đăng ký HKEY_LOCAL_MACHINE).

Bạn có thể đặt phạm vi chính sách bằng cách sử dụng Phạm vi tham số của lệnh ghép ngắn Set-ExecutionPolicy. Ví dụ:

Set-ExecutionPolicy -Scope Process -ExecutionPolicy Bypass –Force

Hãy kiểm tra cài đặt ExecutionPolicy hiện tại cho tất cả các phạm vi:

Get-ExecutionPolicy -List

Scope ExecutionPolicy
----- ---------------
MachinePolicy Undefined
UserPolicy Undefined
Process Bypass
CurrentUser Undefined
LocalMachine RemoteSigned

Định cấu hình chính sách thực thi tập lệnh PowerShell

Các giá trị Chính sách thực thi bạn đặt bằng cách sử dụng lệnh ghép ngắn Set-ExecutionPolicy cho phạm vi CurrentUser và LocalMachine được lưu trữ trong sổ đăng ký. Ví dụ:chạy lệnh này:

Set-ExecutionPolicy -Scope LocalMachine -ExecutionPolicy Restricted –Force

Mở khóa đăng ký HKEY_LOCAL_MACHINE \ SOFTWARE \ Microsoft \ PowerShell \ 1 \ ShellIds \ Microsoft.PowerShell và kiểm tra giá trị REG_SZ của ExecutionPolicy tham số. Nó sẽ thay đổi thành Bị hạn chế (các giá trị tham số được phép là Bị hạn chế, Đã ký tất cả, Đã ký từ xa, Bỏ qua, Không hạn chế Không xác định).

Định cấu hình chính sách thực thi tập lệnh PowerShell

Các cài đặt tương tự cho phạm vi Người dùng hiện tại nằm trong HKEY_CURRENT_USER \ SOFTWARE \ Microsoft \ PowerShell \ 1 \ ShellIds \ Microsoft.PowerShell .

Điều đó có nghĩa là bạn có thể triển khai cài đặt chính sách thực thi tập lệnh PowerShell thông qua sổ đăng ký bằng Tùy chọn chính sách nhóm.

Lưu ý rằng ExecutionPolicy với Tất cả đã ký giá trị ở cấp LocalMachine được sử dụng trong môi trường công ty thường xuyên nhất. Nó cung cấp sự cân bằng tốt nhất giữa bảo mật và sự tiện lợi. Đối với mục đích sử dụng cá nhân, bạn có thể sử dụng cài đặt Đã ký từ xa trên máy tính của mình. Chính sách Bỏ qua chỉ có thể được sử dụng để chạy một số tác vụ (ví dụ:để chạy tập lệnh bằng GPO hoặc các tác vụ trong Bộ lập lịch tác vụ).

Đặt chính sách thực thi PowerShell trong Active Directory bằng GPO

Bạn có thể định cấu hình Chính sách Thực thi cho các tập lệnh PowerShell trên máy chủ hoặc máy tính miền trong miền Active Directory bằng Chính sách Nhóm.

  1. Trong trình soạn thảo GPO miền (gpmc.msc ), tạo GPO mới hoặc chỉnh sửa GPO hiện có và liên kết nó với đơn vị tổ chức chứa máy tính mà bạn muốn áp dụng Chính sách thực thi tập lệnh PowerShell;
  2. Mở Máy tính Cấu hình -> Chính sách -> Mẫu Quản trị -> Thành phần Windows -> Windows PowerShell trong trình chỉnh sửa GPO và tìm nút Bật thực thi tập lệnh tham số. Có chính sách tương tự trong phần GPO người dùng - Cấu hình người dùng, nhưng chính sách máy tính có mức độ ưu tiên cao hơn.
  3. Chính sách có thể có ba giá trị:
    1. Chỉ cho phép các tập lệnh đã ký - tương ứng với chính sách Đã ký kết
    2. Cho phép tập lệnh cục bộ và tập lệnh được ký từ xa - tương ứng với chính sách PS RemoteSigned
    3. Cho phép tất cả các tập lệnh - tương ứng với chính sách Không hạn chế
      Định cấu hình chính sách thực thi tập lệnh PowerShell
  4. Đặt giá trị chính sách bạn muốn, lưu GPO và cập nhật cài đặt Chính sách Nhóm trên máy tính của bạn;
  5. Đảm bảo rằng các cài đặt thực thi mới đã được áp dụng cho phạm vi MachinePolicy.
    Định cấu hình chính sách thực thi tập lệnh PowerShell

Sau khi định cấu hình Chính sách thực thi bằng GPO, bạn sẽ không thể thay đổi cài đặt chính sách thực thi tập lệnh theo cách thủ công. Nếu bạn cố gắng thay đổi cài đặt Chính sách thực thi trên máy tính mà GPO được áp dụng, lỗi sau sẽ xuất hiện:

Set-ExecutionPolicy: Windows PowerShell updated your execution policy successfully, but the setting is overridden by a policy defined at a more specific scope. Due to the override, your shell will retain its current effective execution policy of RemoteSigned. Type "Get-ExecutionPolicy -List" to view your execution policy settings.

Định cấu hình chính sách thực thi tập lệnh PowerShell

Theo cách tương tự, bạn có thể định cấu hình Chính sách thực thi trên một máy tính độc lập bằng trình soạn thảo GPO cục bộ - gpedit.msc.

Làm cách nào để Bỏ qua Chính sách Thực thi PowerShell trên Windows?

Có một số thủ thuật có thể giúp bạn nếu bạn muốn chạy tập lệnh PowerShell trên máy tính của mình mà không thay đổi cài đặt Chính sách thực thi. Ví dụ:tôi muốn chạy một tập lệnh PS1 đơn giản để kiểm tra xem nó có được chạy với tư cách quản trị viên hay không.

Bạn có thể lấy nội dung tập lệnh bằng Get-Content và chuyển hướng nó đến luồng đầu vào tiêu chuẩn của bảng điều khiển PS.

Get-Content c:\ps\check_process_elevation.ps1 | PowerShell.exe -noprofile –

Hoặc bạn có thể chạy quy trình powershell.exe mới với chính sách Bỏ qua:

powershell.exe -noprofile -executionpolicy bypass -file c:\ps\check_process_elevation.ps1

Định cấu hình chính sách thực thi tập lệnh PowerShell