Sudoers เป็นเวลาหนึ่งวันต่อสัปดาห์หรือไม่


10

ฉันได้รับการอาสาจากหัวหน้าของฉันให้เป็นผู้ดูแลระบบสำหรับเซิร์ฟเวอร์การผลิตของเรา เขาขอให้ฉันกระชับความปลอดภัยเพื่อหลีกเลี่ยงอุบัติเหตุrm -f *ที่เกิดขึ้นเมื่อไม่นานมานี้

ตอนนี้เรามีผู้ใช้ 53 คนเข้าสู่เครื่องและเป็นฝันร้ายของการตรวจสอบ ฉันสงสัยว่าเป็นไปได้หรือไม่ที่จะอนุญาตให้ผู้ใช้เข้าถึงได้เฉพาะในวันที่ระบุในสัปดาห์

ตัวอย่างเช่นฉันสามารถให้ผู้ใช้ 'Joe' อนุญาตให้เข้าสู่ระบบในวันอังคารและวันพฤหัสบดีเท่านั้นและ 'Jane' เท่านั้นในวันอาทิตย์? สามารถetc/sudoersกำหนดเองเพื่ออนุญาตสิ่งนี้ได้หรือไม่

มีวิธีที่ดีกว่าแทนที่จะใช้ sudoers หรือไม่?


10
ฉันอยากจะแนะนำไม่อ่านหน้าคู่มือ ดู xkcd # 1343
user60684

3
ไม่ฉันกำลังบอกให้เขาไม่อ่านคู่มือเนื่องจากไม่สามารถอ่าน IMHO ได้ OP อาจพบคำตอบในหน้าคนอ่านถ้าอ่านง่ายกว่า
user60684

10
คุณสามารถทำสิ่งนี้ได้ แต่โปรดจำไว้ว่าผู้ใช้สามารถคืนสิทธิ์การเข้าถึง sudo ได้ตลอดเวลาไม่ว่าพวกเขาจะรูทอะไร
Nick Matteo

2
@ Mark0978 หากคุณรู้จักชื่อของ บริษัท คุณอาจจะหัวเราะหัวออกไป มันเป็นความอัปยศที่อนุญาต ... บนเซิร์ฟเวอร์ที่ใช้งานจริง
Chris

3
มันดูโง่ ๆ นั่นหมายความว่าบิลจะต้องรอช่วงเวลาเช้าวันพุธของเขาเพื่อให้ทำงานrm -rf /ได้
Michael Hampton

คำตอบ:


21

sudo ทำการพิสูจน์ตัวตนผ่าน PAM เหมือนทุกอย่างในกล่อง Linux

ดังนั้นคุณควรจะสามารถใช้pam_time.soการทำเช่นนี้

ตามค่าเริ่มต้นบน Debian อย่างน้อยโมดูลจะไม่เปิดใช้งาน คุณต้องเพิ่มบรรทัดที่มีลักษณะดังนี้:

account    requisite  pam_time.so

เพื่อ/etc/pam.d/sudoเปิดใช้งานสำหรับ sudo เท่านั้นหรือถึง/etc/pam.d/common-account(หลังจากบล็อก pam-auth-update) เพื่อเปิดใช้งานสำหรับโปรแกรมทั้งหมดในระบบ

จากนั้นแก้ไข/etc/security/time.confเพื่อกำหนดข้อ จำกัด ของคุณ sudoชื่อบริการที่ควรจะเป็น ตัวอย่างเช่นเพื่ออนุญาตให้ Fred ใช้sudoเฉพาะระหว่าง 15.00 น. ถึง 17.00 น. ในวันศุกร์:

sudo;*;fred;Fr1500-1700

(หมายเหตุ: ฉันไม่ได้ทดสอบสิ่งนี้)

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


PAM ดูเหมือนจะซับซ้อนในการใช้งาน แต่ยังอนุญาตให้มีการควบคุมที่เข้มงวดยิ่งขึ้นว่าใครทำอะไรและเมื่อใด ได้รับการยอมรับและโหวตขึ้น ขอบคุณ.
Chris

2
ฉันไม่คิดว่าการสนับสนุนเขาเป็นคำตอบที่ถูกต้อง IMAO คำตอบที่ถูกต้องสำหรับคำถามนี้คือ "RUN FOR THE HILLS !!!! 1! 1 !! 1! 1! 1"
o0 '

ใช้งานได้จริงหรือ ฉันสามารถควบคุมกลไกการล็อกอินต่าง ๆ เช่น "ล็อกอิน", "ssh", "gdm", "su" โดยใช้ pam_time.so แต่มันไม่ทำงานสำหรับ sudo ฉันต้องการที่จะป้องกันไม่ให้ใครกลายเป็นรูตด้วยกลไกปกตินอกเวลาทำการ (ฉันรู้ว่ามันไม่ได้เป็นกระสุนใครบางคนสามารถเตรียมเปลือกหอย setuid หรือลับๆล่วงหน้า แต่ฉันไม่คาดหวังว่าจะเกิดขึ้นในสถานการณ์เช่นนี้)
Sam Watkins

20

ฉันจะถามว่าทำไมผู้ใช้ 53 คนต้องการ sudo เพื่อทำงานประจำวัน - สำหรับผู้ใช้ส่วนใหญ่ (แม้แต่นักพัฒนา) sudo ควรเป็นข้อยกเว้นที่หายากไม่ใช่สิ่งที่ทำเป็นประจำที่บางคนจะเรียกใช้sudo rm -rf *คำสั่งอย่างตั้งใจ

