วิธีการเรียกใช้คำสั่งในฐานะผู้ใช้ที่ปิดใช้งานการเข้าสู่ระบบ


21

ฉันกำลังพยายามใช้คำสั่ง su เพื่อเรียกใช้แอปพลิเคชันในฐานะผู้ใช้รายอื่น

ในกรณีนี้ฉันพยายามเรียกใช้ irssi

blah@ubuntu: su - [username] irssi
(enter password)

blah@ubuntu:
(nothing happens)

blah@ubuntu: su - [username] -c irssi
(nothing)

ฉันรัน gksu และตั้งค่าพารามิเตอร์เดียวกันและใช้งานได้และไม่ขอรหัสผ่านผู้ใช้ ปัญหาคืออะไร และฉันจะแก้มันได้อย่างไร

ฉันควรทราบว่าผู้ใช้ถูกสร้างขึ้นเช่นนี้

adduser --system --disabled-login [username]

ถ้ามันสร้างความแตกต่าง .... ถอนหายใจ


คุณไม่ลืมแฟล็ก -c เพื่อเรียกใช้ irssi? (su -c irssi)
eephyne

พยายามเช่นกัน ... ลองพันสิ่ง ... ทำไมจึงยากที่จะ runas WTF นั่นเป็นสิ่งที่หน้าคนต้องการ ... แต่ไม่มีอะไรเกิดขึ้น grrrr
user123361

เป็นไปได้ไหมว่าirssiมีปัญหาและคำสั่ง su ทำงานได้?
Nanne

มี ´[ชื่อผู้ใช้]´ สิทธิที่เหมาะสมในการเรียกใช้ irssi หรือไม่
Doka

คำตอบ:


28

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

มีปัญหาหลาย ๆ su - irssiที่มีคำสั่งที่มี

คำสั่งนี้จะพยายามที่จะเริ่มต้นเปลือกเป็นเจ้าของโดยผู้ใช้ที่ชื่อirssi

มันจะล้มเหลวถ้า:

  • ไม่มีirssiผู้ใช้
  • irssiบัญชีของผู้ใช้ถูกปิดใช้งาน
  • irssiบัญชีของผู้ใช้ถูกปิดใช้งานสำหรับการเข้าสู่ระบบแบบโต้ตอบ บางครั้งบัญชีได้รับอนุญาตให้ใช้บริการเช่น FTP /bin/falseแต่ห้ามไม่ให้เข้าสู่ระบบตามปกติโดยการตั้งค่าเปลือกของพวกเขากับสิ่งที่ลาออกทันทีเช่น จากนั้นเข้าสู่ระบบจะสิ้นสุดลงทันทีโดยไม่มีข้อความ
  • รหัสผ่านที่คุณป้อนไม่ถูกต้องสำหรับirssiผู้ใช้

การ-ตั้งค่าสถานะทำให้เชลล์ทำการจำลองเชลล์ล็อกอินเริ่มต้นนั่นคือดังนั้นจึงเหมือนกับการเข้าสู่ระบบเป็นirssiอย่างมาก หากไม่มี-แฟล็กหากsuคำสั่งประสบความสำเร็จคุณจะยังคงได้รับเชลล์เป็นเจ้าของirssiแต่ตัวแปรสภาพแวดล้อมเช่นHOMEนั้นจะไม่เปลี่ยนแปลง

หากคุณต้องการเรียกใช้โปรแกรมที่เรียกว่า irssiคุณต้องเรียกใช้suแตกต่างกัน:

su username - -c irssi

หากคุณออกไปมันก็เหมือนกับ - มันพยายามที่จะเรียกใช้คำสั่งเป็นรูต-c username-c root

หรือคุณสามารถเริ่มเชลล์แล้วเรียกใช้คำสั่ง :

  1. เริ่มต้นเปลือกด้วยsu username -
  2. ในเชลล์ให้รันคำสั่ง ( irssi)
  3. exitถ้าคุณทำเสร็จแล้วออกจากเปลือกโดยการเรียกใช้

กำลังเรียกใช้คำสั่งเป็น root

หากคุณต้องการที่จะทำงานirssiเป็นroot, suไม่ได้เป็นวิธีที่จะทำมัน เข้าสู่ระบบรากจะถูกยกเลิกโดยปริยายบน Ubuntu และมีเพียงไม่ค่อยเหตุผลใด ๆ อีกครั้งช่วยให้พวกเขา หากคุณได้เปิดใช้งานrootการเข้าสู่ระบบแล้วคุณควรจะสามารถที่จะใช้จะกลายเป็นsu rootเหตุผลก็ไม่จำเป็นที่จะช่วยให้การrootบัญชีคือว่าไม่ว่าจะเป็นหรือไม่ที่คุณทำคุณยังสามารถเรียกใช้คำสั่งเป็นกับrootsudo

