Có một lệnh có thể nâng cao Dấu nhắc Lệnh tại chỗ không?


61

Trên các hệ thống * nix, bạn có thể nhận được một vỏ gốc như vậy:

$ su # or 'sudo -s'
#

Vỏ gốc được sinh ra tại chỗ trong cùng một thiết bị đầu cuối.

Tôi đang cố gắng tìm thứ gì đó có độ cao tương tự, tại chỗ trên Dấu nhắc lệnh của Windows. Nói cách khác, nó không nên sinh ra một cửa sổ mới hoặc hiển thị lời nhắc UAC. Cho đến nay tôi đã có thể thực hiện một tác vụ theo lịch trình mà bỏ qua UAC, nhưng cửa sổ Dấu nhắc Lệnh nâng cao không được sinh ra tại chỗ.

Có một lệnh tương tự cho Windows thực hiện độ cao tại chỗ mà không sinh ra một cửa sổ mới không?


31
lưu ý rằng su / sudo -s thực sự cũng bắt đầu một quá trình shell mới. Đó chỉ là các quá trình nâng cao được kết nối với cùng một thiết bị đầu cuối, vì vậy chúng xuất hiện như thể nó được đặt tại chỗ.
Lie Ryan

"Nó không nên sinh ra một cửa sổ mới hoặc hiển thị lời nhắc UAC" Bạn chỉ nói rằng nó không cần tương tác đồ họa? Hay bạn không muốn được nhắc nhở gì cả ? Ví dụ, sudođôi khi sẽ nhắc nhập mật khẩu, nhưng nó làm như vậy với giao diện văn bản. Tôi tự hỏi làm thế nào các máy chủ Nano (mà tôi không tin thậm chí cung cấp GUI cho Remote Desktop theo mặc định) xử lý nó.
jpmc26

2
@ jpmc26 Tương tác trên giao diện văn bản là được.
dùng2064000

@ jpmc26 Tôi tự hỏi liệu máy chủ Nano thậm chí có UAC không. Cho rằng nó được tối ưu hóa cho các container, nó không có vẻ rất hữu ích. Nó cũng bị vô hiệu hóa trong các phiên bản Server Core, IIRC. Nếu bạn vô tình kích hoạt nó, bạn sẽ gặp cả đống rắc rối :)
Luaan

2
@ user2064000 Lời nhắc UAC là (ít nhất theo mặc định cho các nhị phân không phải của Windows) được khởi chạy trên Secure Desktop, không phải trên máy tính để bàn hiện tại của người dùng. Ngoài việc hơi khó chịu, điều này được thiết kế để ngăn chặn các quá trình khác can thiệp vào dấu nhắc UAC. Ngoài ra, nếu bắt buộc phải xác thực, điều đó sẽ phải có trên Secure Desktop và một số quản trị viên cũng có thể yêu cầu trình tự Ctrl-Alt-Del để chứng minh rằng Windows đang lấy mật khẩu chứ không phải một số quy trình khác mạo danh lời nhắc mật khẩu. Vì vậy, việc nhập mật khẩu trong cửa sổ cmd có thể sẽ không bay theo quan điểm bảo mật của Microsoft.
Calchas

Câu trả lời:


65

TL; DR - Tùy chọn duy nhất là sinh ra một quy trình khác. (Một cái mới cmd.exe.) Trong trường hợp Dấu nhắc Lệnh, bắt đầu một phiên bản mới với mã thông báo truy cập có quyền cao hơn sẽ luôn dẫn đến một cửa sổ mới được tạo.


Không thể cấp quyền bổ sung cho quy trình đã chạy .

Khi người dùng có quyền quản trị đăng nhập vào máy Windows có bật Kiểm soát tài khoản người dùng (UAC), hai mã thông báo truy cập riêng biệt được tạo :

  1. Một người có quyền truy cập quản trị viên đầy đủ và
  2. "Mã thông báo được lọc" thứ hai với quyền truy cập người dùng chuẩn

Tại thời điểm một quy trình (ví dụ CMD.EXE) được tạo, nó được gán một trong hai mã thông báo truy cập này . Nếu quy trình được chạy "nâng cao" với tư cách Quản trị viên, mã thông báo truy cập chưa được lọc sẽ được sử dụng. Nếu quy trình không được cấp quyền quản trị, mã thông báo người dùng chuẩn, được lọc sẽ được sử dụng.

Khi một quá trình đã được tạo, không thể thay thế mã thông báo truy cập của nó . 1 Trong luồng Bảo mật Ứng dụng MSDN cho Windows Desktop này , một người đăng tự nhận mình là thành viên của Nhóm Hạt nhân Windows tuyên bố:

