Làm cách nào tôi có thể chạy một ứng dụng có GUI là quản trị viên từ phiên người dùng không phải quản trị viên?


33

Tôi đã xác định 2 tài khoản người dùng:

  • một với đặc quyền quản trị viên (với sudoquyền) => hãy gọi nó adminuser.
  • một thứ 2 mà không có bất kỳ đặc quyền nào => hãy gọi nó và tôi định cấu hình tự động cho người dùng thứ 2 này . normaluser
    normaluser

Vì vậy, khi tôi mở một normaluserphiên và muốn chạy một ứng dụng có đặc quyền quản trị viên,
tôi mở một thiết bị đầu cuối Ctrl+ Alt+ Tvà:

su adminuser
sudo anyapplication ...

Nó hoạt động tốt, không phải thoát normaluserphiên (không cần mở adminuserphiên).


Nhưng tôi nên làm gì nếu ứng dụng cần chạy với GUI (Giao diện người dùng đồ họa)?
Tôi nghĩ về điều đó:

su adminuser
gksu anyapplication ...

nhưng tôi hiểu

** (gksu:9122): WARNING **: the connexion is closed
No protocol specified
No protocol specified
(gksu:9122): Gtk-WARNING **: cannot open display: :0.0

Vì vậy, câu hỏi là: tại sao bạn cấu hình hệ thống của bạn theo cách này? Bạn có nghĩ rằng nó cải thiện an ninh? Không phải vậy :) Thay vào đó, bạn có thể định cấu hình tự động đăng nhập vào tài khoản "quản trị viên" của mình để nó không hỏi bạn mật khẩu khi bạn đăng nhập - nó vẫn sẽ yêu cầu mật khẩu khi bạn thực hiện các tác vụ quản trị.
Serge

5
@Sergey Nếu normaluserđôi khi được sử dụng bởi một người không thể chạy các lệnh như vậy root, thì việc tạo normalusermột người không phải là quản trị viên chắc chắn sẽ cải thiện bảo mật . Những nguy cơ của việc cung cấp cho ai đó một tài khoản người dùng nhưng không cho họ biết mật khẩu của chính họ vượt xa tình trạng rắc rối và phức tạp của Boris. Nếu bạn muốn giải thích đầy đủ lý do tại sao điều đó có vấn đề, tôi khuyên bạn nên đăng một câu hỏi mới, nhưng 3 lý do là người dùng sẽ có thể khóa và mở khóa màn hình, đăng xuất và đăng nhập lại bằng một loại phiên khác và giải mã ecryptfsdữ liệu.
Eliah Kagan

2
chính xác, đối với tôi, việc sử dụng PC của gia đình tôi cho mọi người biết mật khẩu quản trị để mở khóa màn hình là vô nghĩa. Điều này normaluseradminuserthiết lập là quy tắc vàng.
Boris

1
Đủ công bằng, tôi chỉ có ấn tượng rằng OP đang sử dụng normalusertài khoản cho công việc hàng ngày và admintài khoản để thực hiện các nhiệm vụ quản trị, điều này không thực sự cải thiện bất cứ điều gì. Trên một máy nhiều người dùng, điều này hoàn toàn có ý nghĩa.
Serge

Câu trả lời:


5

PAM có thể chăm sóc nó

Điều này hoạt động với tôi trên Ubuntu 16.04 (chỉnh sửa: nó cũng hoạt động trên 18.04 LTS):

đặt dòng:

session optional pam_xauth.so

trong nơi nào đó:

/etc/pam.d/su

và / hoặc

/etc/pam.d/sudo

và sau đó thực hiện "su -" hoặc "sudo su -" Tôi có thể sử dụng các ứng dụng đồ họa làm root.


Xác nhận rằng điều này cũng hoạt động trên Kubfox 16.04. Cảm ơn!
akhmed

Cảm ơn, nó cũng hoạt động với tôi vào ngày 18.04! nó có vẻ là sự lựa chọn tốt nhất để suxgksukhông có sẵn nữa.
Boris

29

Thuật ngữ

