ปิดใช้งานเชลล์ผู้ใช้เพื่อเหตุผลด้านความปลอดภัย


58

เรามีบัญชีผู้ใช้หลายบัญชีที่เราสร้างขึ้นสำหรับงานอัตโนมัติที่ต้องได้รับอนุญาตอย่างละเอียดเช่นการถ่ายโอนไฟล์ข้ามระบบการตรวจสอบและอื่น ๆ

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

คำตอบ:


63

คุณสามารถใช้usermodคำสั่งเพื่อเปลี่ยนเปลือกเข้าสู่ระบบของผู้ใช้

usermod -s /sbin/nologin myuser

หรือ

usermod -s /usr/sbin/nologin myuser

หากระบบปฏิบัติการของคุณไม่มี / sbin / nologin คุณสามารถตั้งค่าเชลล์เป็นคำสั่ง NOOP เช่น / bin / false:

usermod -s /bin/false myuser

1
/bin/false/bin/trueดูเหมือนว่าพบได้บ่อยกว่า
jw013

@ jw013 ฉันอัปเดตคำตอบของฉัน แต่ทั้งคู่ควรทำงานได้ดี
จอร์แดน

1
โปรดทราบว่าใน Debians nologinจริง ๆ จะพบได้ที่/usr/sbin/nologin
xebeche

นี่เป็นความคิดแรกของฉัน แต่น่าเสียดายที่การใช้งาน 'บัญชีผู้ใช้บางบัญชีถูกปิดใช้งานเมื่อตั้งค่าnologin
Javier

2
@ jw013 ที่จริงฉันมี/usr/local/bin/maybeที่/dev/urandomเลือกระหว่างทั้งสอง บางทีฉันควรใช้: D
hegez

21

การเปลี่ยนล็อกอินเชลล์ไม่จำเป็นต้องป้องกันผู้ใช้จากการพิสูจน์ตัวตน (ยกเว้นในบางบริการที่ตรวจสอบว่ามีการกล่าวถึงเชลล์ของผู้ใช้หรือไม่/etc/shells)

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

การเปลี่ยนเชลล์เป็น/bin/falseหรือ/usr/sbin/nologinจะป้องกันไม่ให้คำสั่งที่รันบนเซอร์วิสเหล่านั้นที่สามารถใช้เพื่อรันคำสั่ง (ล็อกอินคอนโซล, ssh, telnet, rlogin, rexec ... ) ดังนั้นส่งผลกระทบต่อการอนุญาตสำหรับบางบริการเท่านั้น

ตัวอย่างsshเช่นยังคงอนุญาตให้ทำการส่งต่อพอร์ต

passwd -lจะปิดการใช้งานการตรวจสอบรหัสผ่าน แต่ผู้ใช้อาจได้รับอนุญาตให้ใช้วิธีการตรวจสอบสิทธิ์อื่น ๆ (เช่นเดียวauthorized_keysกับssh)

ด้วยpamบน Linux อย่างน้อยคุณสามารถใช้pam_shellsโมดูลเพื่อ จำกัด การตรวจสอบหรือการอนุญาตให้ผู้ใช้ที่มีเปลือกที่ได้รับอนุญาต (ที่ระบุไว้ใน/etc/shells) สำหรับsshคุณจะต้องดำเนินการที่ระดับการอนุมัติ ( account) เช่นเดียวกับการรับรองความถูกต้องsshdใช้pam นอกเหนือจากวิธีการรับรองความถูกต้องอื่น ๆ (เช่นauthorized_keys) หรือคุณสามารถทำได้ด้วยsshd_configคำสั่งใน/etc/ssh/sshd_config(เช่นAllowUsersและเพื่อน ๆ )

ระวังแม้ว่าการเพิ่มข้อ จำกัด บางอย่างในการให้สิทธิ์ pam ทั่วโลกอาจป้องกันไม่ให้มีการเรียกใช้cronงานในฐานะผู้ใช้เหล่านั้น


