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


24

ฉันต้องสามารถเพิ่มผู้ใช้เสมือนกับ vsftpd ที่มีสิทธิ์เข้าถึงโฟลเดอร์ย่อยเท่านั้น เหตุผลที่ฉันต้องการใช้ผู้ใช้เสมือนคือฉันต้องการมี 1 ผู้ใช้จริงบนเซิร์ฟเวอร์

โครงสร้าง FTP คือ:

  • www
    • website_name1
      • sub_folder1
    • website_name2
      • sub_folder2
      • sub_folder3
    • website_name3
    • website_name4

บัญชีหลักมีการเข้าถึงโฟลเดอร์ www และไดเรกทอรีย่อยทั้งหมดและฉันต้องการเพิ่มผู้ใช้เสมือนที่สามารถเข้าถึงsub_folder1และsub_folder1เท่านั้น

นอกจากนี้เพื่อหลีกเลี่ยงความสับสนบางอย่างฉันยังจะต้องมีผู้ใช้อื่นในการเข้าถึงsub_folder3และมีเพียงsub_folder3 จุดของฉันคือฉันจะต้องสามารถเลือกโฟลเดอร์และโฟลเดอร์ย่อยในผู้ใช้ตามพื้นฐานของผู้ใช้

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

ฉันพบคำถามที่คล้ายกันโพสต์ที่นี่:

วิธีการตั้งค่า VSFTPD สำหรับผู้ใช้หลายคนรวมถึงการเพิ่มไดเรกทอรีเฉพาะ

แต่มันแนะนำproftpdว่าที่ฉันคิดว่าปลอดภัยน้อยกว่า
หรือฉันพลาดจุดที่นี่?


ฉันมีปัญหากับการตรวจสอบสิทธิ์เป็นเวลานานที่สุดจนกว่าฉันจะพบserverfault.com/questions/450214/นี้เห็นได้ชัดว่า PAM มีปัญหากับ MD5 แฮช คู่มือนี้จะช่วยแก้ปัญหาดังกล่าว

คำตอบ:


31

เมื่อเล่นไปเรื่อย ๆ ฉันก็สามารถหาวิธีแก้ปัญหาแบบกึ่ง ๆ ได้ (ไม่สมบูรณ์ แต่ดีพอ)

ใช้ 2707974 คำตอบและข้อมูลฉันได้รับอย่างอื่นที่ฉันสามารถได้รับสิ่งที่ฉันต้องการ

ก่อนอื่นคุณต้องติดตั้ง vsftp และ PAM

apt-get install vsftpd libpam-pwdfile

แก้ไข /etc/vsftpd.conf

nano /etc/vsftpd.conf

จากนั้นวางในสิ่งต่อไปนี้

listen=YES
anonymous_enable=NO
local_enable=YES
write_enable=YES
local_umask=022
local_root=/var/www
chroot_local_user=YES
allow_writeable_chroot=YES
hide_ids=YES

#virutal user settings
user_config_dir=/etc/vsftpd_user_conf
guest_enable=YES
virtual_use_local_privs=YES
pam_service_name=vsftpd
nopriv_user=vsftpd
guest_username=vsftpd

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

กำลังสร้างผู้ใช้

คุณสามารถใช้ฐานข้อมูลหรือhtpasswdพบhtpasswdได้เร็วขึ้นและใช้งานง่ายขึ้น

สร้างไดเรกทอรีเพื่อจัดเก็บผู้ใช้ของคุณ

mkdir /etc/vsftpd
htpasswd -cd /etc/vsftpd/ftpd.passwd user1

การเพิ่มผู้ใช้เพิ่มเติมเพียงละเว้น -c

htpasswd -d /etc/vsftpd/ftpd.passwd user2

ฉันจัดการเพื่อให้มันทำงานโดยใช้ CRYPT ซึ่ง จำกัด ไว้ที่ 8 ตัวอักษร เพื่อใช้งานมากกว่า 8 ตัวอักษรใช้ openssl เพื่อสร้างแฮชและไพพ์ที่เข้ากันได้โดยตรงใน htpasswd

htpasswd -c -p -b /etc/vsftpd/ftpd.passwd user1 $(openssl passwd -1 -noverify password)

เมื่อผู้ใช้ของคุณถูกสร้างขึ้นคุณสามารถเปลี่ยนไฟล์กำหนดค่า PAM ได้แล้ว

nano /etc/pam.d/vsftpd

และลบทุกอย่างที่อยู่ในไฟล์นี้และแทนที่ด้วยสิ่งต่อไปนี้

