สร้างผู้ใช้ SSH ใหม่บนเซิร์ฟเวอร์ Ubuntu


104

เพิ่งสร้างเซิร์ฟเวอร์ Ubuntu เสมือนใหม่และฉันอยู่ในขั้นตอนการทำให้แข็งตัวเพื่อการใช้งานจริง ฉันมีบัญชีรูท ฉันต้องการทำสิ่งต่อไปนี้:

  • สร้างผู้ใช้ใหม่ (โทรหาพวกเขาjimในช่วงเวลาที่เหลือ) ฉันต้องการให้พวกเขามี/home/ไดเรกทอรี
  • ให้jimการเข้าถึง SSH
  • อนุญาตให้jimเพื่อsuให้ราก แต่ไม่ดำเนินการsudoการดำเนินงาน
  • ปิดการเข้าถึง SSH รูท
  • ย้าย SSHd ออกไปที่พอร์ตที่ไม่ได้มาตรฐานเพื่อช่วยหยุดการโจมตีที่ดุร้าย

ปัญหาของฉันอยู่กับสองรายการแรก ฉันพบแล้วuseraddแต่ด้วยเหตุผลบางอย่างฉันไม่สามารถเข้าสู่ระบบในฐานะผู้ใช้ที่สร้างขึ้นด้วย SSH ฉันต้องเอาชนะ SSHd เพื่ออนุญาตหรือไม่


Hi! ฉันสามารถช่วยคุณในเซิร์ฟเวอร์ฉันไม่ทราบว่าสิ่งที่เป็นปัญหาของคุณกับ SSH เพราะสำหรับฉันด้วยการกำหนดค่าเริ่มต้นไม่เคยปฏิเสธการเชื่อมต่อของฉัน คุณอาจเห็นman 5 nologinสิ่งนี้เขียนว่าหาก / etc / nologin มีอยู่คุณสามารถล็อกอินด้วย root เท่านั้น ลองเข้าสู่ระบบตามปกติแล้วเขียนผลลัพธ์
antivirtel

เปลือกของผู้ใช้คืออะไร มัน / bin / bash หรือไม่ ตรวจสอบว่าใน / etc / รหัสผ่าน ตรวจสอบให้แน่ใจว่าไม่ใช่ / dev / null หรือ / bin / false
LFC_fan

ใช่ LFC_fan หรือ / etc / nologin ด้วย ใช้ (sudo) cat / etc / passwd | grep jim
antivirtel

1
@B Roland ฉันมี/etc/nologinไฟล์ แต่ว่างเปล่า ฉันลบแล้วเริ่มใหม่ ssh แต่ก็ยังตอบสนองPermission denied, please try again.เมื่อฉันพยายามเข้าสู่ระบบ
Oli

@LFC_fan it / bin / bash
Oli

คำตอบ:


99

แก้ไข (เป็น /etc/ssh/sshd_configroot) ผนวกสิ่งต่อไปนี้เข้าด้วยกัน:

Port 1234
PermitRootLogin no
AllowUsers jim

Port 1234ทำให้ SSH เพื่อฟังบนพอร์ต 1234 คุณสามารถใช้พอร์ตใด ๆ ที่ไม่ได้ใช้ตั้งแต่ 1 ถึง 65535 แนะนำให้เลือกพอร์ตที่มีสิทธิพิเศษ (พอร์ต 1-1024) ซึ่งรูทสามารถใช้ได้โดยรูทเท่านั้น หาก SSH daemon ของคุณหยุดทำงานด้วยเหตุผลบางอย่างแอปพลิเคชันปลอมจะไม่สามารถดักการเชื่อมต่อได้

PermitRootLogin ไม่อนุญาตให้ล็อกอินรูทโดยตรง

AllowUsers jimอนุญาตให้ผู้ใช้jimเข้าสู่ระบบผ่าน SSH หากคุณไม่จำเป็นต้องลงชื่อเข้าใช้จากทุกที่คุณสามารถทำให้สิ่งนี้ปลอดภัยยิ่งขึ้นโดย จำกัด jim เป็นที่อยู่ IP (แทนที่ 1.2.3.4 ด้วยที่อยู่ IP จริงของคุณ):

