จะป้องกันผู้ใช้จากการล็อกอิน แต่อนุญาตให้“ su - user” ใน Linux ได้อย่างไร


93

คุณอนุญาตให้ผู้ใช้เข้าสู่ระบบโดยใช้ " su - ผู้ใช้ " แต่ป้องกันผู้ใช้จากการเข้าสู่ระบบในการใช้ SSH ได้อย่างไร?

ฉันพยายามที่จะตั้งค่าเปลือก/bin/falseแต่เมื่อฉันพยายามที่suจะไม่ทำงาน

มีหลายวิธีในการอนุญาตการเข้าสู่ระบบด้วยsuหรือไม่

SSH เป็นAllowUserทางไปหรือเปล่า? (ฉันจะทำสิ่งนี้ได้อย่างไรถ้าเป็นไปได้)

คำตอบ:


113

คุณสามารถใช้AllowUsers / AllowGroupsหากคุณมีผู้ใช้ / กลุ่มเพียงไม่กี่คนที่ได้รับอนุญาตให้เข้าสู่ระบบผ่าน ssh หรือDenyUsers / DenyGroupsหากคุณมีผู้ใช้ / กลุ่มเพียงไม่กี่คนที่ไม่ได้รับอนุญาตให้เข้าสู่ระบบ โปรดทราบว่านี่เป็นเพียงการ จำกัด การเข้าสู่ระบบผ่าน ssh, วิธีการเข้าสู่ระบบอื่น ๆ (console, ftp, ... ) ยังคงเป็นไป คุณต้องเพิ่มตัวเลือกเหล่านี้ในไฟล์/ etc / ssh / sshd_config ของคุณสำหรับการติดตั้ง ssh ส่วนใหญ่

หากคุณตั้งค่าล็อกอินเชลล์เป็น/ bin / falseคุณสามารถใช้su -s /bin/bash user(แทนที่/ bin / bashด้วยเชลล์ที่คุณเลือก)


ขอบคุณมากสำหรับทุกคน ฉันไม่ได้คาดหวังว่าจะได้รับ upvotes มากกว่า 2+ สำหรับคำถามของฉัน :) ฉันชอบ"su -s ... "สร้างมากและ console / ftp เป็นจุดที่ดี ฉันทำตามเหมือน "su -s" จริงๆ
NoozNooz42

3
เคล็ดลับ su -s เป็นทองคำ ฉันใช้มันตลอดเวลาสำหรับบัญชีระบบที่ฉันต้องการทดสอบสิทธิ์เช่น apache ไม่มีใคร ฯลฯ ฉันมักจะทำ su - user -s / bin / bash อาร์กิวเมนต์ที่เป็นทางเลือก - อาจถูกใช้เพื่อจัดเตรียมสภาพแวดล้อมที่คล้ายกับสิ่งที่ผู้ใช้คาดว่าจะมีเมื่อผู้ใช้เข้าสู่ระบบโดยตรง
dmourati

2
หากคุณต้องการโหลดตัวแปรสภาพแวดล้อม (เช่นจาก / etc / profile) ให้โหลดผ่านเส้นประพิเศษจะทำดังนี้:su - -s /bin/bash user
Leons

13

หากคุณยังต้องการให้ su ทำงานคุณสามารถใช้sudo -u [username]หรือส่งผ่าน-s /bin/bashไปยัง su เป็นเชลล์ชั่วคราว /etc/passwdพวกเขาทั้งสองจะทำเช่นเดียวกันในกรณีที่ไม่มีเปลือกใน


7

หากบัญชีไม่มีรหัสผ่าน ( ชื่อผู้ใช้ passwd -d ) พวกเขาไม่สามารถเข้าสู่ระบบแบบโต้ตอบ (คอนโซล, SSH, ฯลฯ ) หากพวกเขามีเปลือกที่ถูกต้องsuจะยังคงทำงานได้ โปรดสังเกตว่า "แบบโต้ตอบ" แม้ว่า; หากใครบางคนตัดสินใจที่จะตั้งค่า SSH keypair สำหรับบัญชีมันจะทำงานได้!


ผู้ใช้จำเป็นต้องมีเชลล์ที่ถูกต้องเป็น su หรือไม่? ฉันค่อนข้างมั่นใจว่าคุณยังอยู่ในเชลล์เดิมหลังจากคุณ su กับผู้ใช้อื่น ... คุณไม่ได้เข้าสู่ระบบในฐานะผู้ใช้รายอื่น ... ดังนั้นเพียงแค่ตั้งค่าเชลล์เป็น / dev / null อาจทำงานได้ เช่นกัน
Brian Postow