Hạt nhân NT không bao giờ có ý định cho phép chuyển đổi mã thông báo khi một quá trình bắt đầu chạy. Điều này là do các thẻ điều khiển, v.v. có thể đã được mở trong bối cảnh bảo mật cũ, các hoạt động trên máy bay có thể sử dụng bối cảnh bảo mật không nhất quán, v.v. Như vậy, thường không có ý nghĩa gì khi chuyển đổi mã thông báo của quy trình một khi nó đã bắt đầu thực thi. Tuy nhiên, điều này đã không được thi hành cho đến Vista . [tôi nhấn mạnh] (Nguồn nhờ đến @Ben N )

Lưu ý: Kiểm soát tài khoản người dùng được giới thiệu cùng với việc phát hành Windows Vista .

Câu trả lời Siêu người dùng này trích dẫn hai nguồn bổ sung xác nhận giống nhau:

Do đó, đơn giản là không thể nâng cao Dấu nhắc Lệnh hoặc bất kỳ quy trình nào khác tại chỗ. Tùy chọn duy nhất là sinh ra một quy trình khác với mã thông báo truy cập mới (có thể là một phiên bản khác của quy trình ban đầu nếu muốn). Trong trường hợp Dấu nhắc Lệnh, bắt đầu một phiên bản mới với mã thông báo truy cập có quyền cao hơn sẽ luôn dẫn đến một cửa sổ mới được tạo và nếu lời nhắc UAC được bật trên hệ thống, chúng cũng sẽ được kích hoạt.


1 Bạn có thể điều chỉnh các đặc quyền trong mã thông báo truy cập hiện có bằng chức năng TuneTokenPriv đặc quyền , nhưng theo MSDN :

Chức năng TuneTokenPriv đặc quyền không thể thêm đặc quyền mới vào mã thông báo truy cập. Nó chỉ có thể kích hoạt hoặc vô hiệu hóa các đặc quyền hiện có của mã thông báo.


19

Mặc dù tôi là một người dùng nhiệt tình TCC-LE, nhưng có một giải pháp không cần bất kỳ chương trình mới nào: -

  • Bắt đầu cmdlà quản trị viên.
  • Điều này sẽ bắt đầu bạn trong %SystemRoot%\system32\- nếu không, cdở đó.
  • copy cmd.exe cmdadmin.exe(hoặc bất kỳ tên nào bạn chọn, chẳng hạn như su.exe).
  • Bây giờ hãy chạy Explorer và tìm cmdadmin.exe.
  • Nhấp chuột phải và chọn Thuộc tính .
  • Trong tab Tương thích, chọn chạy với tư cách quản trị viên (hoặc đặt nó cho tất cả người dùng).

Bây giờ cmdadminlà của bạn suhoặc sudo: bạn có thể khởi động nó mà không cần tham số để cung cấp cho bạn trình bao với các đặc quyền quản trị hoặc bạn có thể chạy nó /cđể thực thi một lệnh duy nhất trong chế độ này. Tùy thuộc vào chính sách của bạn, bạn có thể hoặc không thể được nhắc xác nhận.

Lưu ý rằng điều này sẽ luôn mở một cửa sổ mới (cũng như giải pháp TCC start /elevated ...): đối với ứng dụng GUI, điều này được mong đợi, nhưng đối với chương trình dòng lệnh, bạn có thể muốn sử dụng /kthay vì /c, để cho bạn cơ hội thấy đầu ra ; hoặc bạn có thể chạy qua một tệp bó ( sudo.cmdcó lẽ?) nối & pausevới cuối chuỗi chạy của bạn.

Trong cả hai trường hợp, nó không hoàn toàn giống như suhoặc sudo, nhưng đó là thứ gần nhất bạn sẽ nhận được. Bằng cách thiết lập bố cục cửa sổ theo cách thủ công, cửa sổ mới có thể được tạo ngay bên dưới và bỏ bản gốc.


Đây có lẽ là OP gần nhất có thể có hành vi sudo, với sự cảnh báo về việc vẫn phải đối phó với một cửa sổ / quy trình mới được sinh ra. Mặc dù có lẽ không phải là ý tưởng tốt nhất từ ​​quan điểm bảo mật, việc vô hiệu hóa tất cả các lời nhắc UAC sẽ loại bỏ việc phải trả lời lời nhắc UAC khi quá trình nâng cao được bắt đầu.
Tôi nói phục hồi Monica

@Twisty - Cảm ơn bạn đã bình luận. Tôi đã nhận thức được ý nghĩa bảo mật, nhưng chúng không tệ hơn tiền đề ban đầu mà tài khoản cho phép Chạy với tư cách quản trị viên . Bất cứ ai thực hiện nó sẽ quyết định xem người đó có muốn nhắc nhở liên tục mỗi khi nó được gọi hay không.
AFH

