Apa perbedaan antara gksudo dan gksu?

58

Apakah ada perbedaan antara perilaku gksu foodan gksudo foo?
Bisakah mereka digunakan secara bergantian?

Sid
sumber

Jawaban:

39

Kedua file mengarah ke tempat yang sama:

$ ls -l /usr/bin/gksudo 
lrwxrwxrwx 1 root root 4 2010-09-27 18:23 /usr/bin/gksudo -> gksu

... gksudodikaitkan dengan gksu. Tetapi ini tidak berarti mereka melakukan hal yang sama, jauh dari itu.

Aplikasi dapat mendeteksi perintah yang digunakan untuk menjalankannya. Ini biasanya argv[0]dalam bahasa C-style atau $0dalam skrip shell Bourne-style. Aplikasi dapat melihat itu dan dalam hal ini, sebenarnya itu mengubah cara kerjanya. Indikasi pertama ini ada di man gksuhalaman:

gksu  is  a  frontend  to  su  and gksudo is a frontend to sudo.

Jika Anda mencari di sumber ( apt-get source gksu) untuk run_mode, Anda akan melihat bagaimana ia mendeteksi ini:

  { /* support gksu_sudo_run */
    gchar *myname = g_path_get_basename (argv[0]);
    if (!strcmp(myname, "gksudo"))
      run_mode = SUDO_MODE;
    g_free (myname);
  }

Anda dapat mengganti ini dengan --su-mode/ -wdan --sudo-mode/ -Sargumen (sehingga Anda dapat menjalankan perintah setara tanpa perlu gksudosymlink ... Tapi itu terserah Anda.

Jika Anda ingin tahu bagaimana "mode" ini benar-benar berbeda, hanya ada sedikit jalan keluar gksu. Anda harus mengikutinya libgksu. Ini adalah perpustakaan yang benar-benar memeriksa izin sebelum menyerahkan ke sistem.

Jika tidak ada mode yang ditentukan (mis. Anda menelepon gksutanpa argumen) pada saat itu mencapai libgksu, itu akan memeriksa Gconf (seperti yang ditunjukkan oleh Stefano) dan jika itu masih tidak dapat memutuskan, itu akan default ke sumode.

Oli
sumber
1
Untuk menambahkan komentar Oli; Meskipun gksudo terhubung ke gksu, Di Ubuntu, secara default kita hanya akan menggunakan gksudo karena kita mengaktifkan / apps / gksu / sudo-mode. Jadi kecuali seseorang memaksa opsi --su-mode gksu tidak digunakan.
Vish
5
@ Oli: Saya tidak akan langsung menyimpulkan bahwa tidak ada perbedaan hanya karena itu adalah symlink. Lihat di busybox, tergantung pada nama symlink, berbagai tindakan dilakukan. Dalam hal ini, saya tidak tahu apakah itu benar atau tidak, tetapi AFAIK memang demikian.
Lekensteyn
1
-1, sangat menyesatkan: perangkat lunak mungkin berperilaku berbeda tergantung pada nama apa yang digunakan untuk memanggil mereka. Misalnya bashmengaktifkan mode ketat POSIX ketika dipanggil sebagai sh. Dan gksu ini juga menyadari nama doa.
MestreLion
Menggunakan internet di ponsel saya dengan layar terlalu kecil dan jari-jari terlalu besar, saya harus secara tidak sengaja menurunkan suara. Saya dipilih untuk mengimbangi :)
Jacob Vlijm
37

Di Ubuntu (!), Tidak ada perbedaan.

  • gksubiasanya akan login pengguna root dan menjalankan aplikasi pada sesi ini. Namun, pada Ubuntu, defaultnya adalah menggunakan "mode sudo", yang setara dengan berjalan gksudo. Ini karena di ubuntu, Anda tidak dapat masuk sebagai root secara default.

  • gksudoadalah ekuivalen grafis sudo(dan seperti yang ditunjukkan Oli, hanya tautan simbolis ke gksu)

Dari entri gconf dari gksu:

teks alternatif

Selanjutnya, tentang perbedaan antara sudo dan gksudo:

Anda seharusnya tidak pernah menggunakan sudo normal untuk memulai aplikasi grafis sebagai root. Anda harus menggunakan gksudo (kdesudo di Kubuntu) untuk menjalankan program tersebut. gksudo set HOME = ~ root, dan salin .Xauthority ke direktori tmp. Ini mencegah file di direktori home Anda menjadi milik root. (AFAICT, ini semua yang spesial tentang lingkungan proses yang dimulai dengan gksudo vs sudo).
 - (dari dokumentasi komunitas via Chris Wilson )

Stefano Palazzo
sumber
14

Saya tahu ini adalah utas lama, tetapi saya telah diminta untuk memberi tahu Anda tentang perbedaan yang halus namun penting antara gksudan gksudo.

Walaupun saya telah mencari jauh dan keras, saya tidak dapat menemukan perbedaan yang terdokumentasi di mana pun, namun hal itu memang ada. Saya juga belum tahu mengapa ada perbedaan. Saya menemukan ini dengan cara yang sulit ketika saya secara tidak sengaja menghapus beberapa file sistem justru karena perbedaan ini (dibahas di utas di Forum Ubuntu ) - Saya telah menggunakan gksu, tetapi sejak itu saya selalu memastikan untuk menggunakannya gksudo.

Untuk meringkas, coba ini.

  1. Buat tiga file dalam beberapa folder:
    touch abc
    touch abc.tmp
    touch abctmp
  2. Jalankan enam perintah berikut. Lima yang pertama memberikan hasil yang sama (diharapkan) (yaitu adil abc.tmp) sedangkan yang keenam menyertakan file tambahan ( abctmp) yang tidak seharusnya.

    find . -regextype posix-egrep -regex '.*\.tmp' -print
    sudo find . -regextype posix-egrep -regex '.*\.tmp' -print
    gksudo -- find . -regextype posix-egrep -regex '.*\.tmp' -print
    gksudo --su-mode -- find . -regextype posix-egrep -regex '.*\.tmp' -print
    gksu --sudo-mode -- find . -regextype posix-egrep -regex '.*\.tmp' -print
    gksu -- find . -regextype posix-egrep -regex '.*\.tmp' -print
    

Bayangkan masalah ketika Anda mengganti -printdengan -deletedalam findperintah (yang persis apa yang terjadi pada saya, menyebabkan beberapa file sistem dihapus).

Jadi, silakan gunakan gksudobukan gksu.

Paddy Landau
sumber
Baru saja mencoba ini pada 12.04LTS. Belum sepenuhnya mengerti mengapa tetapi ada perbedaan. Kode sumber untuk gksu menunjukkan bahwa gksudoitu setara dengan mengetikgksu --sudo-mode
Warren Hill
@ WarrenHill - ya, secara teori! Tetapi tidak dalam praktik. Saya tidak tahu kenapa.
Paddy Landau
2
Menarik, dan diverifikasi pada 13.04. Jelas terlihat seperti bug penanganan kutipan.
l0b0
4
Mengarsipkan bug .
l0b0
1
@ l0b0 - terima kasih, saya telah menambahkan suara saya ke bug.
Paddy Landau