AllowUsers jim@1.2.3.4

การเปลี่ยนแปลงไปยังไฟล์การกำหนดค่า/etc/ssh/sshd_configจะไม่ถูกนำมาใช้ทันทีในการโหลดการกำหนดค่าใหม่ให้รัน:

sudo service ssh reload

10
+1: หมายเหตุ: คำแนะนำเหล่านี้ยังคงใช้ได้กับ Ubuntu รุ่นใหม่กว่า (เช่น 13.04) ถ้าคุณทำต้องการrootเข้าสู่ระบบ แต่ (บางทีคุณยังคงการตั้งค่าเซิร์ฟเวอร์) คุณต้องตั้งค่าPermitRootLoginไปyesและยังเพิ่มการroot AllowUsers
JRG-Developer

4
รหัสผ่านสำหรับผู้ใช้นี้คืออะไร
Wolfpack'08

VPS ของฉันมาพร้อมกับรหัสผ่านรูทสำหรับการเข้าสู่ระบบ SSH ที่พอร์ต 22 ต่อท้ายคำตอบกับ sshd_config ผลลัพธ์ในการรูตไม่สามารถเข้าสู่ระบบนี่เป็นเพราะฉันยังใช้พอร์ต 22 สำหรับจิมหรือมีเหตุผลอื่น ๆ ?
Wolfpack'08

1
@Lekensteyn ฉันพบว่าเพิ่งเพิ่มผู้ใช้ใหม่ไปยัง Ubuntu เองก็สร้างบัญชีผู้ใช้ ssh สำหรับผู้ใช้นั้น .... useradd -m -G sudo,adm -s /bin/bash mecharokและpasswd mecharok
Wolfpack'08

3
@ Wolfpack'08 ใช้AllowUsers username1,username2เพื่อ จำกัด การเข้าสู่ระบบ SSH ให้กับผู้ใช้เหล่านั้น ตรวจสอบว่าsshdมีการโหลดซ้ำ หากวิธีนี้ไม่ได้ผลโปรดสร้างคำถามใหม่
Lekensteyn

96

SSH เป็นคนพิถีพิถันมากเกี่ยวกับสิทธิ์ของไดเรคทอรีและไฟล์ ทำให้เเน่นอน:

  1. ไดเรกทอรี /home/username/.ssh มีสิทธิ์ "700" และเป็นของผู้ใช้ (ไม่ใช่รูท!)
  2. กระบวนการ / home / ชื่อผู้ใช้ / ssh / authorized_keys มีสิทธิ์ "600" และเป็นของผู้ใช้

คัดลอกกุญแจสาธารณะของคุณไปยังไฟล์ authorized_keys

sudo chown -R username:username /home/username/.ssh
sudo chmod 0700 /home/username/.ssh
sudo chmod 0600 /home/username/.ssh/authorized_keys

นอกจากนี้ไม่จำเป็นต้องเพิ่มผู้ใช้ / etc / SSH / ssh_config


1
ปัญหาของฉันถูก chown ฉันสร้าง~./sshเป็น root และไม่เคยให้สิทธิ์ผู้ใช้
Gerve

1
ปัญหาของฉันคือการที่ฉันได้พยายามที่จะใช้แทน/root/.ssh/authorized_keys /home/bob/.ssh/authorized_keys
Alex W

เราสามารถยืนยันได้: บน VPS ssh_configของเราโฮสติ้งไม่มีความจำเป็นที่จะแก้ไข การตั้งค่าไดเรกทอรีและไฟล์นั้นก็เพียงพอแล้ว
superjos

2
สำหรับฉันมันจะต้องเป็น chmod 755 / home/username/.ssh มิฉะนั้นมันจะไม่ทำงาน
Jim W

