ฉันจะรันแอปพลิเคชันด้วย GUI ในฐานะผู้ดูแลระบบจากเซสชันผู้ใช้ที่ไม่ใช่ผู้ดูแลระบบได้อย่างไร


33

ฉันกำหนดบัญชีผู้ใช้ 2 บัญชี:

  • เป็นหนึ่งเดียวกับผู้ดูแลระบบสิทธิพิเศษ (กับsudoขวา) => adminuserช่วยให้เรียกว่า
  • อันที่สองที่ไม่มีสิทธิ์ => ให้เรียกมัน และฉันจะกำหนดค่า autologin ให้กับผู้ใช้คนที่สองนี้ normaluser
    normaluser

ดังนั้นเมื่อฉันเปิดnormaluserเซสชันและต้องการเรียกใช้แอปพลิเคชันที่มีสิทธิ์ของผู้ดูแลระบบ
ฉันเปิดเทอร์มินัลCtrl+ Alt+ Tและ:

su adminuser
sudo anyapplication ...

ใช้งานได้ดีโดยไม่ต้องออกจากnormaluserเซสชัน (ไม่จำเป็นต้องเปิดadminuserเซสชัน)


แต่ฉันควรทำอย่างไรหากแอปพลิเคชันต้องทำงานด้วย GUI (Graphic User Interface)
ฉันว่าเกี่ยวกับที่:

su adminuser
gksu anyapplication ...

แต่ฉันได้รับ

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

ดังนั้นคำถามคือทำไมคุณกำหนดค่าระบบของคุณด้วยวิธีนี้ คุณคิดว่ามันช่วยเพิ่มความปลอดภัยหรือไม่ ไม่ใช่ :) คุณสามารถกำหนดค่าการเข้าสู่ระบบอัตโนมัติในบัญชี "admin" ของคุณดังนั้นมันจะไม่ถามรหัสผ่านเมื่อคุณเข้าสู่ระบบ - มันจะยังต้องใช้รหัสผ่านเมื่อคุณทำงานด้านการดูแลระบบ
Sergey

5
@Sergey ถ้าnormaluserบางครั้งใช้โดยคนที่ไม่ควรจะสามารถเรียกใช้คำสั่งเป็นrootแล้วทำnormaluserไม่ใช่ผู้ดูแลระบบแน่นอนช่วยเพิ่มความปลอดภัย ความเสี่ยงในการให้บัญชีผู้ใช้แก่ใครบางคน แต่ไม่บอกให้พวกเขารู้รหัสผ่านของตัวเองไปไกลเกินกว่าสถานการณ์ของ Boris ในความยุ่งยากและความซับซ้อน หากคุณต้องการคำอธิบายแบบเต็มว่าทำไมถึงมีปัญหาฉันขอแนะนำให้โพสต์คำถามใหม่ แต่เหตุผล 3 ข้อที่ผู้ใช้ควรสามารถล็อคและปลดล็อกหน้าจอออกจากระบบและกลับมาใช้เซสชันประเภทอื่นและ ถอดรหัสecryptfsข้อมูล
Eliah Kagan

2
สำหรับฉันแล้วมันไม่มีเหตุผลที่จะใช้พีซีของครอบครัวฉันเพื่อให้ทุกคนรู้รหัสผ่านของผู้ดูแลระบบเพื่อปลดล็อกหน้าจอ นี้normaluserและadminuserการตั้งค่าเป็นกฎทอง
Boris

1
ยุติธรรมพอฉันเพิ่งได้รับความประทับใจที่ OP ใช้normaluserบัญชีสำหรับงานประจำวันและadminบัญชีสำหรับการปฏิบัติงานด้านการดูแลซึ่งไม่ได้ปรับปรุงอะไรเลย บนเครื่องที่มีผู้ใช้หลายคน
Sergey

คำตอบ:


5

PAM สามารถดูแลได้

สิ่งนี้ใช้ได้กับฉันใน Ubuntu 16.04 (แก้ไข: ใช้งานได้ดีกับ 18.04 LTS):

ใส่สาย:

session optional pam_xauth.so

บางแห่งใน:

/etc/pam.d/su

และ / หรือ

/etc/pam.d/sudo

จากนั้นทำ "su -" หรือ "sudo su -" ฉันสามารถใช้แอปแบบกราฟิกเป็นรูทได้


