วิธีการให้สิทธิ์ผู้ใช้ขั้นสูงนานกว่าการใช้ sudo


25

มีวิธีที่ฉันสามารถทำให้sudoคำสั่งให้สิทธิ์ฉันนานกว่าเวลาเริ่มต้นหรือไม่

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


3
ดังนั้นไม่มีใครใช้suอีกแล้ว? เคย?
นาย Lister

9
@MrLister sudo -iและคุณมีรูตเชลล์พร้อมสำหรับทุกคนที่จะช่วยส่องเท้าในช่วงเวลาที่มีคนชอบ ...
Rmano

1
@DevRobot คุณมีแหล่งที่มาสำหรับสิ่งนั้นหรือไม่ ฉันคิดว่ามันยากที่จะเชื่อว่า Canonical จะลบคำสั่งที่สำคัญออกไปและฉันไม่สามารถพบสิ่งใดใน google
DJMcMayhem

9
@DevRobot suต้องการรูทเพื่อใช้รหัสผ่าน ตามค่าเริ่มต้นผู้ใช้รูทของ Ubuntu ไม่มีรหัสผ่าน ดังนั้นคุณไม่สามารถsuรูต suทำงานตามที่ตั้งใจไว้ที่นี่ ลองกับผู้ใช้ที่มีรหัสผ่าน
muru

3
@muru sudo suทำงานได้ดีแม้ว่าจะทำซ้ำเล็กน้อย
coteyr

คำตอบ:


27

พฤติกรรมของsudoมีการกำหนดค่าใน/etc/sudoersไฟล์ มีtimestamp_timeoutตัวเลือกที่รับผิดชอบในการ reprompting ผู้ใช้รหัสผ่านหลังจากระยะเวลาที่กำหนด

จากมนุษย์ sudoers

timestamp_timeout
                       Number of minutes that can elapse before sudo will ask
                       for a passwd again.  The timeout may include a frac‐
                       tional component if minute granularity is insufficient,
                       for example 2.5.  The default is 15.  Set this to 0 to
                       always prompt for a password.  If set to a value less
                       than 0 the user's time stamp will never expire.

หากต้องการแก้ไขการตั้งค่าให้ทำดังต่อไปนี้:

  1. ในการทำงานsudo visudoของเครื่อง visudoใช้สำหรับแก้ไข/etc/sudoersไฟล์โดยเฉพาะและโดยปกติแล้วจะใช้nanoโปรแกรมแก้ไขข้อความ
  2. Defaultsค้นหาสายที่เริ่มต้นด้วย เพิ่มบรรทัดต่อไปนี้

    Defaults        timestamp_timeout=x
    

    โดยที่ x คือจำนวนนาทีที่คุณต้องการระหว่าง reprompts

  3. บันทึกไฟล์ด้วยCtrl+O


12

จากman sudoers:

timestamp_timeout
                       Number of minutes that can elapse before sudo will ask
                       for a passwd again.  The timeout may include a frac‐
                       tional component if minute granularity is insufficient,
                       for example 2.5.  The default is 15.  Set this to 0 to
                       always prompt for a password.  If set to a value less
                       than 0 the user's time stamp will never expire.  This
                       can be used to allow users to create or delete their
                       own time stamps via “sudo -v” and “sudo -k” respec‐
                       tively.

อย่างที่คุณเห็นการหมดเวลาเริ่มต้นของsudoคือ 15 นาที /etc/sudoersคุณสามารถเปลี่ยนค่านี้ใน

คุณไม่ได้แก้ไขโดยตรง/etc/sudoersแทนที่จะใช้visudoเพื่อแก้ไข

จากman visudo:

     visudo edits the sudoers file in a safe fashion, analogous to vipw(8).
     visudo locks the sudoers file against multiple simultaneous edits, pro‐
     vides basic sanity checks, and checks for parse errors.  If the sudoers
     file is currently being edited you will receive a message to try again
     later.