เมื่อคุณเรียกใช้คำสั่งกับsudoคุณใส่ในของคุณรหัสผ่านไม่ได้รหัสผ่านของผู้ใช้ภายใต้ตัวตนของคุณต้องการคำสั่งในการวิ่ง ผู้ดูแลระบบเท่านั้นที่สามารถเรียกใช้คำสั่งโดยพลการเช่นเดียวrootกับsudo(เว้นแต่คุณsudoจะกำหนดค่าใหม่เพื่อให้ผู้อื่นทำเช่นนั้นแน่นอน) ดังนั้นผู้ใช้ที่ไม่ได้รับอนุญาตให้จัดการระบบจึงไม่ได้รับอนุญาตให้เรียกใช้คำสั่งเหมือนกับrootรหัสผ่านของตนเอง

เมื่อต้องการเรียกใช้irssiเป็นrootกับsudo:

sudo irssi

และคุณจะป้อนของคุณรหัสผ่านเมื่อได้รับแจ้งไม่ได้root's

ยกเว้นรหัสผ่านที่คุณป้อนสิ่งนี้จะเหมือนกับ:

su -c irssi

ยกเว้นsudoเวอร์ชันสามารถประสบความสำเร็จได้เนื่องจากไม่จำเป็นต้องrootเปิดใช้งานบัญชี

เช่นเดียวกับsuที่คุณสามารถใช้sudoเพื่อเรียกใช้คำสั่งเป็นอื่นที่ไม่ใช่rootผู้ใช้ เมื่อต้องการเรียกใช้irssiเป็นusernameกับsudo:

sudo -u username irssi

หากคุณต้องการsudo ทำตัวเหมือนsu -เคารพ -HOMEนั่นคือคุณต้องการใช้HOMEตัวแปรสภาพแวดล้อมของผู้ใช้เป้าหมายคุณสามารถรันsudoด้วยการ-Hตั้งค่าสถานะ:

sudo -H irssi
sudo -H -u username irssi

คุณสามารถเริ่มต้นเปลือกทั้งหมดด้วยเช่นคุณสามารถมีsudo suยกเว้นรหัสผ่านที่คุณใส่คำสั่งนี้มีผลเหมือนกับsu:

sudo -s

และคำสั่งนี้มีผลเช่นเดียวกับsu -:

sudo -i

( iย่อมาจากเชลล์ล็อกอินเริ่มต้น )

คุณสามารถเริ่มเชลล์ในฐานะผู้ใช้อื่นได้เช่นกัน:

sudo -u username -s
sudo -u username -i

อ่านเพิ่มเติมเกี่ยวกับ sudo

หากต้องการเรียนรู้เพิ่มเติมเกี่ยวกับsudoลองดูที่:

ทำไมถึงgksuทำงานเมื่อsuไม่ได้?

gksuอาจจะทำงานโดยการทำงานsudo

gksuเป็นส่วนหน้าสำหรับทั้งสอง และsu sudoใน Ubuntu มันเป็นค่าเริ่มต้นที่จะใช้sudo(เนื่องจากใน Ubuntu suมักจะไม่ได้ใช้สำหรับการเป็นrootและเป็นเพียงวิธีรองในการกลายเป็นอื่น ๆ ไม่ใช่rootผู้ใช้)

คุณสามารถทำให้gksuการใช้งานเป็นส่วนหน้าโดยใช้sugksu --su-mode

คุณสามารถหาว่าgksuอยู่ในsuโหมดหรือsudoโหมด (ถ้าคุณต้องการ) gksu-propertiesเปลี่ยนการตั้งค่านี้โดยการทำงาน นี่คือการตั้งค่าต่อผู้ใช้

เมื่อgksuอยู่ในโหมดมันจะทำงานเช่นเดียวกับsudogksudo

อ่านเพิ่มเติมเกี่ยวกับ gksu


การวิเคราะห์หลังการแก้ปัญหา

ในที่สุดคุณก็พบว่าคุณสามารถรันคำสั่งที่จำเป็นด้วย:

sudo -u username irssi