2
Tôi đã không đề cập đến ý nghĩa bảo mật vì lợi ích của bạn, mà là cho các độc giả khác. Tuy nhiên, tôi sẽ không đồng ý rằng việc tắt các lời nhắc UAC không tệ hơn là chạy với tư cách quản trị viên. Lời nhắc UAC có thể ngăn người dùng đăng nhập với tư cách Quản trị viên cấp quyền quản trị không mong muốn cho một quy trình. Nếu không có lời nhắc, người dùng sẽ mất cơ hội này.
Tôi nói phục hồi Monica

@Twisty - Chỉ vậy thôi. Phản ứng của tôi đến từ những động cơ tương tự. Cảm ơn một lần nữa.
AFH

1
thay vì sao chép cmd.exe, hãy tạo một liên kết tượng trưng đến nó. Bằng cách này, nếu các cửa sổ cập nhật nó và vá các lỗi bảo mật, bạn không chạy phiên bản cũmklink cmdadmin.exe cmd.exe
Josef

11

Có một lệnh có thể nâng cao Dấu nhắc Lệnh tại chỗ không?

Có một cách khá bất tiện:

powershell -Command "Start-Process 'cmd.exe' -Verb runAs"

Có nhiều cách tốt hơn nhưng Microsoft đã đóng chúng. Tất nhiên, bạn luôn có thể xắn tay áo lên và viết kịch bản của riêng bạn tương đương sudovới mã nguồn tôi vừa đưa cho bạn.

Nói cách khác, nó không nên sinh ra một cửa sổ mới hoặc hiển thị lời nhắc UAC.

Lộng ngôn! Đốt anh ta trong cọc! ;) Đùa sang một bên, không. Không có. Đó sẽ là một lỗi và lỗ hổng bảo mật. Microsoft đã thực hiện một nỗ lực rõ ràng để đảm bảo rằng quy trình nâng cao và tiêu chuẩn có ít điểm chung nhất có thể.

Những đứa trẻ thông minh đang nghĩ về hai back-end (một tiêu chuẩn và một nâng cao) và một front-end đồ họa cho cả hai, nên đọc về Cách ly phiên 0 .


2

Có một lệnh tương tự cho Windows thực hiện độ cao tại chỗ mà không sinh ra một cửa sổ mới không?

Không có lệnh nào được tích hợp sẵn. Mặc dù tôi chưa chứng minh được điều đó, nhưng tôi tin rằng vì tôi đã thấy nhiều cách để sử dụng phần mềm / mã bổ sung để khắc phục vấn đề này.

Nói cách khác, nó không nên sinh ra một cửa sổ mới hoặc hiển thị lời nhắc UAC.

Quên đi. Tuyệt đối quên nó đi. Điều đó đi ngược lại với thiết kế của UAC. Nếu bạn có thể quản lý điều đó, bạn đang phá vỡ một quy trình bảo mật cơ bản. Mong đợi giải pháp của bạn được khắc phục bằng một bản vá sau khi Microsoft biết và sửa lỗi, bất kỳ quy trình nào bạn có thể làm để khắc phục sự cố này.

Giải pháp để tránh nhắc nhở UAC là bắt đầu với độ cao. UAC không nên làm phiền bạn nếu bạn được ủy quyền đầy đủ. Nếu bạn bắt đầu với độ cao thấp hơn (thường được khuyến nghị vì lợi ích bảo mật) và sau đó cố gắng làm điều gì đó yêu cầu độ cao cao hơn, thì hãy mong đợi tương tác UAC.


Lời nhắc UAC có thể được bỏ qua với một tác vụ theo lịch trình; Tôi đang tìm kiếm thứ gì đó có độ cao tại chỗ thay vì sinh ra một cửa sổ nhắc lệnh mới.
dùng2064000

Nếu bạn làm điều đó, bạn có thể thực sự thiết lập Nhiệm vụ theo lịch mà không đáp ứng yêu cầu của UAC không? Đối với sinh sản, tôi nói rằng tôi không mong đợi như vậy bởi vì tôi đã nhận thấy tất cả các giải pháp nâng cao mà tôi thấy cho đến nay có liên quan đến việc bắt đầu một quy trình mới. Tôi nghĩ rằng việc nâng cao về mặt kỹ thuật mà không bắt đầu một quy trình mới có thể được thực hiện, vì các chương trình cài đặt có thể yêu cầu UAC sau khi chúng được bắt đầu, nhưng tôi không nhớ đã thấy bất kỳ giải pháp nào có sẵn, có thể dễ dàng nhập vào một tệp bó.
TẤT CẢ

Thật; Nhiệm vụ theo lịch trình hoàn toàn đánh bại UAC. Sau khi nâng lên, bạn có thể nâng lên HỆ THỐNG thông qua các dịch vụ và sau đó sử dụng mã thông báo thay thế trên quy trình cmd.exe ban đầu.
Joshua