ดังนั้นพิมพ์sudo visudoเทอร์มินัลซึ่งจะเปิด/etc/sudoersไฟล์ในnanotext-editor

มองหาบรรทัดนี้:

Defaults    env_reset

และเพิ่ม โดยที่Xคือเวลาที่คุณต้องการตั้งค่าในไม่กี่นาทีtimestamp_timeout=X

เพื่อเป็นตัวอย่าง:

Defaults    env_reset,timestamp_timeout=5

หากคุณระบุ 0 คุณจะถูกถามรหัสผ่านเสมอ หากคุณระบุค่าลบการหมดเวลาจะไม่หมดอายุ

เมื่อเสร็จแล้วบันทึกและออก

ดูRootSudoTimeout


เอาชนะฉันได้ 29 วินาที =)
Sergiy Kolodyazhnyy

1
คุณสบายดี -_- ขฉันอยู่บนแล็ปท็อป . . บางทีฉันต้องการกาแฟเพิ่ม
Sergiy Kolodyazhnyy

นอกจากนี้คุณยังสามารถตั้งค่าเช่น -1 ถึงการหมดเวลาได้ - หากคุณไม่ต้องการให้มีการถามรหัสผ่าน
MichałŻywiecki

8

ลองสิ่งนี้

  1. เรียกใช้คำสั่งต่อไปนี้ในเทอร์มินัล:

    sudo visudo
    
  2. เลื่อนลงไปที่บรรทัดที่มีลักษณะดังนี้:

    Defaults        env_reset
    
  3. เปลี่ยนเป็นตัวอย่างเช่น:

    Defaults        env_reset,timestamp_timeout=30
    

เปลี่ยน 30 เป็นเวลาเป็นนาทีที่คุณต้องการให้รอก่อนหมดเวลา คุณสามารถเปลี่ยนเป็น 0 ได้หากคุณต้องการให้มีการถามรหัสผ่านทุกครั้งที่คุณเรียกใช้ sudo หรือ -1 หากคุณไม่ต้องการให้มีการถามรหัสผ่านกดCtrl+ Xเพื่อสิ้นสุดการแก้ไข Y เพื่อบันทึกการเปลี่ยนแปลงและ Enter เพื่อออก

นี่คือแหล่งที่มา: http://lifehacker.com/make-sudo-sessions-last-longer-in-linux-1221545774


5

คุณสามารถแก้ไข/etc/sudoersไฟล์ (ด้วยsudo visudo: ระวัง) และเพิ่มบรรทัดที่ชอบ

Defaults:myname timestamp_timeout=15 

mynameรหัสผู้ใช้ของคุณอยู่ที่ไหน ค่าการหมดเวลาเป็นหน่วยนาที คุณสามารถใช้ค่า -1 เพื่อไม่มีวันหมดอายุจากนั้นพิมพ์sudo -kเพื่อฆ่าการตรวจสอบสิทธิ์ดังนั้นคุณต้องใช้รหัสผ่านอีกครั้ง

หรือคุณสามารถเพิ่มรายการเพื่อพูดคำสั่งเฉพาะไม่จำเป็นต้องใช้รหัสผ่านเลย


1
+1 สำหรับการกล่าวถึงsudo -kการทำให้การรับรองความถูกต้องที่แคชใช้ด้วยตนเองล้มเหลว
ผู้บัญชาการ Byte

5

ฉันไม่อยากจะเชื่อเลยว่าคำสั่งที่ง่ายที่สุด:

sudo -s

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


1
เหตุใดจึงลงคะแนนนี้
coteyr

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

1
@guntbert มีการบันทึกคำสั่งทุกรายการ แต่ในประวัติของผู้ใช้รูท
Oliver Friedrich

@BeowulfOF ไม่จำเป็น - ประวัติทุบตีเป็นสิ่งที่แตกต่างจากบันทึกระบบอย่างสมบูรณ์
guntbert