Trong câu trả lời này:

  • normaluserlà một người dùng bình thường không phải là quản trị viên và không thể chạy các lệnh như rootvới sudo.
  • adminlà một quản trị viên có thể chạy các lệnh như rootvới sudo. (Tất nhiên, bất kỳ lệnh đồ họa nào cũng nên sử dụng giao diện đồ họa như gksu/gksudo và không sudotrực tiếp.)
  • anyapplicationlà tên của ứng dụng đồ họa normalusermuốn chạy như root. normaluserbiết adminmật khẩu và (có lẽ) đã được thông báo rằng họ có thể sử dụng nó cho mục đích này.

Vấn đề

Nguyên nhân của vấn đề của bạn, và lý do hầu hết các câu trả lời khác cho đến nay không làm việc (với ngoại lệ của Marty Fried 's câu trả lời xuất sắc ), là:

  • gksucó thể được cấu hình để sử dụng sudo hoặc su là phụ trợ của nó. Hành vi mặc định của gksuUbuntu là để hoạt động như một lối vào cho sudo, không cho su. Đó là để nói rằng, theo mặc định, gksugksudohành xử giống hệt nhau . Xem trang hướng dẫn .
  • normaluserkhông phải là quản trị viên và do đó không thể chạy các lệnh như rootvới sudo. sudolời nhắc cho mật khẩu của người dùng đang chạy nó , không phải mật khẩu của người dùng mà họ muốn trở thành . Không thể sử dụng mật khẩu của bạn để thực hiện các hành động như những người không phải là bạn có nghĩa là không phải là quản trị viên .
  • normaluser, Với điều kiện nó không phải là một tài khoản Guest, có thể chạy lệnh như một người dùng khác vớisu , đưa vào các mật khẩu của người dùng khác . Nhưng gksuhoạt động như một frontend cho sudo, không su.
  • normalusercó thể không trực tiếp chạy bất kỳ lệnh như root, bởi vì normaluserkhông thể sử dụng sudo, và không ai có thể trở thành rootbằng sukhông có rootmật khẩu .

Giải pháp

Giải pháp yêu cầu viết một lệnh thực hiện hai bước xác thực:

  • normaluserphải trở thành adminđể chạy một lệnh đồ họa. Để làm điều này, normaluserphải chạy gksuvới -wcờ để làm cho nó chạy ở chế độ su thay vì chế độ sudo mặc định và -ucờ để chạy lệnh adminthay vì root.
  • Lệnh chạy như adminphải invoke gksu mà không cần những -wlá cờ để sử dụng sudođể trở thành root.

Đây là lệnh (vâng, tôi đã kiểm tra nó ;-) ):

gksu -w -u admin gksu anyapplication

Bạn sẽ được nhắc nhập mật khẩu hai lần :

  1. Trước tiên, bạn phải nhập adminmật khẩu, để cho phép normaluserchạy một lệnh như adminvới suphụ trợ.
  2. Thứ hai, bạn phải nhập adminmật khẩu, để cho phép adminchạy một lệnh như rootvới sudophụ trợ.

Đúng rồi. Bạn nhập adminmật khẩu hai lần.

Ghi chú linh tinh:

  • Nếu bạn muốn, bạn có thể thay thế cái thứ hai gksubằng gksudođể làm cho nó bớt khó hiểu hơn. Trong Ubuntu, chúng là tương đương. (Bạn cũng có thể thay thế cái đầu tiên gksubằng gksudo, nhưng điều đó sẽ cực kỳ phản cảm và khó hiểu.)
  • -wlà dạng ngắn của --su-mode.
  • -Slà dạng ngắn của --sudo-modenhưng không phải sử dụng vì chế độ sudo là mặc định.
  • Bạn có thể muốn kiểm tra điều này với một số lệnh khá vô hại trước tiên, để đảm bảo nó thực hiện những gì bạn muốn. (Nó sẽ, nhưng bạn không cần phải tin tưởng tôi về điều đó.) Ví dụ:
    gksu -w -u admin gksu xclock
    xclock là một ứng dụng cửa sổ đồng hồ đơn giản đẹp.

1
HOÀN HẢO, tôi thêm một bí danh trong .bashrc của mình ngay lập tức để tránh quên mẹo thông minh này
Boris