คุณสามารถใช้การอนุญาตกลุ่ม (หรือ ACL ขั้นสูงกว่า) เพื่อให้ผู้ใช้สามารถเข้าถึงไฟล์ที่พวกเขาต้องการเพื่อให้งานของพวกเขาเสร็จสิ้นโดยอาจใช้สคริปต์หรือไบนารีที่ setuid หรือ sudo'ed เพื่อให้พวกเขาทำสิ่งต่าง ๆ เช่นบริการรีสตาร์ท (โปรดทราบว่าเป็นการยากที่จะเขียนสคริปต์ setuid / sudo ที่ปลอดภัยดังนั้นจึงเป็นเรื่องที่ต้องรักษาความซื่อสัตย์ของผู้คนเอาไว้เสมอ)

แม้ว่าคุณจะสามารถ จำกัด ผู้คนให้เข้าถึง sudo ได้หนึ่งวันต่อสัปดาห์ แต่ก็ยังมีคนที่เข้าถึง sudo ได้ 53 คนต่อสัปดาห์ดังนั้นมันจึงไม่ได้ช่วยแก้ไขปัญหาหลักของคุณ

สำหรับเรื่องนั้นฉันถามว่าผู้ใช้หลายคนต้องการเข้าถึงเซิร์ฟเวอร์ที่ใช้งานจริงหรือไม่ - คุณสามารถจัดส่งบันทึกหรือข้อมูล / ไฟล์ใด ๆ ที่พวกเขาต้องการไปยังเครื่องที่ไม่ได้ใช้งานจริงได้หรือไม่?


หรือคุณสามารถเผยแพร่การเข้าถึงไฟล์บันทึกบางอย่างที่พวกเขาอาจต้องใช้ซึ่งเป็นโปรแกรมติดตั้งชนิด SFTP
boatcoder

@Johnny งานส่วนใหญ่ที่ทำในโฮสต์นี้คือการสร้าง / แก้ไขและใช้งานเชลล์สคริปต์ vi/cp/mv/rmผู้ใช้ไม่ควรได้รับอนุญาตให้ เท่านั้นและcd moreไม่มีอะไรอีกแล้ว.
Chris

@Johnny ถ้าฉันตั้งค่า ACL ในไดเรกทอรีเป็นไฟล์ภายในไดเรกทอรีที่สืบทอดคุณสมบัติของ ACL โดยค่าเริ่มต้น?
Chris

@Chris ใช่ถ้าคุณตั้ง ACL เริ่มต้นสำหรับไดเรกทอรี
Michael Hampton

นี่ควรเป็นความเห็นไม่ใช่คำตอบ ไม่ว่าสถานการณ์ของ OP จะสมเหตุสมผลหรือไม่คนอื่น ๆ ก็มีความต้องการที่คล้ายกันในการล็อค "sudo" สำหรับผู้ใช้บางคนในบางช่วงเวลา
Sam Watkins

7

วิธีที่ง่ายที่สุดคือใช้เพื่อใช้ suders.d (ผ่าน inludedir) สำหรับการกำหนดค่าของคุณ จากนั้นคุณสามารถมีงาน cron ที่สามารถวางกฎสำหรับผู้ใช้แต่ละคนในไดเรกทอรีนั้นตามเวลาที่คุณต้องการ

#includedir directive สามารถใช้ใน / etc / sudoers เพื่อสร้างไดเรกทอรี sudo.d ที่คุณสามารถวางกฎ sudoers ไว้เป็นส่วนหนึ่งของกฎของคุณได้ตัวอย่างเช่น:

#includedir /etc/sudoers.d

sudo จะอ่านแต่ละไฟล์ใน /etc/sudoers.d โดยข้ามชื่อไฟล์ที่ลงท้ายด้วย '~' หรือมี '' ตัวอักษรเพื่อหลีกเลี่ยงการก่อให้เกิดปัญหากับตัวจัดการแพคเกจหรือไฟล์ชั่วคราว / สำรอง ไฟล์ถูกแยกวิเคราะห์ตามลำดับคำที่เรียงลำดับ นั่นคือ /etc/sudoers.d/01_first จะถูกแยกวิเคราะห์ก่อน /etc/sudoers.d/10_second โปรดทราบว่าเนื่องจากการเรียงลำดับเป็นศัพท์ไม่ใช่ตัวเลข /etc/sudoers.d/1_whoops จะถูกโหลดหลังจาก /etc/sudoers.d/10_second การใช้เลขศูนย์นำหน้าในชื่อไฟล์จำนวนเท่ากันสามารถใช้เพื่อหลีกเลี่ยงปัญหาดังกล่าวได้

โปรดทราบว่าไม่เหมือนกับไฟล์ที่รวมอยู่ใน #include visudo จะไม่แก้ไขไฟล์ในไดเรกทอรี #includedir เว้นแต่ไฟล์หนึ่งในนั้นมีข้อผิดพลาดทางไวยากรณ์ ยังคงเป็นไปได้ที่จะเรียกใช้ visudo ด้วยแฟล็ก tof เพื่อแก้ไขไฟล์โดยตรง

/etc/sudoers.d/joe จะปรากฏขึ้นเมื่อคุณต้องการให้ joe มีสิทธิ์เข้าถึงและคุณสามารถลบไฟล์ออกเพื่อให้เข้าถึงได้


1
ฉันมีปัญหากับไฟล์ sudoers เฉพาะของผู้ใช้: 'sudoers.user1' เป็นต้นคุณพูดถึง '~' และ '' ตัวละครแก้ปัญหาของฉัน ฉันดีใจที่คุณอ่านคู่มือ! ขอบคุณ.
ฮัน

0

คุณสามารถเพิ่ม crontab เพื่อให้ผู้ใช้อยู่ในกลุ่ม sudo จากนั้น crontab ที่สองจะนำผู้ใช้นั้นออก

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