auth required pam_pwdfile.so pwdfile /etc/vsftpd/ftpd.passwd
account required pam_permit.so

นี่จะเปิดใช้งานการเข้าสู่ระบบสำหรับผู้ใช้เสมือนของคุณที่กำหนดไว้/etc/vsftpd/ftpd.passwdและจะปิดการใช้งานผู้ใช้ท้องถิ่น

ต่อไปเราต้องเพิ่มผู้ใช้เพื่อให้ผู้ใช้เสมือนเหล่านี้ใช้ ผู้ใช้เหล่านี้จะไม่สามารถเข้าถึงเชลล์และจะถูกเรียกvsftpd

useradd --home /home/vsftpd --gid nogroup -m --shell /bin/false vsftpd

ผู้ใช้ต้องตรงกันguest_username=vsftpdในไฟล์ vsftpd conf

การกำหนดการเข้าถึงไดเรกทอรี

บรรทัดสำคัญที่นี่คือต่อไปนี้

user_config_dir=/etc/vsftpd_user_conf

ซึ่งหมายความว่าเมื่อuser1เข้าสู่ระบบจะค้นหาไฟล์ต่อไปนี้

/etc/vsftpd_user_conf/user1

ไฟล์นี้เหมือนกับที่vsftpd.confคุณสามารถกำหนดใหม่ได้local_root

กลับไปที่คำถามที่เราต้องการuser1เข้าถึงvar/www/website_name1/sub_folder1เท่านั้นดังนั้นเราต้องสร้างvsftpd_user_confโฟลเดอร์:

mkdir /etc/vsftpd_user_conf

ตอนนี้สร้างไฟล์ผู้ใช้:

nano /etc/vsftpd_user_conf/user1

และป้อนบรรทัดต่อไปนี้

local_root=/var/www/website_name1/sub_folder1

ตอนนี้เริ่ม vsftp

service vsftpd restart

ตอนนี้คุณควรจะสามารถเข้าสู่ระบบในฐานะผู้ใช้ 1 ซึ่งจะสามารถดู var/www/website_name1/sub_folder1และโฟลเดอร์และไฟล์ใด ๆ ที่อยู่ภายใน

เพียงเท่านี้คุณก็สามารถเพิ่มผู้ใช้ได้มากเท่าที่คุณต้องการและ จำกัด การเข้าถึงโฟลเดอร์ใด ๆ ที่คุณต้องการ

สิ่งสำคัญที่ต้องจำถ้าคุณไม่ได้สร้างไฟล์ผู้ใช้ conf มันจะเริ่มต้นที่โฟลเดอร์ var / www เป็นราก (ในตัวอย่างข้างต้น)

หากโฟลเดอร์ย่อยนั้นมีวัตถุประสงค์เพื่อให้ผู้ใช้สามารถแก้ไขได้อาจจำเป็นต้องเปลี่ยนเจ้าของโฟลเดอร์ย่อยที่แชร์:

chown vsftpd:nogroup /var/www/website_name1/sub_folder1

ใช้งานได้กับการแก้ไขบางอย่าง: 1) ใช้พา ธ สัมบูรณ์ (แทนที่พา ธ ที่ขึ้นต้นด้วย "var /" ด้วย "/ var" 2) vsftpd 2.3.5 ซึ่งอยู่ใน Ubuntu 12.04 ไม่รองรับตัวเลือก allow_writeable_chroot คุณสามารถแก้ไขได้โดยการติดตั้ง patched vsftpd
gadelat

สวัสดีด้วยรหัสผ่าน ssl เราจะละเว้น -c อีกครั้งด้วย -d หรือเพียงแค่ละเว้น -c? ในบันทึกย่อที่สองเราเพิ่งเรียกใช้แบบสอบถามเพื่อเปลี่ยนรหัสผ่านอีกครั้งหรือไม่ หรือมีวิธีอื่น ขอบคุณ
mdixon18

ทำไมคุณต้องสร้างโฮมไดเร็กตอรี่ด้วย useradd --home? มันจำเป็น?
e-info128

1
เพิ่มเติม: เปิดใช้งานการเชื่อมต่อ TLS ที่ปลอดภัย digitalocean.com/community/tutorials/…
e-info128

1
apache2-utils อาจจำเป็นสำหรับการติดตั้งบางอย่างฉันไม่ได้รวมไว้ในคำตอบเนื่องจากมันไม่เกี่ยวข้องกับทุกคน
Avenyet