không biết tại sao, nhưng bây giờ (với Ubuntu 14.04) tôi phải bắt đầu sudođể làm cho nó hoạt động. Ví dụ:sudo gksu -w -u thedude gksu xclock
Boris

FYI: có kdesudovẻ hoạt động sạch hơn, ít nhất là trên KUbfox.
MDTech.us_MAN

thật không may, dường như điều đó gksukhông còn nữa
Boris

11

Một cách có thể sẽ hoạt động là sử dụng "sux" thay vì "su" khi bạn lần đầu tiên chuyển sang người dùng quản trị. sux khắc phục sự cố chạy các ứng dụng x từ người dùng giả mạo. Nó nằm trong repo tiêu chuẩn và có thể được cài đặt bằng cách nhập sudo apt-get install suxvào một dòng lệnh.

Sau đó, chỉ cần sử dụng "sux" thay vì "su" và nó sẽ hoạt động theo cách bạn mong đợi.

Cho phép sử dụng lại ví dụ của ứng dụng xclock:

sux admin
gksu xclock

3
Không có phiên bản nào nữa suxtrên Ubuntu 14.04 64 bit;(
Boris

2
Có vẻ như có một giải pháp thay thế
Boris

@Boris Đó là một kịch bản shell, bạn chỉ có thể tải nó từ một repo lịch sử và đặt nó vào đường dẫn của bạn, ví dụ từ packages.debian.org/source/wheezy/sux
Không ai

2

pkexec

Có một sự thay thế phổ biến cho kdesudo và gksu - pkexecđó là từ policykit-1gói được yêu cầu bởi rất nhiều gói.


Tôi khuyên bạn nên mở rộng câu trả lời này để giải thích cách người dùng thông thường (không phải là quản trị viên và không thể trở thành root bằng sudohoặc polkit), người biết mật khẩu của quản trị viên (nghĩa là của một người có thể root bằng sudohoặc polkit), có thể sử dụng pkexecđể chạy một chương trình đồ họa như root. Đó là những gì câu hỏi ở đây đang hỏi. Nó không rõ ràng với tôi rằng pkexecsẽ làm được điều này, ít nhất là không rộng rãi chỉnh sửa file cấu hình, đặc biệt là kể từ khi pkexeccó thể không thường được sử dụng để chạy các chương trình đồ họa tùy ý (không có hồ sơ polkit) ở tất cả . Là có một cách?
Eliah Kagan

@EliahKagan Điều này hoạt động trên Ubuntu với cấu hình mặc định - chỉ cần chạy pkexec commandvà nó hoạt động. Cấu hình nằm trong tệp /usr/share/polkit-1/actions/org.freedesktop.policykit.policyđược cài đặt bởi gói có tên. Và nó thực sự yêu cầu bạn chỉ viết mật khẩu quản trị viên một lần
pqnet 17/8/2016

0

Thay vì

quản trị viên
bất kỳ ứng dụng nào ...

Tôi đề nghị bạn thử gksu -u admin anyapplication, nơi bạn làm mọi thứ bằng gksuchính lệnh đó. Ngoài ra, vui lòng lưu ý rằng bạn phải nhập mật khẩu của người dùng được đề cập trong lệnh, tức là trong trường hợp này bạn phải nhập mật khẩu của quản trị viên .


1
Trên hệ thống Ubuntu được cấu hình mặc định, nếu normaluserchạy, gksu -u admin anyapplicationnó sẽ nhắc normalusermật khẩu của bạn adminsử dụng sudophụ trợ, giống như gksu anyapplicationsẽ nhắc normalusermật khẩu của bạn rootsử dụng sudophụ trợ. Cả hai sẽ thất bại vì cùng một lý do-- normaluserkhông có khả năng chạy các lệnh với sudo.
Eliah Kagan

-1

Đây là lệnh để thực hiện điều này.

gksu app-name

Chạy nó mà không chạy sutrước. Bạn chỉ cần chạy lệnh trên từ một phiên người dùng bình thường và ứng dụng sẽ được chạy dưới quyền root.


1
nó không hoạt động - lưu ý rằng tôi đang thử từ phiên người dùng không có đặc quyền
Boris

Thông báo lỗi là gì?
SirCharlo

nhập normalmật khẩu người dùng của tôi - Tôi nhận được thông báo "Không thể khởi chạy với tư cách người dùng root"
Boris

nhập superuser/adminmật khẩu của tôi - Tôi nhận được thông báo "mật khẩu không chính xác, hãy thử lại"
Boris

-1

Bạn nên sử dụng:

gksudo AppName

Điều này đưa ra một yêu cầu mật khẩu đồ họa trước tiên (mật khẩu người dùng của bạn), và sau đó khởi động ứng dụng GUI với quyền root (tôi vừa thử, nó thực sự rất hay. Điều thú vị: Tôi đã thử gksu AppNamengay sau đó và nó cũng hoạt động tốt - vì nó là như vậy có lẽ được cho là, như tiền tố "gk" gợi ý. Vì vậy, tôi không hoàn toàn chắc chắn vấn đề của bạn có thể nằm ở đâu).


1
nó hoạt động trong trường hợp của bạn bởi vì bạn đã thử từ phiên người dùng quản trị với sudo phải. Điều gì về một phiên người dùng không phải quản trị viên mà không có sudo phải không?
Boris

tôi đã sử dụng gksudo từ một cửa sổ đầu cuối bình thường với người dùng không phải là quản trị viên (người dùng của riêng tôi). Bạn đã đúng tuy nhiên lần thử thứ hai, vì tôi vẫn có sudo perms. Nhưng vấn đề của Boris là một vấn đề khác: ứng dụng của anh ta không thể kết nối với X, trong trường hợp của tôi hoạt động cả hai lần. Như bạn có thể thấy từ câu hỏi ban đầu, sudotrong chế độ văn bản đang làm việc cho anh ta.
Izzy

-1

Chỉ có một siêu người dùng và đó là root.

Người dùng 1 là quản trị viên và có quyền sudo.
Người dùng 2 không phải là quản trị viên và không có quyền sudo.

Hãy thử đăng nhập với tư cách người dùng 1 sau đó sử dụng lệnh

gksudo app-name  

(thay thế tên ứng dụng bằng tên ứng dụng)
Hy vọng điều đó có ích - hãy cho tôi biết. : o)

