ความแตกต่างระหว่าง gksudo และ gksu คืออะไร?


58

มีความแตกต่างระหว่างพฤติกรรมของgksu fooและgksudo foo?
พวกเขาสามารถใช้แทนกันได้?

คำตอบ:


39

ไฟล์ทั้งคู่ชี้ไปที่เดียวกัน:

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

... เป็นไปgksudo symlinked gksuแต่นี่ไม่ได้หมายความว่าพวกเขาทำสิ่งเดียวกันห่างไกลจากมัน

แอพพลิเคชั่นสามารถตรวจจับคำสั่งที่ใช้เรียกใช้งานได้ โดยทั่วไปจะเป็นargv[0]ภาษา C-style หรือ$0สคริปต์เชลล์สไตล์ Bourne แอปพลิเคชันสามารถดูได้และในกรณีนี้จริง ๆ แล้วมันเปลี่ยนวิธีการทำงาน สิ่งบ่งชี้แรกของสิ่งนี้อยู่ในman gksuหน้า:

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

หากคุณค้นหาที่มา ( apt-get source gksu) run_modeคุณจะเห็นว่ามันตรวจพบสิ่งนี้ได้อย่างไร:

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

คุณสามารถแทนที่สิ่งนี้ด้วย--su-mode/ -wและ--sudo-mode/ -Sอาร์กิวเมนต์ (เพื่อให้คุณสามารถเรียกใช้คำสั่งที่เทียบเท่าโดยไม่ต้องใช้gksudosymlink ... แต่นั่นก็ขึ้นอยู่กับคุณ

หากคุณต้องการที่จะรู้ว่าวิธีการเหล่านี้ "โหมด" gksuมันแตกต่างกันมีเพียงบิตของการหลบหนีใน libgksuคุณจำเป็นต้องทำตามมันเข้าไป นี่คือไลบรารีที่ตรวจสอบการอนุญาตจริง ๆ ก่อนส่งไปยังระบบ

ถ้าโหมดไม่ได้ระบุ (เช่นคุณโทรgksuโดยไม่ขัดแย้ง) ตามเวลาที่มันจะมาถึง libgksu, มันจะตรวจสอบ Gconf (ตามที่สเตฟาโนชี้ให้เห็น)และถ้ามันยังไม่สามารถตัดสินใจได้ก็จะเริ่มต้นไปยังsuโหมด


1
เพื่อเพิ่มความคิดเห็นของ Oli; แม้ว่า gksudo จะเชื่อมโยงกับ gksu ใน Ubuntu โดยค่าเริ่มต้นเราจะใช้ gksudo เพียงเพราะเราเปิดใช้งานโหมด / apps / gksu / sudo-mode ดังนั้นหากไม่มีใครบังคับใช้ตัวเลือก --su-mode gksu จะไม่ถูกใช้
Vish

5
@Oli: ฉันจะไม่สรุปทันทีว่าไม่มีความแตกต่างเพียงเพราะมันเป็น symlink ดู busybox ขึ้นอยู่กับชื่อของ symlink การกระทำที่แตกต่างกันจะถูกดำเนินการ ในกรณีนี้ฉันไม่รู้ว่ามันเป็นจริงหรือไม่ แต่ AFAIK เป็นกรณีจริง ๆ
Lekensteyn

1
-1, ทำให้เข้าใจผิดมาก: ซอฟต์แวร์อาจมีพฤติกรรมแตกต่างกันไปตามชื่อที่ใช้ในการเรียกชื่อ ยกตัวอย่างเช่นbashเปิดโหมดเข้มงวด POSIX shเมื่อเรียกเป็น และgksu เป็นยังทราบชื่อภาวนา
MestreLion

การใช้อินเทอร์เน็ตบนโทรศัพท์มือถือที่มีหน้าจอเล็กเกินไปและนิ้วใหญ่เกินไปฉันต้อง downvote โดยไม่ตั้งใจ ฉัน upvoted เพื่อชดเชย :)
จาค็อบ Vlijm

37

