Bagaimana saya bisa menjalankan aplikasi dengan GUI sebagai admin dari sesi pengguna non-admin?

33

Saya mendefinisikan 2 akun pengguna:

  • satu dengan hak istimewa admin (dengan sudokanan) => sebut saja adminuser.
  • yang ke-2 tanpa privilege => sebut saja dan saya mengkonfigurasi autologin pada pengguna kedua ini . normaluser
    normaluser

Jadi ketika saya membuka normalusersesi dan ingin menjalankan aplikasi dengan hak istimewa admin,
saya membuka terminal Ctrl+ Alt+ Tdan:

su adminuser
sudo anyapplication ...

Ini berfungsi dengan baik, tanpa harus keluar dari normalusersesi (tidak perlu membuka adminusersesi).


Tetapi apa yang harus saya lakukan jika aplikasi perlu dijalankan dengan GUI (Graphic User Interface)?
Saya berpikir tentang itu:

su adminuser
gksu anyapplication ...

tapi saya mengerti

** (gksu:9122): WARNING **: the connexion is closed
No protocol specified
No protocol specified
(gksu:9122): Gtk-WARNING **: cannot open display: :0.0
Boris
sumber
Jadi pertanyaannya adalah: mengapa Anda mengkonfigurasi sistem Anda dengan cara ini? Apakah Anda pikir ini meningkatkan keamanan? Bukan :) Alih-alih, Anda bisa mengonfigurasi login otomatis pada akun "admin" Anda sehingga tidak akan meminta kata sandi saat Anda masuk - masih akan memerlukan kata sandi saat Anda melakukan tugas administratif.
Sergey
5
@Sergey Jika normaluserkadang-kadang digunakan oleh seseorang yang seharusnya tidak dapat menjalankan perintah root, maka membuat normalusernon-administrator pasti meningkatkan keamanan . Bahaya memberi seseorang akun pengguna tetapi tidak memberi tahu mereka kata sandi mereka sendiri jauh melampaui situasi Boris dalam kerumitan dan kompleksitas. Jika Anda ingin penjelasan lengkap mengapa itu bermasalah, saya sarankan memposting pertanyaan baru, tetapi 3 alasannya adalah bahwa pengguna harus dapat mengunci dan membuka kunci layar, logout dan kembali dengan jenis sesi yang berbeda, dan mendekripsi ecryptfsdata.
Eliah Kagan
2
tepatnya, bagi saya itu tidak masuk akal untuk menggunakan PC keluarga saya membiarkan semua orang tahu kata sandi admin untuk membuka kunci layar. Ini normaluserdan adminuserpengaturan adalah aturan emas.
Boris
1
Cukup adil, saya baru saja mendapat kesan OP menggunakan normaluserakun untuk pekerjaan sehari-hari dan adminakun untuk melakukan tugas administrasi, yang tidak benar-benar meningkatkan apa pun. Pada mesin multi-pengguna ini benar-benar masuk akal.
Sergey

Jawaban:

5

PAM dapat mengatasinya

Ini berfungsi untuk saya di Ubuntu 16.04 (edit: berfungsi juga di 18.04 LTS):

cantumkan:

session optional pam_xauth.so

di suatu tempat di:

/etc/pam.d/su

dan / atau

/etc/pam.d/sudo

dan kemudian melakukan "su -" atau "sudo su -" Saya dapat menggunakan aplikasi grafis sebagai root.

Gerben
sumber
Mengkonfirmasi bahwa ini berfungsi pada Kubuntu 16.04 juga. Terima kasih!
akhmed
Terima kasih, ini bekerja untuk saya juga pada 18.04! tampaknya menjadi alternatif terbaik untuk suxdan gksuyang tidak tersedia lagi.
Boris
29

Terminologi