Có một kịch bản PowerToy có phần chính thức thực hiện công việc cơ bản; bạn có thể gõ elevate cmdđể mở cửa sổ nhắc lệnh mới bằng dấu nhắc UAC (trang web cũng có các lệnh menu ngữ cảnh!). Hoặc, tất nhiên, bạn chỉ có thể Ctrl + Shift + Nhấp vào biểu tượng trên thanh tác vụ của bất kỳ cửa sổ nhắc lệnh hiện có nào để thực hiện tương tự - đó là điều tôi có xu hướng làm thường xuyên nhất. (Mà tôi biết không phải là những gì OP yêu cầu, nhưng những gì OP yêu cầu bị chặn bởi thiết kế.)
Miral

2

Những gì bạn muốn là không thể trong Windows, vì không hỗ trợ khái niệm này. Bạn cần bắt đầu một quy trình mới với quyền cao hơn .

Tôi sử dụng nircmd để nâng cao các quy trình từ dòng lệnh. Lệnh của bạn sẽ lànircmdc elevate cmd


2

Tôi thấy câu hỏi này và đưa ra một giải pháp đơn giản. Đây là một tiện ích nhỏ được gọi là rsudo, chạy các lệnh leo thang từ cửa sổ CMD thông thường.

Lưu ý: Một dấu nhắc UAC sẽ xuất hiện. Che giấu điều này là không thể, đó chỉ là cách mà UAC đã được thiết kế.

Usage:
  rsudo.exe "[command]"

Tải xuống [Tải xuống không hoạt động, sẽ cập nhật sớm]

Lưu ý: Các lệnh được chạy trong một cửa sổ mới. Nếu bạn muốn xem đầu ra, hãy chạyrsudo.exe "pause && [command]"


Phải không rsudo.exe "[command] && pause"?

@fleet Không, một lỗi gây ra pauseđược chạy trước tiên
rahuldottech

La Mã, cảm ơn! Bất kỳ cơ hội của mã nguồn? ;) (Hoặc có thể tôi chỉ đang tìm sai chỗ trên trang web của bạn.)
cxw

@cwz chắc chắn! Tôi sẽ chỉnh sửa nó khi tôi về đến nhà và thêm một bài đăng trên blog: D
rahuldottech

0

Cái này thật lạ.

Bạn có thể thử thực hiện một ssh vào máy tính của riêng bạn, nó sẽ sử dụng cùng một thiết bị đầu cuối hiện có, nhưng thực sự sẽ là một thiết bị hoàn toàn khác.

Nó sẽ hoạt động, nhưng nó có thể không phải là những gì bạn muốn.

Những người khác có thể thấy nó hữu ích mặc dù.


-1

Hãy thử lời nhắc lệnh JPSOFT Take Command TCC / LE. Nó có các phiên bản 32 và 64 bit và miễn phí trừ khi bạn muốn có nhiều chức năng hơn.

Tới https://jpsoft.com/ và bấm vào Tải xuống và chọn những gì bạn muốn.

TCC / LE có BẮT ĐẦU / THANG MÁY, khởi động chương trình nâng cao với các đặc quyền quản trị viên đầy đủ. (Chỉ dành cho Windows Vista trở lên.)


1
Làm thế nào điều này có liên quan đến câu hỏi?
dùng2064000

@DavidGrainger hóa ra công tắc / độ cao vẫn không cho phép tôi bỏ qua UAC và thực hiện độ cao tại chỗ (xem câu hỏi để biết chi tiết). Tui bỏ lỡ điều gì vậy?
dùng2064000

Đây là sự thay thế cho Windows Command Prompt. Thêm vào đó, bắt đầu nâng cao không khác gì bắt đầu nâng cao Command Prompt tích hợp.
Tôi nói Phục hồi lại

Cách duy nhất có thể để thay đổi cài đặt UAC thành "Không bao giờ thông báo" Khi thông báo UAC bật lên, nhấp vào liên kết "Hiển thị thêm chi tiết", sau đó chọn liên kết "Hiển thị khi thông báo này sẽ xuất hiện". Chọn cài đặt hoạt động. Bạn có thể muốn thay đổi nó trở lại khi bạn hoàn thành, vì vậy những hành động không mong muốn bị bắt bởi nó. điều này có thể được thực hiện trong cài đặt Windows.
David Grainger

TCC / LE cũng làm rất nhiều thứ khác. Tôi đã thử nó với UAC được đặt thành không bao giờ và sau đó được sử dụng, "Bắt đầu / Nâng cao / PGM" C: \ Chương trình tập tin \ IrfanView \ i_view64.exe "/ ngón tay cái" để mở chương trình Nâng cao.
David Grainger
Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.