12

ลองกับคู่มือนี้ อาจจะทำงานให้คุณ

ทำอย่างไร

ติดตั้ง vsftpd และไลบรารี PAM

แก้ไข/etc/vsftpd.confและ/etc/pam.d/vsftpd

สร้างบัญชีผู้ใช้ด้วยไดเรกทอรีที่กำหนดเอง (ตัวอย่างเช่น / var / www /)

ตั้งค่าไดเรกทอรีด้วยความถูกต้องchmodและchown

สร้างผู้ใช้ผู้ดูแลระบบด้วยการเข้าถึงเซิร์ฟเวอร์แบบเต็ม

  1. ติดตั้งvsftpd(Very Secure FTP Deamon) และlibpam-pwdfileเพื่อสร้างผู้ใช้เสมือน

ฉันต้องการสร้างผู้ใช้ FTP แต่ฉันไม่ต้องการเพิ่มผู้ใช้ unix ในพื้นที่ (ไม่มีการเข้าถึงเชลล์ไม่มีโฮมไดเร็กตอรี่และอื่น ๆ ) PAM (โมดูลการพิสูจน์ตัวตนแบบเสียบได้) จะช่วยคุณสร้างผู้ใช้เสมือน

sudo apt-get install vsftpd libpam-pwdfile

  1. แก้ไข vsftpd.conf

ก่อนอื่นคุณต้องสำรองไฟล์ต้นฉบับ

sudo mv /etc/vsftpd.conf /etc/vsftpd.conf.bak

จากนั้นสร้างใหม่

sudo vim /etc/vsftpd.conf

คัดลอกและวางบรรทัดต่อไปนี้ ไฟล์ควรมีบรรทัดเหล่านี้เท่านั้น:

listen=YES
anonymous_enable=NO
local_enable=YES
write_enable=YES
local_umask=022
nopriv_user=vsftpd
virtual_use_local_privs=YES
guest_enable=YES
user_sub_token=$USER
local_root=/var/www/$USER
chroot_local_user=YES
hide_ids=YES
guest_username=vsftpd
  1. ลงทะเบียนผู้ใช้เสมือน

เพื่อลงทะเบียนผู้ใช้ที่คุณใช้htpasswdดังนั้นฉันคิดว่าคุณapache2ทำงานบนเซิร์ฟเวอร์ของคุณ สร้างvsftpdโฟลเดอร์จากนั้นใส่ไฟล์การกำหนดค่าลงไป

sudo mkdir /etc/vsftpd

แล้วก็

sudo htpasswd -cd /etc/vsftpd/ftpd.passwd user1

-c หมายความว่าเราจะสร้างไฟล์ถ้ามันยังไม่มีอยู่ -d บังคับให้ MD5 คุณต้องการมันใน Ubuntu 12.04 เพียงใช้มันเสมอ

คำสั่งจะแจ้งให้ใส่รหัสผ่าน

หากคุณต้องการเพิ่มผู้ใช้ใหม่ในภายหลัง:

sudo htpasswd -d /etc/vsftpd/ftpd.passwd user2

  1. กำหนดค่า PAM ใน /etc/pam.d/vsftpd

อีกครั้งคุณต้องสำรองไฟล์ orignal

sudo mv /etc/pam.d/vsftpd /etc/pam.d/vsftpd.bak

และสร้างใหม่

sudo vim /etc/pam.d/vsftpd

คัดลอกและวาง 2 บรรทัดนี้ (ควรเป็นเนื้อหาเดียว) ฉันยืนยันเพียง 2 บรรทัดนี้ฉันเสียเวลามากในการรักษาต้นฉบับและเพิ่งเพิ่มสิ่งเหล่านี้

auth required pam_pwdfile.so pwdfile /etc/vsftpd/ftpd.passwd
account required pam_permit.so
  1. สร้างผู้ใช้ท้องถิ่นโดยไม่มีการเข้าถึงเชลล์

sudo useradd --home /home/vsftpd --gid nogroup -m --shell /bin/false vsftpd

คุณสามารถตรวจสอบว่ามันถูกสร้างขึ้นด้วยคำสั่ง id: id vsftpd เรากำหนดผู้ใช้ด้วยเปลือก / bin / false เนื่องจากพารามิเตอร์ check_shell (แม้ว่าคุณจะไม่ได้ใช้) เมื่อผู้ใช้ปลายทางเชื่อมต่อกับเซิร์ฟเวอร์ FTP พวกเขาจะถูกใช้เพื่อสิทธิ์และความเป็นเจ้าของ:

