Để thực hiện một số hành động trong Windows, quyền quản trị viên là chưa đủ. Ví dụ, bạn không thể thay thế hoặc xóa tệp hệ thống và một số khóa registry, dừng dịch vụ hệ thống hoặc thực hiện các hành động không an toàn khác có thể ảnh hưởng đến độ ổn định của hệ điều hành. Trong các trường hợp này, quản trị viên hệ thống có thể lấy quyền sở hữu tệp hoặc đối tượng khác, hoặc thực hiện hành động thay mặt tài khoản hệ thống. Bài viết này sẽ xem xét cách chạy ứng dụng hoặc dấu nhắc lệnh với tư cách tài khoản SYSTEM (LocalSystem) đặc quyền trên Windows 10.
Tuyên bố miễn trừ trách nhiệm. Thay đổi hình ảnh Windows thay mặt tài khoản SYSTEM là thao tác không tiêu chuẩn. Hãy lưu ý rằng các hành động không đúng đắn được thực hiện với đặc quyền NT AUTHORITY\SYSTEM có thể làm hỏng Windows của bạn. Trong thực tế, chạy tiến trình với tư cách tài khoản System hiếm khi được dùng. Trong hầu hết các trường hợp, bạn có thể giải quyết vấn đề bằng các cách tiêu chuẩn: runas, chạy ứng dụng mà không có đặc quyền quản trị và ẩn lời nhắc UAC, lấy quyền sở hữu tệp/khóa registry, tắt UAC cho tất cả hoặc chỉ một số ứng dụng cụ thể, cấp đặc quyền quản lý dịch vụ cho người dùng không phải quản trị.
Tài khoản SYSTEM tích hợp được SCM (Service Control Manager) dùng để chạy và quản lý dịch vụ hệ thống. Sử dụng tài khoản System (cũng có thể gọi là NT AUTHORITY\SYSTEM, Local System hoặc Computer\LocalSystem), hầu hết các dịch vụ và tiến trình hệ thống được chạy (bao gồm NT OS Kernel). Mở snap-in quản lý dịch vụ mmc (services.msc) và chú ý các dịch vụ có Local System trong cột LogOnAs. Các dịch vụ này đang chạy dưới tài khoản SYSTEM.
Cách chạy CMD dưới tài khoản Local System trong Windows (phiên bản trước Vista)?
Trong Windows XP và Windows Server 2003 (không còn được hỗ trợ), có một thủ thuật thú vị cho phép chạy chương trình hoặc dấu nhắc lệnh tương tác (cmd.exe) với đặc quyền hệ thống bằng Task Scheduler. Chỉ cần mở dấu nhắc lệnh dưới tài khoản quản trị và chạy lệnh sau:
at 10:23 /interactive cmd.exe
trong đó, 10:23 là thời gian hiện tại + một phút (định dạng 24 giờ)
Khi đến thời gian chỉ định, dấu nhắc lệnh sẽ xuất hiện chạy dưới tài khoản local system. Nếu bạn chạy lệnh này trong phiên terminal (RDP) trên Windows Server 2003/XP, hãy lưu ý rằng dấu nhắc lệnh với đặc quyền System chỉ hiển thị trong phiên bảng điều khiển (bạn có thể kết nối với bảng điều khiển máy tính qua mstsc /console hoặc mstsc /admin).
Windows 10 không hỗ trợ chạy dấu nhắc lệnh tương tác bằng lệnh at. Khuyến nghị sử dụng schtasks.exe thay thế.
Warning: Due to security enhancements, this task will run at the time expected but not interactively. Use schtasks.exe utility if interactive task is required ('schtasks /?' for details). The request is not supported.
Cách chạy CMD/Tiến trình với tư cách SYSTEM trên Windows 10 dùng PSExec?
Trong Windows 7 trở lên, dấu nhắc lệnh tương tác không thể chạy dưới tài khoản System bằng Task Scheduler. Để chạy lệnh với tư cách NT Authority\ System, bạn có thể dùng tiện ích PSExec.exe của Sysinternals.
Bạn có thể tải PSExec.exe từ trang web Microsoft: https://docs.microsoft.com/en-us/sysinternals/downloads/psexec. Mọi quản trị viên Windows đều quen thuộc với PSExec. Trong hầu hết các trường hợp, nó được dùng để quản lý Windows từ xa, và cũng có tính năng hữu ích để chạy tiến trình thay mặt tài khoản System. Một số phần mềm diệt virus có thể nhận diện PSExec.exe là chương trình có khả năng gây hại (bởi cách đây, psexec đã được dùng để phân phối virus notpetya nổi tiếng).
PSExec không cần cài đặt. Mở dấu nhắc lệnh với quyền nâng cao (“Run as administrator”), chuyển đến thư mục chứa PSexec.exe và chạy lệnh sau:
psexec -i -s cmd.exe
-i — cho phép khởi động tiến trình/ứng dụng ở chế độ tương tác (người dùng có thể tương tác với ứng dụng trên desktop; nếu không dùng tham số này, tiến trình khởi động trong phiên bảng điều khiển),
-s — nghĩa là tiến trình (trong trường hợp này là dấu nhắc lệnh) phải chạy với tư cách tài khoản System.
Lần đầu chạy PsExec, bạn sẽ được nhắc chấp nhận thỏa thuận giấy phép.
Sau khi chạy lệnh, một cửa sổ dấu nhắc lệnh mới sẽ xuất hiện chạy dưới tài khoản NT Authority\System. Hãy xác minh điều này bằng lệnh:
whoami
Vì vậy, bạn có thể chạy bất kỳ chương trình, lệnh hoặc kịch bản nào với tư cách tài khoản System. Chỉ cần thay thế cmd.exe trong tham số PsExec bằng tên tệp thực thi của ứng dụng bạn muốn chạy.
Trong cửa sổ dấu nhắc lệnh xuất hiện, bạn có thể chạy bất kỳ lệnh nào với tư cách SYSTEM. Bây giờ bạn có thể thay đổi, đổi tên hoặc xóa tệp hệ thống/khóa registry thuộc sở hữu của TrustedInstaller hoặc SYSTEM. Tất cả chương trình hoặc tiến trình bạn khởi động trong cửa sổ này sẽ chạy với đặc quyền LocalSystem nâng cao. Ví dụ, bạn có thể dừng dịch vụ hệ thống hoặc đóng tệp được mở bởi tiến trình hệ thống.
Sử dụng PSExec, bạn có thể mở dấu nhắc lệnh tương tác với đặc quyền NT AUTORITY\SYSTEM trên máy tính từ xa. Để làm điều đó, dùng lệnh sau:
psexec -s \\mun-b21pc12 cmd.exe
Nếu xuất hiện lỗi “Couldn’t install PSEXESVC service”, hãy đảm bảo:
- Dấu nhắc lệnh được chạy với tư cách quản trị viên;
- Không có instance dịch vụ PSEXESVC khác đang chạy.
Cũng có một số công cụ bên thứ ba để chạy ứng dụng với tư cách tài khoản System (AdvancedRun, RunAsSystem, PowerRun), nhưng tôi không thấy ý nghĩa trong việc dùng chúng. Trước hết, chúng là bên thứ ba và bạn không thể chắc chắn không có mã độc. Thứ hai, tiện ích PsExec chính thức của Microsoft làm tốt nhiệm vụ này.