ความแตกต่างระหว่าง / sbin / nologin และ / bin / false คืออะไร


169

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

-rwxr-xr-x 1 root root  21K Feb  4 17:01 /bin/false
-rwxr-xr-x 1 root root 4.7K Mar  2 14:59 /sbin/nologin


เส้นทาง/bin/falseควรมีอยู่ทุกหนทุกแห่ง แต่ไม่ใช่/sbin/nologin: '/ sbin / nologin': ไม่มีไฟล์หรือไดเรกทอรีดังกล่าว ความคิดใด ๆ ว่าทำไมมันเป็น/usr/sbin/nologinแทน/sbin/nologinใน Debian และ Ubuntu?
baptx

4
ฉันอยากรู้ว่าทำไม / bin / false ใช้รหัส 21k เพื่อส่งคืนรหัส "1"! (และ / sbin / nologin ใช้เวลา 4.7k เท่านั้น)
Mark Stewart

1
@ MarkStewart สายเกินไป แต่คุณอาจต้องการอ่านเหตุใดจึงมีความจริงและเท็จขนาดใหญ่มาก และลมกรดสอนในการสร้างจริงๆ teensy ELF Executables สำหรับลินุกซ์
nxnev

1
@nxnev ใช่ไม่ได้คิดเกี่ยวกับค่าใช้จ่ายของเอลฟ์ และจาก IBM วันเก่าของฉันมีโปรแกรม IEFBR14 ที่เป็นคำสั่งประกอบ op-code อย่างง่าย ๆ : BR 14 - Branch เพื่อลงทะเบียน 14 ซึ่งจะยุติโปรแกรมด้วยรหัสส่งคืนที่ตั้งค่าเป็นอะไรก็ตามที่ลงทะเบียน 14!
Mark Stewart

คำตอบ:


198

เมื่อ/sbin/nologinตั้งค่าเป็นเชลล์หากผู้ใช้ที่มีเชลล์นั้นล็อกอินพวกเขาจะได้รับข้อความสุภาพว่า 'บัญชีนี้ไม่สามารถใช้งานได้ในขณะนี้' /etc/nologin.txtข้อความนี้สามารถเปลี่ยนแปลงได้ด้วยไฟล์

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

เมื่อดูที่nologinหน้า man ก็บอกว่ามันถูกสร้างขึ้นใน 4.4 BSD (ต้นปี 1990) ดังนั้นมันจึงfalseถูกสร้างขึ้นมานาน การใช้falseเปลือกเป็นอาจเป็นเพียงการดำเนินการจากวันแรก ๆ ของ UNIX

nologinเป็นตัวเลือกที่ใช้งานง่ายยิ่งขึ้นโดยมีข้อความที่ปรับแต่งให้กับผู้ใช้ที่พยายามเข้าสู่ระบบดังนั้นคุณจึงต้องการใช้สิ่งนั้นในทางทฤษฎี แต่ทั้งคู่nologinและfalseจะมีผลลัพธ์ที่เหมือนกันจากคนที่ไม่มีเชลล์และไม่สามารถ ssh ได้


10
/usr/sbin/nologinสำหรับการแจกแจงแบบเดเบียน
Diemo

3
อย่างน้อยการใช้งาน BSD ยังบันทึกการพยายามล็อกอินเพื่อ syslog ตามที่เห็นในopensource.apple.com/source/system_cmds/system_cmds-735/…ในขณะที่ / bin / false จะไม่บันทึกสิ่งใด
Sergiy Kolodyazhnyy

28

เซิร์ฟเวอร์ FTP บางตัวจะอนุญาตให้คุณเข้าถึง FTP ได้หากคุณมีเชลล์ที่ถูกต้อง /sbin/nologinถือได้ว่าเป็นเปลือกที่ถูกต้องในขณะที่/bin/falseไม่

(ฉันคิดว่า "ถูกต้อง" หมายถึงสถานะการออกเป็น 0 แต่/etc/shellsอาจเข้ามาก็ได้มันอาจขึ้นอยู่กับระบบซอฟต์แวร์ FTP และการกำหนดค่าของคุณ)


1
ใช่ว่าอาจเป็นส่วนหนึ่งของโปรแกรม FTP โดยใช้แพมและแพมซึ่งใช้ pam_shells /etc/shellsที่คุณกล่าวว่าการตรวจสอบ แค่เดา ​​... ฉันอาจจะผิด
xenoterracide

4
ฉันเพิ่งตรวจสอบทั้ง Ubuntu 8.04 และ 14.04 คำสั่ง nologin ออกจากด้วยสถานะ 1 คล้ายกับ false และไม่มีจริง, เท็จหรือ nologin รวมอยู่ใน / etc / shells หากพวกเขาเป็นผู้ใช้สามารถใช้ chsh เพื่อเลือกเปลือกและล็อคตัวเองออกจากบัญชีของเขา
penguin359

12

/bin/falseคือคำสั่งระบบที่ใช้ทุกเวลาที่คุณต้องการส่งคำสั่งไปยังโปรแกรมที่ไม่ควรทำอะไรมากไปกว่าการออกพร้อมข้อผิดพลาด /bin/trueมันเป็นสหายไป ทั้งสองนี้เป็นยูทิลิตี้ POSIX ที่เก่ามากและมาตรฐานและไม่สร้างเอาต์พุตใด ๆ ตามคำจำกัดความ จริงบางครั้งใช้สำหรับเชลล์สคริปต์ที่ควรวนซ้ำไม่ จำกัด เช่น:

