Computer >> Hướng Dẫn Máy Tính >  >> Hệ Thống >> Máy Chủ Windows

Cách chạy chương trình không cần quyền Admin và bỏ qua lời nhắc UAC

Khi khởi động, nhiều chương trình yêu cầu nâng cao quyền (khiên trên biểu tượng app), nhưng thực tế chúng không cần đặc quyền administrator để hoạt động bình thường. Ví dụ, bạn có thể thủ công cấp quyền cho người dùng trên thư mục app trong ProgramFiles và/hoặc khóa registry được dùng bởi chương trình. Vì vậy, khi khởi động chương trình đó dưới tài khoản người dùng không phải admin, lời nhắc UAC sẽ xuất hiện và người dùng sẽ phải nhập mật khẩu administrator (nếu User Account Control được bật trên máy tính). Để bỏ qua cơ chế này, nhiều người dùng đơn giản tắt UAC hoặc cấp đặc quyền admin cho người dùng bằng cách thêm tài khoản vào nhóm cục bộ "Administrators". Tất nhiên, cả hai phương pháp đều không an toàn.

Tại sao một số app Windows không chạy dưới user tiêu chuẩn và yêu cầu quyền administrator?

Một app có thể cần đặc quyền administrator để sửa đổi một số file (log, config, v.v.) trong thư mục của nó tại C:\Program Files (x86)\SomeApp. Mặc định, người dùng không có quyền chỉnh sửa (write và modify) trên thư mục này. Để chương trình này hoạt động bình thường, cần đặc quyền administrator. Để giải quyết vấn đề này, bạn phải thủ công cấp quyền modify và/hoặc write cho người dùng (hoặc nhóm Users tích hợp) trên thư mục app ở cấp độ hệ thống file NTFS.

Lưu ý. Thực tế, không khuyến khích lưu dữ liệu ứng dụng thay đổi trong thư mục của nó dưới C:\Program Files. Tốt hơn lưu dữ liệu app trong hồ sơ người dùng. Nhưng đó là vấn đề lười biếng và thiếu năng lực của nhà phát triển app.

Cách chạy chương trình yêu cầu đặc quyền admin dưới user tiêu chuẩn?

Trước đây chúng tôi đã mô tả cách tắt lời nhắc UAC cho một app cụ thể bằng tham số RunAsInvoker. Tuy nhiên, phương pháp này không đủ linh hoạt.

Bạn cũng có thể dùng RunAs với mật khẩu administrator đã lưu (trong Windows Credentials Manager) dùng tùy chọn /SAVECRED. Nó cũng không an toàn vì người dùng có thể dùng mật khẩu administrator đã lưu để chạy bất kỳ chương trình nào trên máy tính này.

Hãy xem cách dễ dàng hơn để buộc bất kỳ chương trình nào chạy không cần đặc quyền administrator (không nhập mật khẩu admin) và với UAC được bật (Mức 4, 3 hoặc 2 của thanh trượt UAC).

Hãy lấy Registry Editor làm ví dụ — regedit.exe (nằm trong thư mục C:\Windows\). Chú ý biểu tượng khiên UAC bên cạnh biểu tượng app. Biểu tượng này nghĩa là yêu cầu nâng cao đặc quyền qua UAC sẽ được yêu cầu để chạy chương trình này.

Nếu bạn chạy regedit.exe, bạn sẽ thấy cửa sổ User Account Control yêu cầu thông tin đăng nhập administrator (Do you want to allow this app to make changes to your device?). Nếu bạn không cung cấp mật khẩu và không xác nhận nâng cao, app sẽ không khởi động.

Hãy thử bỏ qua yêu cầu UAC cho chương trình này. Tạo file văn bản run-as-non-admin.bat chứa mã sau trên Desktop của bạn:

cmd /min /C "set __COMPAT_LAYER=RUNASINVOKER && start "" %1"

Để buộc regedit.exe chạy không cần đặc quyền administrator và ẩn lời nhắc UAC, chỉ cần kéo file EXE bạn muốn khởi động vào file BAT này trên desktop.

Sau đó Registry Editor nên khởi động không có lời nhắc UAC và không cần nhập mật khẩu administrator. Nếu bạn mở Task Manager và thêm cột Elevated, bạn sẽ thấy tiến trình regedit.exe không có trạng thái elevated (chạy với quyền user không phải admin).

Hãy thử chỉnh sửa bất kỳ tham số nào trong khóa registry HKEY_LOCAL_MACHINE. Như bạn thấy, người dùng không thể chỉnh sửa mục trong khóa registry này (người dùng không có quyền ghi vào khóa registry hệ thống). Nhưng bạn có thể thêm hoặc chỉnh sửa khóa registry và tham số trong khóa user — HKEY_CURRENT_USER.

Cùng cách bạn có thể chạy bất kỳ app nào dùng file BAT. Chỉ cần chỉ định đường dẫn đến file thực thi.

run-app-as-non-admin.bat
Set ApplicationPath="C:\Program Files\SomeApp\testapp.exe"
cmd /min /C "set __COMPAT_LAYER=RUNASINVOKER && start "" %ApplicationPath%"

Bạn cũng có thể thêm menu ngữ cảnh cho phép chạy tất cả app không cần nâng cao. Để làm vậy, tạo file RunAsUser.REG, sao chép mã sau vào, lưu và nhập vào registry Windows bằng double-click vào file reg (bạn cần quyền administrator để áp dụng thay đổi này).