ขอขอบคุณ. แล้วสิ่งที่คุณจะแนะนำให้ได้รับสคีมาต่อไปนี้: ฉันต้องการสร้างผู้ใช้ที่ต้องการเข้าถึงโฟลเดอร์บ้านของเขาผ่าน sftp หรือ sshfs แต่เขาจะต้องไม่สามารถเข้าสู่ระบบด้วยเชลล์ เป็นไปได้ไหม ฉันตกหลุมเหมือนโมดูล PAM อาจเป็นทางออกของ goto แต่ฉันไม่เข้าใจทั้งหมด:|
Stphane

@ Stphane คุณสามารถดู rssh - manpages.ubuntu.com/manpages/trusty/man1/rssh.1.html
Hart Simha

4

คุณแก้ไข/etc/passwdไฟล์และเปลี่ยนเชลล์ผู้ใช้จาก/bin/bashหรือ/bin/shเป็น/sbin/nologin


8
คำตอบนั้นถูกต้อง แต่ไม่ควรแนะนำให้ทำการแก้ไขด้วยมือ / etc / passwd
จอร์แดน

3
ทำไม? นี่คือสิ่งที่เราทำมานานตราบเท่าที่ฉันเป็นผู้ดูแลระบบมืออาชีพ (ประมาณ 20 ปีแล้ว) อันที่จริงแล้ว linux / unix distros ทั้งหมดไม่มีเครื่องมือสำหรับการแก้ไข / etc / passwd หรือ / etc / group .. ยกเว้นว่าคุณใช้สิ่งที่ชอบ Yast หรือ Smit ซึ่งเป็นเครื่องมือที่แคชการตั้งค่าและการเขียนทับมากเกินไป พวกเขาไม่มีอันตรายในการแก้ไขมือ
มาร์คโคเฮน

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

2
@ จอร์แดน: มีสิ่งvipwที่ป้องกันไม่ให้เกิดข้อผิดพลาดชนิดนั้น
eudoxos

4

passwd -l usernameครั้งแรกที่ปิดการใช้งานรหัสผ่านที่ใช้

โปรดทราบด้วยในmanหน้าpasswdสำหรับตัวเลือก-l:

   -l, --lock
       Lock the password of the named account. This option disables a password by changing it to a value which matches no
       possible encrypted value (it adds a ´!´ at the beginning of the password).

       Note that this does not disable the account. The user may still be able to login using another authentication token
       (e.g. an SSH key). To disable the account, administrators should use usermod --expiredate 1 (this set the account's
       expire date to Jan 2, 1970).

       Users with a locked password are not allowed to change their password.

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

1
ระบบอีเมลบางระบบอนุญาตให้ใช้กลไกรหัสผ่านของตนเอง ฉันใช้ Dovecot และ Exim ด้วยรหัสผ่านอีเมลเท่านั้น สิ่งนี้อนุญาตให้ใช้เว็บเมลบนเซิร์ฟเวอร์ฉันจะไม่ใช้รหัสผ่านระบบของฉัน โดเมนอีเมลเสมือนต้องใช้รหัสผ่านของตนเองเนื่องจากไม่ได้เชื่อมโยงกับระบบรหัสผ่านของเซิร์ฟเวอร์
BillThor

2

คุณสามารถใช้คำสั่ง chsh:

~# chsh myuser

ป้อนรายละเอียดเชลล์ใหม่เมื่อมีการร้องขอ:

Login Shell [/bin/sh]: /bin/nologin

หรือรุ่นที่สั้นกว่า:

~# chsh myuser -s /bin/nologin

0

เพื่อป้องกันผู้ใช้จากการเข้าสู่ระบบและแม้กระทั่งการตรวจสอบผ่าน ssh ที่เปิดใช้งานการส่งต่อพอร์ต (ตามที่อธิบายไว้ที่นี่ Stephane) ฉันจะแก้ไขผู้ใช้ให้คล้ายกับnobodyผู้ใช้ของระบบ:

  • การตรวจสอบรหัสผ่านที่ถูกบล็อกใน/etc/shadow(มี*หรือ!!ในช่องที่เหมาะสม)
  • เชลล์ที่ถูกปิดใช้งานใน/etc/passwd(เช่น/sbin/nologinในฟิลด์ที่เหมาะสม)
  • บ้าน dir แบบอ่านอย่างเดียวใน/etc/passwd(เช่น/ที่สนามที่เหมาะสม)
โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.