1
จริงๆ @guntbert ถ้าคุณใช้บันทึกการตรวจสอบเช่นนี้คุณมีปัญหาที่แตกต่างกัน
Oliver Friedrich

1

ทุกคำตอบอื่น ๆ sudoเพื่อให้ห่างไกลดูเหมือนจะศูนย์รอบเปลี่ยนหมดเวลาเริ่มต้นสำหรับระยะเวลาก่อนที่คุณจะต้องพิมพ์รหัสผ่านอีกครั้งกับ อย่างไรก็ตามหากคุณต้องการให้สามารถเรียกใช้คำสั่งในฐานะรูทโดยไม่ต้องทำทุกคำสั่งด้วยsudoคุณสามารถรับรูทเชลล์ด้วย:

sudo -i

หรือ

sudo bash

หรือ

sudo <your preferred shell here>

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

แน่นอนว่าด้วยพลังอันยิ่งใหญ่มาพร้อมความรับผิดชอบที่ยอดเยี่ยมอย่าทำสิ่งที่โง่เขลา ฯลฯ


1
ระวังให้ดีกับสิ่งนี้ คุณจะใช้รูทเชลล์
hmayag

4
ทำไม downvote นี้
coteyr

@hmayag ใช่ถ้าคุณเริ่มรูทเชลล์คุณจะต้องรันรูทเชลล์ ดังนั้นเหตุผลสำหรับการเตือนในตอนท้าย
reirab

@ceyeyr อาจเป็นเพราะเหตุผลเดียวกับคำตอบของ BeoWulf
guntbert

1

หลังจากเห็นคำถามมากเกินไปจากผู้ใช้ที่แก้ไขไฟล์กำหนดค่าและสับสนว่าทำไมการเปลี่ยนแปลงของพวกเขาจึงถูกเขียนทับหลังจากการอัปเกรดแพ็คเกจฉันจะทราบว่าหากคุณต้องการแก้ไขtimestamp_timeoutจะเป็นการดีกว่าถ้าคุณสร้างไฟล์/etc/sudoers.dแทน แก้ไข/etc/sudoersโดยตรง

ดังนั้นคุณควรทำ

sudo visudo -f /etc/sudoers.d/timeout

(ชื่อของไฟล์สามารถเป็นอะไรก็ได้ที่คุณต้องการตราบใดที่มันไม่มีจุด ( .) หรือลงท้ายด้วย tilde ( ~) แทนที่จะเปิด/etc/sudoersในตัวแก้ไขที่คุณเลือกมันจะเปิด/etc/sudoers.d/timeoutขึ้นตามปกติเป็นไฟล์เปล่าเนื่องจากไม่มีอยู่ ใส่ของคุณ

Defaults timestamp_timeout=X

ในนั้นและบันทึกตามปกติ จากนั้นหากมีเวอร์ชันใหม่/etc/sudoersออกมาคุณไม่จำเป็นต้องเลือกระหว่างการติดตั้งเวอร์ชันที่ใหม่กว่าหรือเก็บการเปลี่ยนแปลง - คุณจะมีทั้งสองอย่างโดยอัตโนมัติ


1

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

# Work as is with Bash 4.1.2(1)-release and later, this might require some adaptation for other shells
(while [ true ]; do sudo -v; sleep $((60*4)); done)&

โดยทั่วไปโค้ดก่อนหน้าจะรีเฟรช sudo token ทุก 4 นาทีผ่านกระบวนการที่เรียกใช้ในพื้นหลัง

แท้จริงแล้วตามsudoคู่มือ: "การหมดเวลาของรหัสผ่านเริ่มต้นสำหรับนโยบายความปลอดภัยของ sudoers คือ 5 นาที " ดังนั้นขึ้นอยู่กับนโยบายเฉพาะของระบบคุณอาจปรับแต่งจำนวนเวลาที่ลูปพาสหลับระหว่างสองรอบ

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