ง่ายต่อการเข้าสู่ระบบในฐานะผู้ใช้ (หรือsudo su --login {user}) และเรียกใช้ssh-keygen-> โฟลเดอร์ ".ssh" คีย์ + ใบรับรองและการอนุญาตเสร็จสมบูรณ์ เพียงสร้าง authorized_keys ตามคำแนะนำของคุณ
bshea

13

จะมีเงื่อนงำ/var/log/auth.logว่าทำไม SSH (หรือ PAM) ปฏิเสธความพยายามเข้าสู่ระบบ อาจพบเบาะแสเพิ่มเติมโดยใช้-vตัวเลือกกับไคลเอ็นต์ssh สถานการณ์ทั่วไปหลายประการบางคนกล่าวถึงในคำตอบอื่น ๆ :

  • บัญชีผู้ใช้ไม่มีรหัสผ่านหรือถูกปิดใช้งาน (ดูman passwdลองตั้งค่ารหัสผ่านใหม่หรือตรวจสอบเนื้อหาของ/etc/shadow)
  • /etc/ssh/sshd_configมีการกำหนดค่าที่จะไม่อนุญาตให้เข้าสู่ระบบ ( DenyUsers, AllowUsers, PasswordAuthentication, PubkeyAuthentication, UsePAMฯลฯ ให้ดูman sshd_config)
  • /etc/shellsเปลือกของผู้ใช้ที่ไม่ได้ระบุไว้ใน
  • ปัญหาที่เกิดขึ้นได้รับอนุญาตต่าง ๆ ในไดเรกทอรีหรือไฟล์ที่เกี่ยวข้องกับการดำเนินงาน SSH: /etc/ssh, /home/jim/.ssh, /home/jim/.ssh/*ฯลฯ

ฉันขอแนะนำให้ใช้adduser (แทนuseradd ) เพื่อเพิ่มผู้ใช้ใหม่ เป็นมิตรเล็กน้อยเกี่ยวกับการตั้งค่าบัญชีเริ่มต้นต่างๆ

ตราบใดที่ผู้ใช้ไม่ได้เป็นส่วนหนึ่งของadminกลุ่มพวกเขาจะไม่สามารถsudoถึงรูทได้ สำหรับพวกเขาที่จะใช้suคุณจะต้องตั้งค่ารหัสผ่านราก ( passwd root) หลังจากที่ผมขอแนะนำให้ตั้งค่าในPermitRootLogin=no/etc/ssh/sshd_config


ขอบคุณมากสำหรับคำตอบที่ดีโดยเฉพาะ "ผู้เพิ่ม" ช่วยได้มาก!
vishal.biyani

11

ฉันอาจจะผิด แต่ฉันมักจะต้องติดตั้งเซิร์ฟเวอร์ภูตก่อนที่ฉันจะสามารถเชื่อมต่อ (อย่างน้อยบนเดสก์ทอป) ssh ติดตั้งโดยค่าเริ่มต้น แต่นั่นเป็นเพียงลูกค้า

คำสั่งนี้ติดตั้งเซิร์ฟเวอร์

sudo apt-get install openssh-server

คุณสามารถเปลี่ยนพอร์ตและหยุดการล็อกอินรูทได้โดยการแก้ไข

/etc/ssh/sshd_config

สิ่งนี้ต้องการให้คุณรีสตาร์ทบริการ

sudo service ssh restart


นี่เป็นเซิร์ฟเวอร์เสมือน (VPS) ดังนั้น SSH จะถูกติดตั้งตามค่าเริ่มต้น มันเป็นอินเทอร์เฟซเดียวของฉันไปยังเซิร์ฟเวอร์ และคุณสามารถโหลดการกำหนดค่าผ่านทางsudo /etc/init.d/ssh reloadแทนได้ แต่ยังมีข้อมูลที่ดี
Oli

8

จิมจะไม่สามารถเข้าถึง SSH จนกว่าคุณจะตั้งรหัสผ่าน ในฐานะที่เป็นรากรัน:

grep -i "jim" /etc/shadow | awk -F':' '{ print $2 }'

หากคำสั่งนี้ส่งคืน "!" ตัวละครจากนั้นเข้าสู่ระบบถูกปิดการใช้งานสำหรับบัญชีนี้ การดำเนินการpasswd jimในฐานะรูทจะให้คุณใส่สตริงรหัสผ่านใหม่และยืนยันหลังจากที่คำสั่ง grep ด้านบนควรส่งคืนสตริงแฮชที่แสดงรหัสผ่านสำหรับ jim

ตรวจสอบให้แน่ใจด้วยว่าตรวจสอบว่า jim มีเชลล์ล็อกอินตั้งค่าเริ่มต้นและโฮมไดเร็กทอรีที่มีอยู่

โปรดทราบโพสต์ของ lekensteyn สำหรับข้อมูลเกี่ยวกับการแก้ไขการตั้งค่าเซิร์ฟเวอร์ SSH


"ถ้าคำสั่งนี้ส่งกลับอักขระ"! "การเข้าสู่ระบบจะถูกปิดการใช้งานสำหรับบัญชีนี้" โปรดทราบว่านี่ไม่ได้หมายความว่าคุณจะไม่สามารถ SSH; เฉพาะที่คุณไม่สามารถทำได้ด้วยรหัสผ่าน (เทียบกับรหัสสาธารณะของคุณ)
bfontaine

3

ในกรณีของฉันฉันมีกลุ่มที่ได้รับอนุญาตให้เข้าถึงและผู้ใช้ไม่ได้เป็นส่วนหนึ่งของมัน วิธีนี้แก้ไขได้สำหรับฉัน

ใช้ตัวอย่างด้านบนกับผู้ใช้jimและถือว่าเป็นสมาชิกของกลุ่มjimเนื่องจากเป็นกลุ่มเท่านั้น ( groupsคำสั่งปัญหาขณะที่ลงชื่อเข้าใช้jimเพื่อค้นหากลุ่มที่คุณเป็นส่วนหนึ่ง) ใน/etc/ssh/sshd_configไฟล์ของฉันฉันมีAllowGroups sshusersรายการและจำเป็นต้องเพิ่มjimในsshusersกลุ่ม ด้านล่างนี้เป็นวิธีการทำให้สำเร็จ:

usermod -a -G sshusers jim

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


1
คุณควรปรับปรุงคำตอบของคุณโดยอ้างอิงไปยังแหล่งที่อธิบายตัวอย่างของคุณได้ดีขึ้นหรือโดยการเพิ่มข้อมูลที่เกี่ยวข้องโดยอ้างอิงจากตัวอย่างของคำถามดั้งเดิมของ OP ตัวอย่างเช่นผู้ใช้ที่ระบุjimเป็นผู้ใช้จำลองเพื่อช่วยจัดเตรียมบริบท บทความที่นี่อธิบายได้ดี

0

อาจมีบางกรณีที่PasswordAuthenticationถูกปิดใช้งานโดยค่าเริ่มต้น

กรุณาตรวจสอบ/etc/ssh/sshd_configและให้แน่ใจว่าแอตทริบิวต์มีการตั้งค่าPasswordAuthenticationyes


0

@Lekensteyn ฉันไม่สามารถแสดงความคิดเห็นกับคำตอบของคำถามได้เพราะฉันไม่มีชื่อเสียง - แต่ฉันพยายามต่อท้าย

AllowUsers existingUser,newUser

ไปที่ไฟล์ / etc / ssh / sshd_config ของฉันและตอนนี้ฉันไม่สามารถ ssh ด้วยทั้ง userUser ที่มีอยู่หรือ newUser ของฉันได้อีกต่อไป


ฉันเข้าใจความเจ็บปวดของคุณ: DI มีปัญหาเดียวกันครั้งเดียว วิธีแก้ปัญหา: AllowUsers existingUser@* newUser@*
İsmail Atkurt
โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.