Dalam jawaban ini:

  • normaluseradalah user biasa yang bukan administrator dan tidak dapat menjalankan perintah sebagai rootdengan sudo.
  • adminadalah administrator yang dapat menjalankan perintah rootdengan sudo. (Tentu saja, perintah grafis apa pun harus menggunakan antarmuka grafis seperti gksu/gksudo , dan tidak sudosecara langsung.)
  • anyapplicationadalah nama aplikasi grafis yang normaluseringin dijalankan sebagai root. normalusertahu adminpassword 's dan telah (mungkin) telah diberitahu s / ia dapat menggunakannya untuk tujuan ini.

Masalah

Penyebab masalah Anda, dan alasan sebagian besar jawaban yang lain sejauh tidak bekerja (dengan pengecualian Marty Fried 's jawaban yang sangat baik ), adalah:

  • gksudapat dikonfigurasi untuk menggunakan salah satu sudo atau su sebagai backendnya. Perilaku default gksudi Ubuntu adalah bertindak sebagai frontend untuk sudo, bukan untuk su. Artinya, secara default, gksudan gksudoberperilaku persis sama . Lihat halaman manual .
  • normaluserbukan seorang administrator dan karenanya tidak dapat menjalankan perintah rootdengan sudo. sudomeminta kata sandi pengguna yang menjalankannya , bukan kata sandi pengguna yang diinginkan . Tidak dapat menggunakan kata sandi Anda untuk melakukan tindakan sebagai orang yang bukan Anda adalah apa artinya tidak menjadi administrator .
  • normaluser, asalkan itu bukan akun Tamu, dapat menjalankan perintah sebagai pengguna lain , dengansu memasukkan kata sandi pengguna lain . Tapi gksubertindak sebagai ujung tombak sudo, bukan su.
  • normalusertidak dapat secara langsung menjalankan perintah apa pun root, karena normalusertidak dapat digunakan sudo, dan tidak ada yang dapat rootmelakukannya sukarena tidak ada rootkata sandi .

Solusinya

Solusinya memerlukan penulisan perintah yang melakukan dua langkah otentikasi:

  • normaluserharus menjadi adminuntuk menjalankan perintah grafis. Untuk melakukan ini, normaluserharus dijalankan gksudengan -wflag untuk membuatnya berjalan dalam mode su, bukan mode sudo default , dan -uflag untuk menjalankan perintah sebagai adminganti root.
  • Perintah run as adminmust invoke gksu tanpa menggunakan -wflag sudomenjadi root.

Inilah perintahnya (ya, saya telah mengujinya ;-) ):

gksu -w -u admin gksu anyapplication

Anda akan diminta kata sandi dua kali :

  1. Pertama, Anda harus memasukkan adminkata sandi, untuk normalusermenjalankan perintah seperti adminpada subackend.
  2. Kedua, Anda harus memasukkan adminkata sandi, untuk adminmenjalankan perintah seperti rootpada sudobackend.

Betul sekali. Anda memasukkan adminkata sandi dua kali.

Catatan lain-lain:

  • Jika mau, Anda dapat mengganti yang kedua gksudengan yang gksudomembuatnya kurang membingungkan. Di Ubuntu, mereka setara. (Anda juga dapat mengganti yang pertama gksudengan gksudo, tetapi itu akan sangat berlawanan dengan intuisi dan membingungkan.)
  • -wadalah bentuk pendek dari --su-mode.
  • -Sadalah bentuk pendek dari --sudo-modetetapi tidak harus digunakan karena sudo-mode adalah default.
  • Anda mungkin ingin menguji ini dengan beberapa perintah yang cukup tidak berbahaya terlebih dahulu, untuk memastikan itu melakukan apa yang Anda inginkan. (Ya, tetapi tidak perlu bagi Anda untuk mempercayai saya tentang hal itu.) Misalnya:
    gksu -w -u admin gksu xclock
    xclock adalah aplikasi jam-jendela sederhana yang bagus.
Eliah Kagan
sumber
1
SEMPURNA, saya menambahkan alias di .bashrc saya segera untuk menghindari lupa tip cerdas ini
Boris
tidak tahu mengapa, tapi sekarang (dengan ubuntu 14.04) saya harus memulainya sudountuk membuatnya bekerja. Contoh:sudo gksu -w -u thedude gksu xclock
Boris
FYI: kdesudoterlihat bekerja lebih bersih, setidaknya di KUbuntu.
MDTech.us_MAN
sayangnya, sepertinya itu gksutidak tersedia lagi
Boris
11

