ค้นหาเว็บไซต์

วิธีจำกัดผู้ใช้ SFTP ไว้ที่โฮมไดเร็กทอรีโดยใช้ chroot Jail


ในบทช่วยสอนนี้ เราจะพูดถึงวิธีจำกัดผู้ใช้ SFTP ให้อยู่ในไดเร็กทอรีหลักหรือไดเร็กทอรีเฉพาะของตน หมายความว่าผู้ใช้สามารถเข้าถึงเฉพาะโฮมไดเร็กตอรี่ของตนเท่านั้น ไม่ใช่ทั้งระบบไฟล์

การจำกัดโฮมไดเร็กทอรีของผู้ใช้เป็นสิ่งสำคัญ โดยเฉพาะอย่างยิ่งในสภาพแวดล้อมเซิร์ฟเวอร์ที่ใช้ร่วมกัน ดังนั้นผู้ใช้ที่ไม่ได้รับอนุญาตจะไม่แอบดูไฟล์และโฟลเดอร์ของผู้ใช้รายอื่น

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

การอ่านที่แนะนำ: จำกัดการเข้าถึงของผู้ใช้ SSH ไปยังไดเร็กทอรีบางตัวโดยใช้ Chrooted Jail

วิธีที่ง่ายที่สุดในการดำเนินการนี้คือการสร้างสภาพแวดล้อมคุกแบบ chrooted สำหรับการเข้าถึง SFTP วิธีนี้จะเหมือนกันกับระบบปฏิบัติการ Unix/Linux ทั้งหมด เมื่อใช้สภาพแวดล้อมแบบ chrooted เราสามารถจำกัดผู้ใช้ให้อยู่ในไดเร็กทอรีหลักหรือไดเร็กทอรีเฉพาะได้

จำกัดผู้ใช้ไว้ที่โฮมไดเร็กทอรี

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

สร้างหรือแก้ไขผู้ใช้และกลุ่ม

ให้เราจำกัดผู้ใช้ที่มีอยู่ เช่น tecmint ไว้ที่โฮมไดเร็กตอรี่ของเขา/เธอที่ชื่อ /home/tecmint ในการทำเช่นนี้ คุณต้องสร้างกลุ่ม sftpgroup ใหม่โดยใช้คำสั่ง groupadd ดังที่แสดง:

groupadd sftpgroup

จากนั้น กำหนดผู้ใช้ 'tecmint' ให้กับกลุ่ม sftpgroup

usermod -G sftpgroup tecmint

คุณยังสามารถสร้างผู้ใช้ใหม่โดยใช้คำสั่ง useradd เช่น senthil และกำหนดผู้ใช้ให้กับกลุ่ม sftpusers

adduser senthil -g sftpgroup -s /sbin/nologin
passwd tecmint

แก้ไขไฟล์การกำหนดค่า SSH

เปิดและเพิ่มบรรทัดต่อไปนี้ในไฟล์การกำหนดค่า /etc/ssh/sshd_config

Subsystem sftp internal-sftp
 
   Match Group sftpgroup
   ChrootDirectory /home
   ForceCommand internal-sftp
   X11Forwarding no
   AllowTcpForwarding no

บันทึกและออกจากไฟล์ เริ่มบริการ sshd ใหม่เพื่อให้การเปลี่ยนแปลงใหม่มีผล

systemctl restart sshd
OR
service sshd restart

หากคุณ chroot ผู้ใช้หลายคนไปยังไดเรกทอรีเดียวกัน คุณควรเปลี่ยนการอนุญาตของโฮมไดเร็กตอรี่ของผู้ใช้แต่ละคน เพื่อป้องกันไม่ให้ผู้ใช้ทั้งหมดเรียกดูโฮมไดเร็กตอรี่ของผู้ใช้แต่ละราย

chmod 700 /home/tecmint

ตรวจสอบการเข้าสู่ระบบของผู้ใช้ SSH และ SFTP

ถึงเวลาตรวจสอบการเข้าสู่ระบบจากระบบภายในเครื่องแล้ว ลอง ssh ระบบรีโมตของคุณจากระบบโลคัลของคุณ