chmodchownและ

  1. เริ่มต้นใหม่ vsftpd

วิธีการทั่วไปคือการใช้ init.d เหมือนทุกคน

sudo /etc/init.d/vsftpd restart

sudo service vsftpd restart

  1. สร้างไดเรกทอรี

ตามการกำหนดค่าผู้ใช้ทั้งหมดจะถูกวางลงในโฟลเดอร์นี้: / var / www / user1

คุณต้องสร้างมันด้วยสิทธิ์เฉพาะ: โฟลเดอร์รากไม่สามารถเขียนได้!

 / [root = /var/www/user1] => 555
www [ /var/www/user1/www ] => 755
docs [ /var/www/user1/docs ] => 755

หมายเหตุ: ผู้ใช้ไม่สามารถสร้างไฟล์หรือโฟลเดอร์ในไดเรกทอรีราก

ในนั้นvsftpd.confเรามีchroot_local_user=YESเพื่อให้ผู้ใช้ไม่สามารถเห็นอะไรนอกโฟลเดอร์ของเขา สำหรับเขาเซิร์ฟเวอร์มีลักษณะดังนี้:

ดังนั้นให้เรียกใช้คำสั่งเหล่านี้:

mkdir /var/www/user1`
chmod -w /var/www/user1
mkdir www/user1/www
chmod -R 755 /var/www/user1/www
chown -R vsftpd:nogroup /var/www/user1

/var/www/user1โฟลเดอร์ที่มีอยู่หรือการเชื่อมต่อจะล้มเหลว

ตอนนี้คุณสามารถลองเชื่อมต่อกับ FTP ของคุณได้แล้ว

  1. สร้างผู้ใช้ผู้ดูแลระบบเพื่อเข้าถึงเซิร์ฟเวอร์ทั้งหมด

htpasswdเพื่อสร้างผู้ใช้ผู้ดูแลระบบที่เราจำเป็นต้องลงทะเบียนผู้ใช้ใหม่ด้วย

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

sudo htpasswd -d /etc/vsftpd/ftpd.passwd theadmin

ตอนนี้เราต้องเพิ่มบรรทัดใหม่เข้าไป /etc/vsftpd.conf

chroot_list_enable=YES

ซึ่งหมายความว่าผู้ใช้ของคุณจะถูกวางไว้ในโฟลเดอร์ของพวกเขา (เป็นคุก) ยกเว้นผู้ใช้ใน / etc /

vsftpd.chroot_list

มาสร้างไฟล์นี้และเพิ่มผู้ใช้ของเราไฟล์นี้เป็นบรรทัดง่าย ๆ ที่มี“ theadmin” เพิ่มผู้ใช้หนึ่งรายต่อบรรทัด นั่นหมายความว่าคุณไม่จำเป็นต้องสร้างโฟลเดอร์ผู้ใช้จะเข้าสู่ระบบและเริ่มต้นใน/var/www/theadmin/home/vsftpd

รีสตาร์ทเซิร์ฟเวอร์แล้วเสร็จ!


ลองใช้วิธีนี้แล้วมันจะไม่ยืดหยุ่นมากเพราะมันบังคับ local_root = / var / www / $ USER ไม่อนุญาตให้ฉันระบุไดเรกทอรีเดียวสำหรับผู้ใช้หรือผู้ใช้ ไดเรกทอรีนี้โดยปกติจะมีวัตถุประสงค์และตำแหน่งที่แตกต่างกันขึ้นอยู่กับลูกค้า ขอบคุณสำหรับการตอบสนองแม้ว่า
Avenyet

0

ใช่คุณสามารถทำได้และเพื่อความยืดหยุ่นในการสร้าง userconfig dir และไฟล์ mkdir /var/www/userconfsหรืออะไรก็ตามที่คุณต้องการเปลี่ยนชื่อ userconfs เป็นแล้วสร้างไฟล์เฉพาะ

vi /var/www/userconfigs/ftpuseraccount

ประเภทในlocal_root=/var/www(หรือสิ่งที่คุณต้องการเข้าถึงโดย dir) guest_username=www-data(เจ้าของอูบุนตูของการแก้ไขบนไฟล์

หลังจากอัปเดตคุณ vsftpd.conf โดยการเพิ่มuser_config_dir=/var/www/userconfigs(หรืออะไรก็ตามที่คุณแทนที่มันเป็นบัญชีนี้จะเข้าถึงสิ่งที่ระบุ sdir yo)

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