Salah satu cara yang mungkin akan berhasil adalah menggunakan "sux" daripada "su" saat Anda pertama kali beralih ke pengguna admin. sux memperbaiki masalah menjalankan aplikasi x dari pengguna palsu. Itu dalam repo standar, dan dapat diinstal dengan memasukkan sudo apt-get install suxpada commandline.

Kemudian, gunakan saja "sux" daripada "su" dan itu akan bekerja seperti yang Anda harapkan.

Mari kita gunakan kembali contoh aplikasi xclock:

sux admin
gksu xclock
Marty Fried
sumber
3
Tidak ada lagi versi suxdi Ubuntu 14.04 64bits;(
Boris
2
Tampaknya ada alternatif
Boris
@Boris Ini adalah skrip shell, Anda dapat mengunduhnya dari repo bersejarah dan meletakkannya di jalur Anda, misalnya dari packages.debian.org/source/wheezy/sux
Nobody
2

pkexec

Ada alternatif di mana-mana untuk kdesudo dan gksu - pkexecyang berasal dari policykit-1paket yang dibutuhkan oleh banyak paket.

int_ua
sumber
Saya sarankan memperluas jawaban ini untuk menjelaskan bagaimana pengguna biasa (yang bukan administrator dan tidak dapat menjadi root dengan sudoatau polkit), yang mengetahui kata sandi administrator (yaitu, seseorang yang dapat menjadi root dengan sudoatau polkit), dapat digunakan pkexecuntuk jalankan program grafis sebagai root. Itulah pertanyaan yang diajukan di sini. Tidak jelas bagi saya yang pkexecakan melakukan ini, setidaknya tanpa mengedit file konfigurasi secara luas, terutama karena pkexecumumnya tidak dapat digunakan untuk menjalankan program grafis sewenang-wenang (tanpa profil polkit) sama sekali . Apakah ada cara?
Eliah Kagan
@EliahKagan Ini berfungsi di Ubuntu dengan konfigurasi default - jalankan saja pkexec commanddan berfungsi. Konfigurasi ada di file /usr/share/polkit-1/actions/org.freedesktop.policykit.policyyang diinstal oleh paket bernama. Dan itu sebenarnya mengharuskan Anda untuk menulis kata sandi admin hanya sekali
pqnet
0

Dari pada

su admin
aplikasi gksu ...

Saya sarankan Anda untuk mencoba gksu -u admin anyapplication, di mana Anda melakukan semuanya menggunakan gksuperintah itu sendiri. Juga harap dicatat bahwa Anda harus memasukkan kata sandi pengguna yang disebutkan dalam perintah, yaitu, dalam hal ini Anda harus memasukkan kata sandi admin .

l0n3sh4rk
sumber
1
Pada sistem Ubuntu yang dikonfigurasi secara default, jika normaluserdijalankan gksu -u admin anyapplicationakan meminta normaluserkata sandi untuk adminmenggunakan sudobackend, seperti halnya gksu anyapplicationakan meminta normaluserkata sandi untuk rootmenggunakan sudobackend. Keduanya akan gagal karena alasan yang sama - normalusertidak memiliki kekuatan untuk menjalankan perintah sudo.
Eliah Kagan
-1

Inilah perintah untuk mencapai ini.

gksu app-name

Jalankan tanpa berlari suterlebih dahulu. Anda hanya perlu menjalankan perintah di atas dari sesi pengguna normal dan aplikasi akan dijalankan sebagai root.

TuanCharlo
sumber
1
tidak berfungsi - perhatikan bahwa saya mencoba dari sesi pengguna tanpa hak istimewa
Boris
Apa pesan kesalahannya?
SirCharlo
memasukkan normalkata sandi pengguna saya - saya mendapat pesan "Tidak mungkin diluncurkan sebagai pengguna root"
Boris
memasukkan superuser/adminkata sandi saya - saya mendapat pesan "kata sandi salah, coba lagi"
Boris
-1

Kamu harus menggunakan:

gksudo AppName

Ini memunculkan permintaan kata sandi grafis terlebih dahulu (kata sandi pengguna Anda), dan kemudian memulai aplikasi GUI sebagai root (saya baru saja mencoba, itu benar-benar lucu. Hal yang lucu: Saya mencoba gksu AppNamesegera setelahnya, dan itu berhasil juga - sebagaimana adanya mungkin seharusnya, seperti yang disarankan awalan "gk. Jadi saya tidak sepenuhnya yakin di mana masalah Anda berada).

Izzy
sumber
1
itu berfungsi dalam kasus Anda karena Anda telah mencoba dari sesi pengguna admin dengan sudo benar. Bagaimana dengan sesi pengguna non admin tanpa sudo kan?
Boris
saya menggunakan gksudo dari jendela terminal normal dengan pengguna non-admin (pengguna saya sendiri). Namun Anda benar untuk percobaan kedua, karena saya masih memiliki perms sudo saat itu. Tetapi masalah Boris adalah yang berbeda: aplikasinya tidak dapat terhubung ke X, yang dalam kasus saya berfungsi dua kali. Seperti yang Anda lihat dari pertanyaan awal, sudodalam mode teks berfungsi untuknya.
Izzy
-1

Hanya ada satu pengguna super dan itu adalah root.

Pengguna 1 adalah admin dan memiliki hak sudo.
Pengguna 2 bukan admin dan tidak memiliki hak sudo.

Coba masuk sebagai pengguna 1 lalu gunakan perintah

gksudo app-name  

(mengganti nama aplikasi dengan nama aplikasi)
Harapan yang membantu - beri tahu saya. :Hai)

Sunting: Info lebih lanjut seperti yang diminta

Jika hanya Anda yang menggunakan komputer,
maka menggunakan pengguna 1 (yang memiliki izin untuk menggunakan sudo)
tidak berbeda dengan menggunakan pengguna 2 (yang tidak memiliki izin untuk menggunakan sudo).
Pengguna 1 memiliki hak yang sama dengan pengguna 2.
Kecuali jika pengguna 1 mengeluarkan perintah yang diawali dengan sudo dan / atau memberikan kata sandi mereka untuk memungkinkan aplikasi dijalankan dengan root privelage.
Satu-satunya perbedaan adalah pengguna 2 tidak dapat menjalankan aplikasi sebagai root.

Semoga itu bisa membantu menjelaskannya sedikit untuk Anda. :Hai)