(ซึ่งเป็นเทคนิคที่ระบุไว้ข้างต้น)

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

  1. usernameบัญชีถูกสร้างขึ้นด้วย--disabled-loginธงซึ่งทำให้มันมีรหัสผ่านไม่ (และไม่มีวิธีการอื่นในการเข้าสู่ระบบ) มีรหัสผ่านไม่ไม่ได้หมายความว่ามันเป็นไปได้ที่จะเข้าสู่ระบบด้วยรหัสผ่านว่างเปล่า มันหมายความว่าไม่มีรหัสผ่านเพียงพอที่จะรับรองความถูกต้อง เมื่อใช้ร่วมกับการกำจัดวิธีการรับรองความถูกต้องแบบอื่นวิธีนี้usernameไม่สามารถรับรองความถูกต้องได้เลย

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

    เป็นไปได้ที่จะตั้งรหัสผ่านในบัญชีซึ่งจะลบสิ่งกีดขวางนี้เพื่อเข้าสู่ระบบ:

    sudo passwd username

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

    หากคุณต้องการปิดการใช้งานอีกครั้ง:

    sudo passwd -dl username

    ที่เกี่ยวข้อง: ปิดใช้งานrootบัญชีอีกครั้งหลังจากเปิดใช้งานชั่วคราว

  2. usernameบัญชีมี/bin/falseเป็นเปลือกเข้าสู่ระบบของมัน

    เมื่อเชลล์ชอบbashรันเป็นเชลล์ล็อกอินของคุณเชลล์จะตั้งค่าสภาวะแวดล้อมของคุณและให้พร้อมต์แบบโต้ตอบเพื่อควบคุมเครื่อง

    เมื่อ/bin/falseวิ่งบนมืออื่น ๆ มันไม่ทำอะไรเลยและรายงานความล้มเหลว ( /bin/trueไม่ทำอะไรเลยและรายงานความสำเร็จ)

    falseและtrueคำสั่งที่มีประโยชน์ในการเขียนสคริปต์และวัตถุประสงค์ในการทดสอบต่างๆ แต่ยังสำหรับการปิดการใช้งานบัญชีเพื่อที่ว่าเมื่อบันทึกคนที่อยู่ในเซสชั่นการเข้าสู่ระบบของพวกเขาสิ้นสุดลงทันที วิธีการที่ใช้รหัสผ่าน (หรือวิธีการอื่นในการตรวจสอบ) สามารถเปิดใช้งานและผู้คนสามารถเข้าสู่ระบบเพียงแค่ไม่ได้สำหรับการเข้าถึงเปลือก ตัวอย่างเช่นหากมีเซิร์ฟเวอร์ FTP พวกเขายังสามารถเข้าถึงบัญชีของตนผ่านทาง FTP หากมีเซิร์ฟเวอร์ SSH พวกเขาจะไม่สามารถรับเชลล์ผ่าน SSH แต่พวกเขายังคงสามารถใช้sftpและscpถ่ายโอนไฟล์ได้

    ตั้งแต่username's เปลือกเข้าสู่ระบบเป็น nonfunctional คำสั่งชอบ, , และอาจจะไม่ได้ทำงานsu usernamesu - usernamesudo -u username -ssudo -u username -i

    แต่คำสั่งที่ไม่ให้เชลล์เหมือนหรือยังใช้งานได้sudo -u username commandsu username -c 'command'

    เนื่องจากสามารถรันคำสั่งได้คุณสามารถเปลี่ยนเชลล์ล็อกอินของผู้ใช้เป็นฟังก์ชันได้:

    sudo chsh -s /bin/bash username

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

ที่นี่usernameทั้งคู่มีรหัสผ่านที่ปิดใช้งานและเชลล์ "พิการ" การไม่มีรหัสผ่านการทำงานใด ๆ จะช่วยป้องกันไม่ให้suโซลูชั่นที่ทำงานอยู่ทั้งหมดในขณะที่การไม่มีล็อกอินเชลล์แบบโต้ตอบที่ใช้งานได้ทำให้เชลล์ที่วางไข่แบบเชลล์ทำงานทั้งหมดยกเว้นการเรียกใช้เชลล์ด้วยตนเองเช่น)sudo -u username bash

sudo -u username command คือสิ่งที่เหลืออยู่


ขออภัยสำหรับการแก้ไขจำนวนมากในขณะที่คุณกำลังทำงานกับคำตอบของคุณ ว้าว. ขอขอบคุณ. เมื่อฉันทำ cat / etc / passwd ผู้ใช้ที่ฉันกำหนดค่าไว้มี / bin / false ในตอนท้าย - ดังนั้นนี่คือสิ่งที่ทำให้มันล้มเหลว? ความคิดใด ๆ ที่จะแก้ไขได้อย่างไร
user123361

ไม่ว่าด้วยเหตุผลใดก็ตามการใช้ชื่อผู้ใช้ sudo -u irssi ทำงานได้ดี ขอบคุณสำหรับคำตอบยาว ๆ ที่อธิบายไว้อย่างดี!
user123361

@ db ฉันดีใจที่ใช้งานได้! (Btw ไม่จำเป็นต้องขออภัยในการแก้ไขการแก้ไขเป็นสิ่งที่ดีมากและคำถามของคุณจะมีประโยชน์สำหรับคนอื่นเช่นกันเนื่องจากการแก้ไข) สำหรับคำถามอื่น ๆ ของคุณฉันได้แก้ไขคำตอบของฉัน รวมถึงส่วนการวิเคราะห์ในตอนท้าย
Eliah Kagan
โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.