ยืนยันว่าใช้งานได้กับ Kubuntu 16.04 เช่นกัน ขอบคุณ!
akhmed

ขอบคุณมันใช้ได้กับฉันด้วย 18.04! มันน่าจะเป็นทางเลือกที่ดีที่สุดที่จะsuxและgksuที่ไม่สามารถใช้ได้อีกต่อไป
บอริส

29

คำศัพท์

ในคำตอบนี้:

  • normaluserเป็นผู้ใช้ปกติที่ไม่ได้เป็นผู้ดูแลระบบและไม่สามารถเรียกใช้คำสั่งเป็นกับrootsudo
  • adminเป็นผู้ดูแลระบบที่สามารถเรียกใช้คำสั่งเป็นกับroot sudo(แน่นอนคำสั่งกราฟิกใด ๆควรใช้ส่วนหน้าแบบกราฟิกเช่นgksu/gksudoและไม่ได้sudoโดยตรง)
  • anyapplicationเป็นชื่อของโปรแกรมกราฟิกต้องการที่จะทำงานเป็นnormaluser รู้รหัสผ่านและได้รับการบอกกล่าว (อาจจะ) เพื่อใช้ในการนี้rootnormaluseradmin

ปัญหา

สาเหตุของปัญหาของคุณและเหตุผลที่มากที่สุดของคำตอบอื่น ๆ เพื่อให้ห่างไกลจะไม่ได้ทำงาน (มีข้อยกเว้นของมาร์ตี้ผัด 's คำตอบที่ดี ) เป็น:

  • gksuสามารถกำหนดค่าให้ใช้อย่างใดอย่างหนึ่งsudo หรือ suเป็นแบ็กเอนด์ พฤติกรรมเริ่มต้นของgksuในอูบุนตูคือการทำหน้าที่เป็นส่วนหน้าสำหรับsudo, ไม่ได้suสำหรับ กล่าวคือโดยค่าเริ่มต้นgksuและมีgksudoพฤติกรรมเหมือนกันทุกประการ ดูmanpage
  • normaluserไม่ได้เป็นผู้ดูแลระบบจึงไม่สามารถเรียกใช้คำสั่งเป็นกับroot แจ้งให้ใส่รหัสผ่านของผู้ใช้ที่เรียกใช้ไม่ใช่รหัสผ่านของผู้ใช้ที่ต้องการใช้ ไม่สามารถที่จะใช้รหัสผ่านของคุณเพื่อดำเนินการเป็นคนที่ไม่ได้คุณก็คือว่ามันหมายถึงไม่ได้เป็นผู้ดูแลระบบsudosudo
  • normaluserให้มันไม่ได้เป็นบัญชีบุคคลทั่วไป, สามารถเรียกใช้คำสั่งเป็นผู้ใช้อื่นที่มีsuวางในรหัสผ่านของผู้อื่น แต่gksuทำหน้าที่เป็นส่วนหน้าหาไม่sudosu
  • normaluserไม่สามารถโดยตรงเรียกใช้คำสั่งใด ๆ ที่เป็นrootเพราะnormaluserไม่สามารถใช้sudoและไม่มีใครสามารถกลายเป็นrootด้วยsuเพราะไม่มีrootรหัสผ่าน

การแก้ไขปัญหา

โซลูชันต้องการการเขียนคำสั่งที่ดำเนินการตรวจสอบสิทธิ์สองขั้นตอน:

  • normaluserจะต้องadminเรียกใช้คำสั่งกราฟิก การทำเช่นนี้normaluserจะต้องเรียกใช้gksuกับ-wธงที่จะทำให้มันทำงานในsu โหมดแทนการเริ่มต้นsudo โหมดและ-uธงเพื่อเรียกใช้คำสั่งเป็นแทนadminroot
  • คำสั่งเรียกใช้ในฐานะadminที่ต้องเรียกใช้gksu โดยไม่ต้อง-wธงที่จะใช้จะกลายเป็นsudoroot

นี่คือคำสั่ง (ใช่ฉันได้ทดสอบมัน;-) ):

gksu -w -u admin gksu anyapplication

