จำกัด การเข้าถึง FTP เฉพาะกับ / var / www ด้วย vsftpd


41

ฉันใช้ vsftpd เป็น ftp server บน linux ของฉัน (rasbian) ฉันเข้าสู่ระบบในฐานะผู้ใช้รูท

ฉันอยากจะยังคงล็อคการใช้ / var / www เท่านั้นฉันจะกำหนดค่า vsftpd conf เพื่อให้สำเร็จได้อย่างไร


1
ตรวจสอบchroot ตัวเลือกในvsftpd.confและสร้างผู้ใช้แยกต่างหากสำหรับมันมี homedir /var/wwwมีการตั้งค่า
jirib

คำตอบ:


65

วิธีที่ 1: การเปลี่ยนไดเรกทอรีบ้านของผู้ใช้

ตรวจสอบให้แน่ใจว่ามีบรรทัดต่อไปนี้อยู่

chroot_local_user=YES

ตั้งค่า HOME Directory ของผู้ใช้เป็น/var/www/หากคุณต้องการเปลี่ยนสำหรับผู้ใช้ที่มีอยู่แล้วคุณสามารถใช้:

usermod --home /var/www/ username

จากนั้นตั้งค่าสิทธิ์ที่จำเป็นใน /var/www/

วิธีที่ 2: ใช้ user_sub_token

หากคุณไม่ต้องการเปลี่ยนไดเรกทอรีบ้านของผู้ใช้คุณสามารถใช้:

chroot_local_user=YES
local_root=/ftphome/$USER
user_sub_token=$USER

เกี่ยวกับuser_sub_token:

สร้างโฮมไดเร็กทอรีโดยอัตโนมัติสำหรับผู้ใช้เสมือนแต่ละรายโดยยึดตามเทมเพลต ตัวอย่างเช่นหากโฮมไดเร็กทอรีของผู้ใช้จริงที่ระบุผ่าน guest_username คือ / ftphome / $ USER และ user_sub_token ถูกตั้งค่าเป็น $ USER ดังนั้นเมื่อผู้ใช้ทดสอบเสมือนลงชื่อเข้าใช้เขาจะสิ้นสุด (ปกติคือ chroot () 'ed) ใน ไดเรกทอรี / ftphome / test ตัวเลือกนี้จะมีผลถ้า local_root มี user_sub_token

สร้างไดเรกทอรีและตั้งค่าการอนุญาต:

mkdir -p /ftphome/{test,user1,user2}
chmod 770 -R /ftphome
chown -R ftp. /ftphome
usermod -G ftp test

เมื่อรีสตาร์ทvsftpdและทดสอบการตั้งค่าของคุณ

ตัวอย่างผลสำเร็จ:

[root@mail tmp]# ftp localhost
Connected to mail.linuxian.local.
220 (vsFTPd 2.0.5)
530 Please login with USER and PASS.
530 Please login with USER and PASS.
KERBEROS_V4 rejected as an authentication type
Name (localhost:root): test
331 Please specify the password.
Password:
230 Login successful.
Remote system type is UNIX.
Using binary mode to transfer files.
ftp> mput vhosts
mput vhosts? 
227 Entering Passive Mode (127,0,0,1,146,41)
150 Ok to send data.
226 File receive OK.
24 bytes sent in 3.3e-05 seconds (7.1e+02 Kbytes/s)
ftp> ls -rlt
227 Entering Passive Mode (127,0,0,1,97,90)
150 Here comes the directory listing.
-rw-r--r--    1 787      787            24 Oct 11 19:57 vhosts
226 Directory send OK.
ftp> 221 Goodbye.

2
โปรดทราบว่าคุณสามารถมีคำต่อท้ายหลังจาก$USERสำหรับlocal_rootเช่น/home/$USER/ftp(ซึ่งจะ chroot ผู้ใช้ไปยังftpไดเรกทอรีย่อยของ dir บ้านของพวกเขา)
เบอนัวต์ดัฟเช

ข้อสังเกตใน vsftp คำถามที่พบบ่อยเกี่ยวกับการ chrooting ไปยังโฟลเดอร์ที่เขียนโดยผู้ใช้เข้าสู่ระบบนี้เป็นไปได้สูงในกรณีที่ใส่local_rootลงในไดเรกทอรีบ้านที่แท้จริงของผู้ใช้
Thomas Urban

จะยืนยันได้อย่างไรว่ามี "chroot_local_user = YES" อยู่ที่ไหน
The One

4

คุณสามารถทำได้:

usermod --home /var/www/ username

5
คำตอบหนึ่งถึงสองบรรทัดมักจะถือว่ามีคุณภาพต่ำ โปรดพิจารณาขยายโพสต์ของคุณพร้อมคำอธิบายว่าข้อเสนอแนะของคุณทำอะไรบ้างพร้อมกับลิงก์หรือเอกสารที่แนะนำความสามารถของคำแนะนำในการแก้ปัญหาจริง
HalosGhost

2

ฉันใช้คำแนะนำของ Rahul Patil ด้านบน:

chroot_local_user=YES
local_root=/home/$USER/www-data
user_sub_token=$USER

แต่ฉันไม่เข้าใจว่าทำไมฉันสามารถเข้าสู่ระบบด้วยผู้ใช้คนเดียวเท่านั้น จากนั้นฉันก็พบว่าเราไม่สามารถ chroot ไปยังไดเรกทอรีราก (สำหรับกรณีนี้/home/$USER/www-data) ที่มีการเข้าถึงการเขียน ดังนั้นฉันจะลบการเข้าถึงการเขียนด้วย:

# chmod a-w /home/$USER/www-data

หมายเหตุ:เปลี่ยนแปลง$USERกับผู้ใช้ของคุณ


1

ตรวจสอบchrootตัวเลือกในvsftpd.confและสร้างผู้ใช้แยกต่างหากสำหรับมันมี homedir /var/wwwมีการตั้งค่า


ฉันตระหนักดีว่าฉันจะสร้างผู้ใช้แยกต่างหาก ฉันอาจจะควรออกแบบคำถามของฉันแล้วฉันจะ จำกัดผู้ใช้ไปยังเส้นทางที่แยกจากกันเท่านั้น
Badr Hari

ใช้ sftp จาก OpenSSH ดู man sshd_config สำหรับ internal-sftp จากนั้น 'ForceCommand' และดู 'ChrootDirectory' ใหม่กว่า OpenSSH ยังเพิ่มตัวเลือกสำหรับ sftp-server เพื่อเปลี่ยนเส้นทางที่เฉพาะเจาะจงดังนั้นเมื่อใช้ร่วมกับ ChrootDirectory คุณสามารถทำได้: chroot -> / path -> destination -> 'onlyhere' = / chroot / onlyhere
jirib
โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.