Proyek Linux Fernhill
sumber
terima kasih atas klarifikasi antara pengguna super dan admin, saya akan mengedit pertanyaan saya. Apa yang Anda maksud dengan "masuk sebagai pengguna 1" => buka sesi dengan pengguna 1? baik itu yang ingin saya hindari.
Boris
menambahkan info lebih lanjut untuk menjawab seperti yang diminta: o)
Fernhill Linux Project
baik istri saya dan anak-anak saya menggunakan user2 dengan autologin, jadi saya lebih suka tidak memiliki sudo yang tepat dengan pengguna itu.
Boris
Kedengarannya seperti ide yang bagus - saya punya anak juga; o). Apakah Anda mencoba masuk sebagai user1 dan menjalankan perintah?
Proyek Fernhill Linux
1
Ya saya bisa tetapi menyakitkan untuk mengubah sesi pengguna. Saya biasanya harus melakukannya beberapa kali: pergi pada sesi admin untuk menetapkan beberapa pengaturan, beralih ke sesi pengguna normal untuk menguji, dan lagi dan lagi, sangat bagus untuk dapat melakukan itu tetap pada sesi normal. Sebagian besar waktu saya menanganinya dengan su admin+ sudo ...contoh sudo vi file, kecuali untuk aplikasi dengan GUI
Boris