while true; do
    ...
    # Waste time
    if [ $wasted_time -gt 100000 ]; then
        exit 0
    fi
    ...
done

/usr/sbin/nologinได้รับการออกแบบมาโดยเฉพาะเพื่อแทนที่เชลล์และสร้างเอาต์พุตบ่นคุณไม่สามารถเข้าสู่ระบบได้ ก่อนที่มันจะมีอยู่มันเป็นเรื่องธรรมดาที่จะใช้/bin/falseสำหรับผู้ใช้หลอกตา แต่อาจสับสนเพราะผู้ใช้ไม่รู้ว่าทำไมพวกเขาถึงถูกเตะ


4
ที่น่าสังเกตว่า/bin/trueและ/bin/falseไม่ได้เสมอสิ่งที่คุณจะได้รับในสคริปต์เปลือก ในzsh trueและfalseเป็นแบบบิวด์อินโดยbashใช้/bin/*รุ่น
xenoterracide

4

บนเครื่องของฉันnologinจะแสดงข้อความเดียวกันเสมอในภาษาอังกฤษโดยไม่คำนึงถึงข้อโต้แย้ง /bin/falseตอบสนองต่อ--versionและในภาษาที่ระบุโดย--help $LC_CTYPEนอกเหนือจากความแตกต่างเครื่องสำอางเหล่านี้พวกเขามีผลเช่นเดียวกัน

การใช้งานnologinได้ดีจะดีกว่าถ้ามันใช้ในบัญชีของคนจริงที่พูดภาษาอังกฤษ ความปลอดภัยฉลาดไม่มีความแตกต่าง


4
ดูเหมือนว่าอาจfalseจะมากกว่าสำหรับบัญชีระบบที่ไม่มีผู้ใช้จริงและnologinสำหรับบัญชีที่ถูกปิดใช้งาน
xenoterracide

1
ระบบปฏิบัติการของคุณคืออะไร? nologinรุ่นCentos ไม่มีข้อโต้แย้ง แต่สามารถอ่านข้อความ/etc/nologin.txtได้
Alexander Gonchiy

3

/ bin / false งานเดียวคือออกด้วยรหัสออกที่ไม่เป็นศูนย์

ลองที่บรรทัดคำสั่ง:

$:> /bin/false
$:> echo $?
1
$:>

บางสถาบันใช้ / bin / false ในฟิลด์เชลล์ของไฟล์รหัสผ่าน หากผู้ใช้พยายามที่จะเข้าสู่ระบบเปลือกเป็น / bin / เท็จดังนั้นพวกเขาจะออกทันที


2

บนลินุกซ์/sbin/nologinมาจากutil ลินุกซ์โครงการในขณะที่/bin/falseเป็นส่วนหนึ่งของGNU coreutils พวกเขาให้บริการบทบาทที่แตกต่างกันและ nologin มีตัวเลือกในการพิมพ์ข้อความสำหรับคนที่มีมันเป็นเปลือกของพวกเขาที่กำลังเข้าสู่ระบบคำสั่ง linux มาจาก BSD ที่พวกเขาดูเหมือนจะมีประวัติอันยาวนานของการแตกต่างกัน FreeBSD falseจะส่งกลับ 1ในขณะที่การnologinตรวจสอบเพื่อให้แน่ใจว่ามันกำลังทำงานอยู่บน TTY และส่งข้อความไปยัง syslog ในระหว่างการพยายามเข้าสู่ระบบ รุ่นลินุกซ์นั้นซับซ้อนกว่าเล็กน้อย ( falseทำเรื่องสนุก ๆ ทุกประเภทด้วยความเป็นสากลสำหรับผลลัพธ์ของ - ช่วยฉันถือว่า) แต่โดยพื้นฐานแล้วทำแบบเดียวกัน


1

อาจเป็นโปรแกรมเดียวกัน แต่มีความหมายต่างกัน ชื่อโปรแกรมบอกทุกอย่าง

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

-4

ทั้งสองทำงานมากหรือน้อยเหมือนกัน แต่/bin/falseมีประโยชน์สำหรับผู้ใช้ที่ไม่มีสิทธิพิเศษ ในทางกลับกัน/sbin/nologinสำหรับผู้ใช้ที่ได้รับสิทธิพิเศษ


4
โอ้คุณสรุปได้อย่างไร?
fpmurphy

/etc/passwdน่าจะเป็นที่เขาได้มองเข้าไปใน ฉันเพิ่งได้ดู/etc/passwdการยืด Debian ที่ติดตั้งใหม่ ในกล่องนี้บัญชีระบบเกือบทั้งหมด (รหัสผู้ใช้ <1000) มี/usr/sbin/nologinเป็นเชลล์โดยมีข้อยกเว้นเล็กน้อย โปรดทราบว่าฉันไม่เห็นด้วยกับคำตอบของ @ pythondetective ฉันแค่คาดเดาสิ่งที่อาจนำเขาไปสู่ข้อสรุปนี้ แม้ว่าความคิดเห็นของฉันจะสายไปหน่อย
Binarus

ไม่! เชลล์ล็อกอินเริ่มต้นนั้นไม่เหมือนกับสิทธิพิเศษ
MUY เบลเยี่ยม

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