ssh [email 

ที่นี่,

  1. tecmint – ชื่อผู้ใช้ของระบบระยะไกล
  2. 192.168.1.150 – ที่อยู่ IP ของระบบระยะไกล
ผลลัพธ์ตัวอย่าง:
[email 's password: 
Could not chdir to home directory /home/tecmint: No such file or directory
This service allows sftp connections only.
Connection to 192.168.1.150 closed.

จากนั้น เข้าถึงระบบระยะไกลโดยใช้ SFTP

sftp [email 
ผลลัพธ์ตัวอย่าง:
[email 's password: 
Connected to 192.168.1.150.
sftp>

ให้เราตรวจสอบไดเร็กทอรีการทำงานปัจจุบัน:

sftp&gt pwd
Remote working directory: /

sftp&gt ls
tecmint  

ที่นี่ tecmint คือโฮมไดเร็กตอรี่ ซีดีไปที่ไดเร็กทอรี tecmint และสร้างไฟล์หรือโฟลเดอร์ตามที่คุณต้องการ

sftp&gt cd tecmint
Remote working directory: /

sftp&gt mkdir test
tecmint  

จำกัดผู้ใช้ให้อยู่ในไดเร็กทอรีเฉพาะ

ในตัวอย่างก่อนหน้านี้ เราจำกัดผู้ใช้ที่มีอยู่ให้อยู่ในโฮมไดเร็กตอรี่ ตอนนี้เราจะดูวิธี จำกัด ผู้ใช้ใหม่ให้อยู่ในไดเร็กทอรีที่กำหนดเอง

สร้างกลุ่มและผู้ใช้ใหม่

สร้างกลุ่มใหม่ sftpgroup

groupadd sftpgroup

จากนั้น สร้างไดเร็กทอรีสำหรับกลุ่ม SFTP และกำหนดสิทธิ์ให้กับผู้ใช้รูท

mkdir -p /sftpusers/chroot
chown root:root /sftpusers/chroot/

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

adduser tecmint -g sftpgroup -s /sbin/nologin
passwd tecmint
mkdir /sftpusers/chroot/tecmint
chown tecmint:sftpgroup /sftpusers/chroot/tecmint/
chmod 700 /sftpusers/chroot/tecmint/

กำหนดค่า SSH สำหรับการเข้าถึง SFTP

แก้ไขหรือเพิ่มบรรทัดต่อไปนี้ที่ท้ายไฟล์:

#Subsystem  	sftp	/usr/libexec/openssh/sftp-server
Subsystem sftp  internal-sftp
 
Match Group sftpgroup
   ChrootDirectory /sftpusers/chroot/
   ForceCommand internal-sftp
   X11Forwarding no
   AllowTcpForwarding no

บันทึกและออกจากไฟล์. เริ่มบริการ sshd ใหม่เพื่อให้การเปลี่ยนแปลงที่บันทึกไว้มีผล

systemctl restart sshd
OR
service sshd restart

เพียงเท่านี้ คุณสามารถตรวจสอบได้โดยลงชื่อเข้าใช้เซิร์ฟเวอร์ SSH และ SFTP ระยะไกลของคุณโดยใช้ขั้นตอนที่ให้ไว้ด้านบนในยืนยันการเข้าสู่ระบบ SSH และ SFTP

โปรดทราบว่าวิธีนี้จะปิดการเข้าถึงเชลล์ กล่าวคือ คุณไม่สามารถเข้าถึงเซสชันเชลล์ของระบบระยะไกลโดยใช้ SSH ได้ คุณสามารถเข้าถึงระบบระยะไกลผ่าน SFTP เท่านั้น และทำการถ่ายโอนไฟล์ไปยังและจากระบบภายในและระบบระยะไกล

บทสรุป

ตอนนี้คุณรู้วิธีจำกัดโฮมไดเร็กตอรี่ของผู้ใช้โดยใช้สภาพแวดล้อม Chroot ใน Linux หากคุณพบว่าสิ่งนี้มีประโยชน์ แบ่งปันบทความนี้บนโซเชียลเน็ตเวิร์กของคุณและแจ้งให้เราทราบในส่วนความคิดเห็นด้านล่าง หากมีวิธีอื่นใดในการจำกัดโฮมไดเร็กทอรีของผู้ใช้