Windows Registry Editor Version 5.00
[HKEY_CLASSES_ROOT\*\shell\forcerunasinvoker]
@="Run as user without UAC privilege elevation"
[HKEY_CLASSES_ROOT\*\shell\forcerunasinvoker\command]
@="cmd /min /C \"set __COMPAT_LAYER=RUNASINVOKER && start \"\" \"%1\"\""

Sau đó, để chạy bất kỳ ứng dụng nào không cần đặc quyền administrator, chỉ cần chọn "Run as user without UAC privilege elevation" trong menu ngữ cảnh của File Explorer.

Bạn có thể triển khai tùy chọn này đến tất cả máy tính trong miền bằng cách nhập tham số registry qua GPO.

Hãy nhắc lại một lần nữa rằng dùng chương trình ở chế độ RUNASINVOKER sẽ không cho phép bạn nâng cao chương trình. Tham số RunAsInvoker ẩn lời nhắc UAC và nói cho chương trình rằng nó nên chạy với quyền của người dùng hiện tại, và không yêu cầu nâng cao đặc quyền. Nếu chương trình thực sự cần đặc quyền nâng cao để chỉnh sửa cài đặt hoặc file hệ thống, nó sẽ không hoạt động hoặc sẽ lại yêu cầu quyền admin.

Cách bỏ qua UAC với RunAsInvoker trong __COMPAT_LAYER?

Biến môi trường __COMPAT_LAYER cho phép bạn đặt các mức tương thích khác nhau cho ứng dụng (tab Compatibility trong thuộc tính file EXE). Sử dụng biến này, bạn có thể chỉ định cài đặt tương thích được dùng khi khởi động chương trình. Ví dụ, để khởi động app ở chế độ tương thích Windows 8 và độ phân giải 640×480, đặt như sau:

set __COMPAT_LAYER=Win8RTM 640x480

Biến __COMPAT_LAYER có một số tùy chọn chúng ta quan tâm. Có các tham số sau:

  • RunAsInvoker – chạy app với đặc quyền của tiến trình cha mà không có lời nhắc UAC;
  • RunAsHighest – chạy chương trình với quyền cao nhất có sẵn cho người dùng (lời nhắc UAC sẽ xuất hiện nếu người dùng có đặc quyền administrator);
  • RunAsAdmin – chạy app với quyền administrator (lời nhắc UAC xuất hiện mỗi lần).

Điều đó có nghĩa là tham số RunAsInvoker không cung cấp đặc quyền administrator, mà chỉ ẩn lời nhắc UAC.

Mã CMD sau bật chế độ RunAsInvoker cho tiến trình hiện tại và chạy chương trình chỉ định không cần nâng cao:

set __COMPAT_LAYER=RUNASINVOKER
start "" "C:\Program Files\MyApp\testapp.exe"

Bật chế độ RunAsInvoker trong Manifest file EXE

Như chúng ta nói trên, Windows 10 hiển thị biểu tượng khiên UAC cho chương trình yêu cầu nâng cao để chạy. Nhà phát triển đặt yêu cầu này khi biên dịch ứng dụng trong manifest của chương trình.

Bạn có thể chỉnh sửa manifest của bất kỳ file exe nào và tắt yêu cầu chạy chương trình ở chế độ nâng cao.

Để chỉnh sửa manifest chương trình, bạn có thể dùng công cụ miễn phí Resource Hacker. Mở file thực thi của app trong Resource Hacker.

Trong ví dụ này, tôi sẽ chỉnh sửa manifest của công cụ Autologon.exe của Sysinternals, có thể dùng để tự động đăng nhập Windows không cần mật khẩu.

Trong cây bên trái, đi đến phần Manifest và mở manifest chương trình. Chú ý phần xml sau:

<requestedPrivileges> <requestedExecutionLevel level="requireAdministrator" uiAccess="false"/> </requestedPrivileges>

Chính nhờ tùy chọn requireAdministrator mà Windows luôn cố chạy chương trình này với quyền administrator.

Thay đổi requireAdministrator thành asInvoker và lưu thay đổi trong file exe.

Lưu ý rằng bây giờ biểu tượng khiên UAC đã biến mất khỏi biểu tượng chương trình, và bạn có thể chạy nó không cần yêu cầu mật khẩu administrator với quyền người dùng hiện tại.

Nếu file thực thi app được ký bằng MS Authenticode (chứng chỉ Code Signing), thì sau khi sửa file exe, nó có thể ngừng hoạt động hoặc cảnh báo.

Trong trường hợp này, bạn có thể buộc chương trình dùng file manifest bên ngoài. Tạo file văn bản thuần túy appname.exe.manifest (ví dụ, Autologon.exe.manifest) trong thư mục với file exe và sao chép mã manifest từ Resource Hacker vào đó. Thay đổi requireAdministrator thành asInvoker. Lưu file manifest.

Để Windows luôn cố dùng file manifest bên ngoài khi khởi động file exe, bật tham số registry đặc biệt:

REG ADD "HKLM\SOFTWARE\Microsoft\Windows\CurrentVersion\SideBySide" /v PreferExternalManifest /t REG_DWORD /d 1 /f

Khởi động lại Windows và đảm bảo chương trình đang dùng file manifest bên ngoài nói rằng chạy không cần đặc quyền administrator.