EDIT: Thêm thông tin theo yêu cầu

Nếu chỉ là bạn trên máy tính,
thì sử dụng người dùng 1 (người có quyền sử dụng sudo)
không khác gì sử dụng người dùng 2 (người không có quyền sử dụng sudo).
Người dùng 1 có các quyền giống như người dùng 2.
Trừ khi người dùng 1 phát lệnh có tiền tố sudo và / hoặc cung cấp mật khẩu của họ để cho phép các ứng dụng chạy với quyền riêng tư gốc.
Sự khác biệt duy nhất là người dùng 2 không thể chạy ứng dụng với quyền root.

Hy vọng rằng sẽ giúp giải thích nó một chút cho bạn. : o)


cảm ơn vì đã làm rõ giữa siêu người dùng và quản trị viên, tôi sẽ chỉnh sửa câu hỏi của mình. Ý bạn là gì khi "đăng nhập với tư cách người dùng 1" => mở phiên với người dùng 1? đó là những gì tôi muốn tránh
Boris

đã thêm thông tin để trả lời theo yêu cầu: o)
Dự án Fernhill Linux

Vợ tôi và các con tôi đang sử dụng user2 với autologin, vì vậy tôi thích không có sudo đúng với người dùng đó.
Boris

Nghe có vẻ là một ý tưởng hay - tôi cũng có con; o). Bạn đã thử đăng nhập với tên user1 chưa và chạy lệnh?
Dự án Fer dốc Linux

1
Có tôi có thể nhưng thật đau đớn khi thay đổi phiên người dùng. Tôi thường phải làm điều đó nhiều lần: vào phiên quản trị để xác định một số cài đặt, chuyển sang phiên người dùng bình thường để kiểm tra và lặp đi lặp lại, thật tuyệt khi có thể thực hiện điều đó trong phiên bình thường. Hầu hết thời gian tôi xử lý nó với su admin+ sudo ...ví dụ sudo vi file, ngoại trừ ứng dụng có GUI
Boris
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.