คุณจะถูกถามให้ใส่รหัสผ่านสองครั้ง :

  1. ครั้งแรกที่คุณจะต้องใส่admin's รหัสผ่านเพื่อให้normaluserเรียกใช้คำสั่งเป็นadminกับsuแบ็กเอนด์
  2. ประการที่สองคุณต้องป้อนadminรหัสผ่านเพื่อให้adminเรียกใช้คำสั่งเช่นเดียวrootกับส่วนsudoหลัง

ถูกตัอง. คุณป้อนadminรหัสผ่านสองครั้ง

หมายเหตุเบ็ดเตล็ด:

  • หากคุณต้องการคุณสามารถแทนที่วินาทีgksuด้วยgksudoเพื่อทำให้สับสนน้อยลง ใน Ubuntu พวกเขาเทียบเท่ากัน (คุณสามารถแทนที่รายการแรกgksuด้วยgksudoแต่นั่นอาจเป็นเรื่องง่ายและสับสนอย่างยิ่ง)
  • -w--su-modeเป็นรูปแบบที่สั้น
  • -Sเป็นรูปแบบย่อ--sudo-modeแต่ไม่จำเป็นต้องใช้เพราะโหมด sudoเป็นค่าเริ่มต้น
  • คุณอาจต้องการทดสอบสิ่งนี้โดยใช้คำสั่งที่ไม่เป็นอันตรายก่อนเพื่อให้แน่ใจว่าทำในสิ่งที่คุณต้องการ (มันจะ แต่ไม่จำเป็นสำหรับคุณที่จะเชื่อใจฉันในเรื่องนั้น) ตัวอย่างเช่น:
    gksu -w -u admin gksu xclock
    xclock เป็นแอปพลิเคชันนาฬิกาหน้าต่างที่เรียบง่าย

1
เพอร์เฟผมเพิ่มนามแฝงใน .bashrc ของฉันทันทีเพื่อหลีกเลี่ยงการลืมนี้เคล็ดลับฉลาด
บอริส

ไม่ทราบว่าทำไม แต่ตอนนี้ (กับ Ubuntu 14.04) ฉันต้องเริ่มต้นด้วยsudoเพื่อให้มันใช้งานได้ ตัวอย่าง:sudo gksu -w -u thedude gksu xclock
Boris

FYI: kdesudoดูเหมือนว่าจะทำงานสะอาดกว่าอย่างน้อยใน KUbuntu
MDTech.us_MAN

น่าเสียดายที่gksuไม่สามารถใช้งานได้อีกต่อไป
Boris

11

วิธีหนึ่งที่อาจใช้งานได้คือการใช้ "sux" แทน "su" เมื่อคุณเปลี่ยนไปใช้ผู้ใช้งานระบบเป็นครั้งแรก sux แก้ปัญหาการเรียกใช้แอปพลิเคชั่น x จากผู้ใช้ที่ปลอมแปลง มันอยู่ใน repo มาตรฐานและสามารถติดตั้งได้โดยการป้อนsudo apt-get install suxที่ commandline

จากนั้นเพียงใช้ "sux" แทน "su" และควรทำงานตามที่คุณคาดหวัง

ให้นำตัวอย่างแอปพลิเคชันกลับมาใช้ใหม่xclock:

sux admin
gksu xclock