ใช่มันยังต้องการเชลล์ที่ถูกต้อง: [root @ localhost ~] # su daemon บัญชีนี้ไม่สามารถใช้งานได้ในขณะนี้ [root @ localhost ~] # su - daemon บัญชีนี้ไม่สามารถใช้งานได้ในขณะนี้ (ระบบ RHEL, เชลล์ของ daemon คือ / sbin / nologin)
astrostl

3

ใน sshd_config เพิ่มบรรทัด DenyUser [username]

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


1
นั่นควรจะเป็นDenyUsersด้วย 's'
David G

2

นอกจากสิ่งที่ถูกกล่าวถึงข้างต้น (ปิดใช้งานและ / หรือไม่ตั้งค่ารหัสผ่านผู้ใช้) โมดูล pam_access (ค้นหาหน้า man บน pam_access และ access.conf) สามารถใช้เพื่อควบคุมการเข้าสู่ระบบ


1

ตามที่คนอื่นพูด

DenyUser usernameหรือDenyGroup groupnameในsshd_configจะป้องกันการเข้าสู่ระบบ keypair / รหัสผ่านผ่าน ssh

แม้ว่าฉันมักจะทำสิ่งที่ชอบAllowGroup sshหรือบางสิ่งบางอย่างตามสายเหล่านั้นและเพิ่มคนที่ต้องการเข้าถึงกลุ่ม SSH อย่างชัดเจน

จากนั้นคุณสามารถทำตามที่คนอื่นพูด: passwd -d usernameเพื่อล้างรหัสผ่านผู้ใช้ดังนั้นพวกเขาจึงไม่สามารถเข้าสู่ระบบที่คอนโซลหรือวิธีอื่น หรือดีกว่าที่ยังไม่passwd -l username'ล็อค' บัญชี เป็นไปได้ที่ ssh จะปฏิเสธการเข้าถึงบัญชีที่ถูกล็อคแม้จะมีกุญแจ แต่ฉันไม่ได้เป็นบวก


1
ที่จริงแล้ว ssh จะอนุญาตให้คุณเข้าสู่ระบบโดยใช้การรับรองความถูกต้องของกุญแจแม้ว่ารหัสผ่านของบัญชีจะถูกล็อค
Richard Holloway

1

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


1

แก้ไข / etc / shadow โดยเพิ่ม! ไปที่จุดเริ่มต้นของแฮรหัสผ่าน

username:!<hash>:#####:#:#####:#:::

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


0

อย่าระบุรหัสผ่านสำหรับผู้ใช้ที่ไม่ได้รับอนุญาตให้เข้าสู่ระบบหรือลบมัน

# passwd -d myuser

0

สมมติว่าคุณต้องการให้ผู้ใช้ su จากบัญชีของ root และปิดการใช้งานการเข้าถึงอื่น ๆ ทั้งหมด:

ใช้สิ่งนี้ (เรียกใช้เป็นรูท):

usermod -e 1 -L user

นี่เป็นการปิดการใช้งานการเข้าสู่ระบบรหัสผ่าน (เหมือนคำตอบอื่น ๆ อีกมากมายที่แนะนำ) แต่มันก็หมดอายุบัญชีด้วย คุณไม่สามารถเข้าสู่บัญชีที่หมดอายุเช่นด้วยปุ่ม SSH คุณยังสามารถทำได้su userแม้ว่ามันจะแสดงการแจ้งเตือนว่าบัญชีหมดอายุ


0

การรู้ว่ากลไกไหนดีที่สุดขึ้นอยู่กับข้อกำหนด หากคุณทราบข้อกำหนดคุณสามารถเลือกกลไกที่เหมาะสม คำตอบทั้งหมดข้างต้นสามารถใช้ได้กับข้อกำหนดบางชุด

คุณต้องการ จำกัด การเข้าถึง SSH เท่านั้นหรือไม่ คุณต้องการการเข้าถึงสำหรับเมล์หรือ ssh หรือไม่? การเข้าถึงจากรูทเท่านั้นหรือ

su - userจะต้องใช้รหัสผ่านสำหรับผู้ใช้หากมีการเรียกใช้เป็นผู้ใช้อื่นที่ไม่ใช่รูท อย่างไรก็ตามsudo -u user -iไม่ต้องการรหัสผ่านสำหรับผู้ใช้

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