ใน Ubuntu (!) ไม่มีความแตกต่าง

  • gksuโดยปกติจะเข้าสู่ระบบในผู้ใช้รูทและเรียกใช้แอพในเซสชันนี้ อย่างไรก็ตามในอูบุนตูเป็นค่าเริ่มต้นโดยใช้โหมด "sudo" gksudoซึ่งเทียบเท่าของการทำงาน นี่เป็นเพราะใน Ubuntu คุณไม่สามารถเข้าสู่ระบบได้ในฐานะรูทตามค่าเริ่มต้น

  • gksudoเป็นกราฟิกที่เทียบเท่าsudo(และเป็น Oli ชี้ให้เห็นเพียงแค่การเชื่อมโยงสัญลักษณ์เพื่อ gksu)

จากรายการ gconf ของ gksu:

ข้อความแสดงแทน

นอกจากนี้ความแตกต่างระหว่าง sudo และ gksudo:

คุณไม่ควรใช้ sudo ปกติเพื่อเริ่มโปรแกรมกราฟิกเป็นรูท คุณควรใช้ gksudo (kdesudo บน Kubuntu) เพื่อเรียกใช้โปรแกรมดังกล่าว gksudo ตั้งค่า HOME = ~ root และคัดลอก. Xauthority ไปยังไดเรกทอรี tmp สิ่งนี้ป้องกันไม่ให้ไฟล์ในโฮมไดเร็กทอรีของคุณเป็นเจ้าของโดยรูท (AFAICT นี่คือทั้งหมดที่พิเศษเกี่ยวกับสภาพแวดล้อมของกระบวนการเริ่มต้นด้วย gksudo vs. sudo)
 - (จากเอกสารชุมชนผ่านChris Wilson )


14

ฉันรู้ว่านี้เป็นหัวข้อเก่า แต่ฉันได้รับการถามจะบอกคุณเกี่ยวกับความแตกต่างที่บอบบาง แต่ที่สำคัญระหว่างและgksugksudo

แม้ว่าฉันจะดูยาวและหนักหน่วงฉันก็ไม่สามารถค้นหาความแตกต่างที่เป็นเอกสารได้ทุกที่ แต่มันก็มีอยู่จริง ฉันยังไม่พบว่าทำไมมีความแตกต่าง ฉันพบวิธีที่ยากเมื่อฉันเผลอลบไฟล์บางระบบได้อย่างแม่นยำเพราะความแตกต่างนี้ (กล่าวถึงในการตั้งกระทู้ในฟอรั่มอูบุนตู ) - ฉันเคยใช้แต่หลังจากนั้นผมได้ทำแน่ใจเสมอที่จะใช้gksugksudo

เพื่อสรุปลองสิ่งนี้

  1. สร้างสามไฟล์ในบางโฟลเดอร์:
    touch abc
    touch abc.tmp
    touch abctmp
  2. รันคำสั่งหกคำสั่งต่อไปนี้ ห้ารายการแรกให้ผลลัพธ์ (คาดหวัง) เหมือนกัน (เช่นเพิ่งabc.tmp) ส่วนไฟล์ที่หกมีไฟล์เพิ่มเติม ( abctmp) ที่ไม่ควรทำ

    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
    

ลองนึกภาพปัญหาเมื่อคุณแทนที่-printด้วย-deleteในfindคำสั่ง (ซึ่งเป็นสิ่งที่เกิดขึ้นกับฉันอย่างแน่นอนทำให้ไฟล์ระบบบางส่วนจะถูกลบ)

ดังนั้นโปรดใช้แทนgksudogksu


เพิ่งลองสิ่งนี้ใน 12.04LTS ยังไม่เข้าใจว่าทำไม แต่มีความแตกต่าง ซอร์สโค้ดสำหรับ gksu แสดงให้เห็นว่าgksudoเทียบเท่ากับการพิมพ์gksu --sudo-mode
Warren Hill

@WarrenHill - ใช่ในทางทฤษฎี! แต่ไม่ใช่ในทางปฏิบัติ ฉันไม่รู้ว่าทำไม.
Paddy Landau

2
น่าสนใจและผ่านการตรวจสอบใน 13.04 ดูเหมือนข้อผิดพลาดการจัดการคำพูดอย่างแน่นอน
l0b0

4
ยื่นข้อผิดพลาด
l0b0

1
@ l0b0 - ขอบคุณฉันได้เพิ่มคะแนนของฉันในข้อผิดพลาด
Paddy Landau
โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.