PermitRootLogin ใช้ UID หรือชื่อผู้ใช้หรือไม่


17

หน้าคนระบุว่า PermitRootLogin

ssh(1)ระบุว่ารากสามารถเข้าสู่ระบบโดยใช้

อย่างไรก็ตามมันไม่ชัดเจนว่าการตรวจสอบนี้เป็นไปตามชื่อผู้ใช้ ( "root") หรือ UID ( 0)

จะเกิดอะไรขึ้นถ้าเปลี่ยนชื่อบัญชีรูทเป็น"admin"? จะ"admin"สามารถเข้าสู่ระบบได้เมื่อPermitRootLogin=noใด

จะเกิดอะไรขึ้นถ้ามีสองบัญชีที่มี UID = 0 คือ"root"และ"admin"? ทั้งคู่จะสามารถเข้าสู่ระบบได้หรือไม่

คำตอบ:


16

ดูเหมือนว่าการตรวจสอบเสร็จสิ้นใน UID (ทดสอบแล้วOpenSSH_6.7p1 Debian-5+deb8u3, OpenSSL 1.0.1t 3 May 2016):

ตั้งค่า PermitRootLogin ปิด:

mtak@pdv1:~$ grep PermitRootLogin /etc/ssh/sshd_config
PermitRootLogin no

ตรวจสอบว่าชื่อผู้ใช้adminถูกสร้างด้วย UID 0:

mtak@pdv1:~$ sudo grep admin /etc/passwd
admin:x:0:0:Root User:/root:/bin/bash

ตรวจสอบให้แน่ใจว่าผู้ใช้สามารถใช้เพื่อเข้าสู่ระบบ:

mtak@pdv1:~$ su - admin
Password: 
root@pdv1:~# 

ตรวจสอบว่าเราสามารถเข้าสู่ระบบโดยใช้ SSH:

mtak@rubiks:~$ ssh admin@pdv1
admin@pdv1's password: 
Permission denied, please try again.

หากเราเปิดใช้งาน PermitRootLogin:

mtak@pdv1:~$ grep PermitRootLogin /etc/ssh/sshd_config
PermitRootLogin yes

และลองเข้าสู่ระบบ:

mtak@rubiks:~$ ssh admin@pdv1
admin@pdv1's password: 
Linux pdv1 4.4.8-1-pve #1 SMP Tue May 17 16:14:08 CEST 2016 x86_64
Last login: Wed Aug 24 12:05:28 2016 from xxx
root@pdv1:~# 

ที่น่าสนใจว่าแม้ว่า UID 0 จะมีชื่อผู้ดูแลระบบ แต่ก็ยังปรากฏroot@pdv1ในเชลล์
Dezza

1
@Dezza อาจเป็นไปได้ขึ้นอยู่กับบรรทัดคำสั่งที่ระบุไว้ใน / etc / passwd (เช่น: ค้นหารายการแรกที่มี UID = 0)
TripeHound

19

ฉันขอขอบคุณวิธีการของ @mtak ในคำตอบอื่น ๆ แต่คำตอบนั้นชัดเจนแม้ว่าจะไม่มีการทดลองนี้

มันขึ้นอยู่กับUID, ตามที่คุณเห็นในซอร์สโค้ดของ openssh:

if (authctxt->pw->pw_uid == 0 &&
            !auth_root_allowed(auth_method))
authenticated = 0;

นอกจากนี้ทุกวิธีการตรวจสอบจะแสดงสิ่งที่ชอบ

if (pw->pw_uid == 0 && options.permit_root_login != PERMIT_YES)
    ok = 0;

grepยิ่งไปกว่านั้นในรหัสคุณอาจสังเกตเห็นว่ามีstrcmp('root', pw->pw_name)หรือไม่มีทางเลือกถ้ามันจะเพียงพอสำหรับคุณ


คุณรู้ได้อย่างไรว่า sshdตรวจสอบ UID 0 คุณไม่ได้ใช้การโต้แย้งใด ๆ เพื่อสนับสนุนคำสั่งของคุณ
mtak

2
Unix กำหนด superuser ด้วย UID = 0 อีกตัวอย่างหนึ่งอาจจะเป็นรหัสที่มาopensshของ
Jakuje

เคอร์เนลทำ แต่คุณคิดว่า OpenSSH ก็ทำได้เช่นกัน ตัวอย่างเช่นการรับรองความถูกต้องเบื้องต้นของ Apache ไม่อนุญาตให้เข้าสู่ระบบด้วยเช่นกันใช่ไหม ขอบคุณสำหรับลิงค์ฉันได้แก้ไขคำตอบของคุณเพื่อรวมไว้
mtak

1
ถ้ามันจะทำอย่างอื่นมันจะเป็นความเสี่ยงด้านความปลอดภัยที่อาจเกิดขึ้น
Jakuje

3
@Bakuriu และทำไมมันจะสร้างpwบริบทจากสิ่งอื่น opensshรหัสเปิดแหล่งที่มาและผู้อ่านที่สนใจสามารถไปถึงโค้ดทั้งหมด สิ่งปลูกสร้างที่คล้ายกันนี้มีรหัสทั่วทุกวิธีการตรวจสอบความถูกต้อง ถ้าคุณgrepผ่านรหัสคุณจะไม่พบstrcmp('root', pw->pw_name)ว่ามันจะทำให้มันน่าเชื่อถือมากขึ้นสำหรับคุณ
Jakuje
โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.