3
ไม่มีรุ่นอื่น ๆ ของsuxบน Ubuntu 14.04 64 บิต;(
Boris

2
ดูเหมือนว่ามีทางเลือก
Boris

@Boris มันเป็นสคริปต์เชลล์คุณสามารถดาวน์โหลดได้จาก repo ที่มีคุณค่าทางประวัติศาสตร์และใส่ลงในพา ธ ของคุณตัวอย่างเช่นจากpackages.debian.org/source/wheezy/sux
ไม่มีใครใน

2

pkexec

มีทางเลือกที่แพร่หลายสำหรับ kdesudo และ gksu - pkexecซึ่งมาจากpolicykit-1แพ็คเกจที่จำเป็นสำหรับแพ็คเกจจำนวนมาก


ผมขอแนะนำให้ขยายคำตอบนี้จะอธิบายว่าผู้ใช้งานทั่วไป (ที่ไม่ได้เป็นผู้ดูแลระบบและไม่สามารถกลายเป็นรากsudoหรือ polkit) ที่รู้รหัสผ่านของผู้ดูแลระบบ (เช่นของคนที่ใครสามารถกลายเป็นรากsudoหรือ polkit) สามารถใช้pkexecในการ เรียกใช้โปรแกรมกราฟิกแบบรูท นั่นคือคำถามที่นี่ถาม มันไม่ได้ชัดเจนกับผมว่าpkexecจะทำเช่นนี้อย่างน้อยโดยไม่ต้องแก้ไขอย่างกว้างขวางแฟ้มการกำหนดค่าโดยเฉพาะตั้งแต่pkexecไม่สามารถโดยทั่วไปจะใช้ในการเรียกใช้โปรแกรมกราฟิกพล (ไม่มีโปรไฟล์ polkit) ที่ทั้งหมด มีวิธีหรือไม่?
Eliah Kagan

@EliahKagan สิ่งนี้ใช้ได้กับ Ubuntu ด้วยการกำหนดค่าเริ่มต้น - เพียงแค่เรียกใช้pkexec commandและทำงานได้ การกำหนดค่าอยู่ในไฟล์/usr/share/polkit-1/actions/org.freedesktop.policykit.policyที่ติดตั้งโดยแพ็คเกจที่มีชื่อ และจำเป็นต้องให้คุณเขียนรหัสผ่านของผู้ดูแลระบบเพียงครั้งเดียวเท่านั้น
pqnet

0

แทน

ผู้ดูแลระบบ su
แอปพลิเคชัน gksu ...

ฉันแนะนำให้คุณลองgksu -u admin anyapplicationทำทุกสิ่งโดยใช้gksuคำสั่งนั้น นอกจากนี้โปรดทราบว่าคุณต้องป้อนรหัสผ่านของผู้ใช้ที่ระบุไว้ในคำสั่งเช่นในกรณีนี้คุณต้องป้อนรหัสผ่านของผู้ดูแลระบบ


1
ในระบบ Ubuntu ที่ตั้งค่าไว้เป็นค่าเริ่มต้นหากnormaluserเรียกgksu -u admin anyapplicationใช้จะมีข้อความแจ้งให้ใส่ normaluserรหัสผ่านเพื่อadminใช้sudoแบ็กเอนด์เช่นเดียวกับที่gksu anyapplicationแจ้งให้ใส่normaluserรหัสผ่านเพื่อrootใช้sudoแบ็กเอนด์ ทั้งสองจะล้มเหลว reason-- เดียวกันไม่ได้มีอำนาจที่จะเรียกใช้คำสั่งกับnormaluser sudo
Eliah Kagan

-1

นี่คือคำสั่งให้ทำสิ่งนี้ให้สำเร็จ

gksu app-name

รันโดยไม่ต้องรันsuก่อน คุณจะต้องเรียกใช้คำสั่งด้านบนจากเซสชันผู้ใช้ปกติและแอปพลิเคชันจะทำงานเป็นรูท


1
มันใช้งานไม่ได้ - โปรดทราบว่าฉันกำลังพยายามจากเซสชันผู้ใช้ที่ไม่มีสิทธิ์
Boris

ข้อความแสดงข้อผิดพลาดคืออะไร
SirCharlo

ป้อนnormalรหัสผ่านผู้ใช้ของฉัน- ฉันได้รับข้อความ "เป็นไปไม่ได้ที่จะเปิดตัวในฐานะผู้ใช้รูท"
Boris

ป้อนsuperuser/adminรหัสผ่านของฉัน- ฉันได้รับข้อความ "รหัสผ่านไม่ถูกต้องลองอีกครั้ง"
Boris

-1

คุณควรใช้:

gksudo AppName

สิ่งนี้จะแสดงคำขอรหัสผ่านแบบกราฟิกเป็นครั้งแรก (รหัสผ่านของผู้ใช้ของคุณ) จากนั้นเริ่มแอป GUI เป็นรูท (ฉันเพิ่งลองทำเช่นนั้นจริง ๆ แล้วสิ่งที่ตลก: ฉันลองgksu AppNameทันทีหลังจากนั้น น่าจะเป็นเพราะคำนำหน้า "gk" แนะนำดังนั้นฉันไม่แน่ใจว่าปัญหาของคุณจะอยู่ที่ใด)


1
มันทำงานได้ในกรณีของคุณเพราะคุณได้ลองจากเซสชั่นผู้ดูแลระบบที่มีสิทธิ์ sudo สิ่งที่เกี่ยวกับจากเซสชันผู้ใช้ที่ไม่ใช่ผู้ดูแลระบบโดยไม่มี sudo ใช่ไหม
บอริส

ฉันใช้ gksudo จากหน้าต่างเทอร์มินัลปกติกับผู้ใช้ที่ไม่ใช่ผู้ดูแลระบบ (ผู้ใช้ของฉันเอง) คุณถูกต้องแล้วอย่างไรก็ตามสำหรับการลองครั้งที่สองเนื่องจากฉันยังมี sudo perms อยู่ในขณะนั้น แต่ปัญหาของ Boris นั้นแตกต่างออกไป: แอปของเขาไม่สามารถเชื่อมต่อกับ X ได้ซึ่งในกรณีของฉันใช้งานได้ทั้งสองครั้ง อย่างที่คุณเห็นจากคำถามเดิมsudoในโหมดข้อความใช้งานได้สำหรับเขา
อิซซี่

-1

มีผู้ใช้ขั้นสูงเพียงคนเดียวเท่านั้นและนั่นคือรูท

ผู้ใช้ 1 คือผู้ดูแลระบบและมีสิทธิ์ sudo
ผู้ใช้ 2 ไม่ใช่ผู้ดูแลและไม่มีสิทธิ์ใน sudo

ลองเข้าสู่ระบบในฐานะผู้ใช้ 1 จากนั้นใช้คำสั่ง

gksudo app-name  

(แทนที่ชื่อแอปด้วยชื่อแอป)
หวังว่าจะช่วยได้ - แจ้งให้เราทราบ : o)

แก้ไข: ข้อมูลเพิ่มเติมตามที่ร้องขอ

หากเป็นเพียงคอมพิวเตอร์ของคุณการ
ใช้ผู้ใช้ 1 (ผู้ที่มีสิทธิ์ใช้งาน sudo)
จะไม่ต่างกับการใช้ผู้ใช้ 2 (ผู้ที่ไม่ได้รับอนุญาตให้ใช้งาน sudo)
ผู้ใช้ 1 มีสิทธิ์เช่นเดียวกับผู้ใช้ 2
ยกเว้นผู้ใช้ 1 จะใช้คำสั่งนำหน้าด้วย sudo และ / หรือให้รหัสผ่านเพื่ออนุญาตให้แอปพลิเคชันทำงานด้วยการรูตแบบไพรเวท
ความแตกต่างเพียงอย่างเดียวคือผู้ใช้ 2 ไม่สามารถเรียกใช้แอปในฐานะรูทได้

หวังว่าจะช่วยอธิบายให้คุณฟังหน่อย : o)


ขอบคุณสำหรับการชี้แจงระหว่างผู้ใช้ขั้นสูงและผู้ดูแลระบบฉันจะแก้ไขคำถามของฉัน คุณหมายถึงอะไร "บันทึกเป็นผู้ใช้ 1" => เปิดเซสชันด้วยผู้ใช้ 1? นั่นคือสิ่งที่ฉันต้องการหลีกเลี่ยง
บอริส

เพิ่มข้อมูลเพิ่มเติมเพื่อตอบตามที่ร้องขอ: o)
โครงการ Fernhill Linux

ภรรยาและลูก ๆ ของฉันใช้ user2 กับ autologin อยู่ด้วยดีดังนั้นฉันจึงไม่ชอบที่จะใช้ sudo กับผู้ใช้คนนั้น
บอริส

ฟังดูเหมือนความคิดที่ดี - ฉันมีลูกด้วยเช่นกัน o) คุณลองเข้าสู่ระบบในฐานะผู้ใช้ 1 และและใช้คำสั่งหรือไม่?
โครงการ Fernhill Linux เมื่อ

1
ใช่ฉันทำได้ แต่มันเจ็บปวดที่จะเปลี่ยนเซสชันผู้ใช้ ฉันมักจะต้องทำหลายครั้ง: ไปที่เซสชั่นผู้ดูแลระบบเพื่อกำหนดการตั้งค่าบางอย่างสลับไปที่เซสชันผู้ใช้ปกติเพื่อทดสอบและอีกครั้งและอีกครั้งมันดีมากที่สามารถทำเช่นนั้นได้ในเซสชั่นปกติ เวลาส่วนใหญ่ของฉันจัดการกับsu admin+ sudo ...ตัวอย่างsudo vi fileยกเว้นแอปพลิเคชันที่มี GUI
Boris
โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.