วิธีสร้างผู้ใช้ FTP ที่มี / dir / เข้าถึงเฉพาะในการติดตั้ง Centos / linux


44

ดังนั้นฉันจึงติดตั้ง VPS - CentOS Linux ฉันมี vsFTPd บนเซิร์ฟเวอร์ ขณะนี้ฉันมีการเข้าถึง SFTP ไปยังเซิร์ฟเวอร์ผ่านผู้ใช้รูทของฉัน แต่ตอนนี้ฉันกำลังพยายามสร้างผู้ใช้ใหม่ด้วยการเข้าถึง FTP ไปยังไดเรกทอรีเฉพาะบนเซิร์ฟเวอร์ฉันได้ทำสิ่งต่อไปนี้แล้ว:

1. mkdir /var/www/mydomain.com
2. mkdir /var/www/mydomain.com/html
3. useradd <-username>
4. passwd <-username>
5. chown –R <-username> /var/www/mydomain.com
5. groupadd <-groupname>
6. gpasswd -a <-username> <-groupname>
7. chgrp -R <-groupname> /var/www/mydomain.com
8. chmod -R g+rw /var/www/mydomain.com

สิ่งที่ฉันพยายามทำคือการสร้างผู้ใช้ให้มีสิทธิ์เข้าถึงเท่านั้น /var/www/mydomain.com - ฉันสังเกตเห็นว่าผู้ใช้ล็อกอินอย่างถูกต้องในโฟลเดอร์ด้านขวา แต่ผู้ใช้สามารถเรียกดู "ย้อนกลับ" ไปยังไดเรกทอรีอื่นได้ ฉันต้องการให้ผู้ใช้ติดในโฟลเดอร์เฉพาะและไม่สามารถ "เรียกดู" กลับมาได้

ความคิดใด ๆ

ฉันได้พบบทความที่แตกต่างกันเกี่ยวกับ chrooting แต่ก็ไม่ได้คิดออกเพื่อใช้ในขั้นตอนข้างต้น


digitalocean.com/community/tutorials/…คุณสามารถติดตามสิ่งนี้เพื่อแก้ปัญหาของคุณ
Jack

สำหรับผู้ที่อยู่ใน Ubuntu 18 ที่นี่เป็นรุ่นเฉพาะdigitalocean.com/community/tutorials/…
Dung

คำตอบ:


39

มันค่อนข้างง่าย

คุณต้องเพิ่มตัวเลือกต่อไปนี้ในไฟล์ vsftpd.conf

chroot_local_user=YES

เอกสารภายในไฟล์กำหนดค่าอธิบายตนเองได้:

# You may specify an explicit list of local users to chroot() to their home
# directory. If chroot_local_user is YES, then this list becomes a list of
# users to NOT chroot().

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

upload_ftp:x:1001:1001::/var/www/sites/:/bin/bash

ตั้งค่าโฮมไดเร็กทอรีของผู้ใช้ด้วยคำสั่งต่อไปนี้

usermod -d /var/www/my.domain.example/ exampleuser

หมายเหตุ:ในตัวอย่างของฉันผู้ใช้นี้ยังเป็นผู้ใช้ที่ถูกต้องสำหรับงานที่กำหนดเวลาไว้ภายใน Linux หากคุณไม่ได้มีความต้องการนี้โปรดเปลี่ยนเปลือกของผู้ใช้ไปแทน/sbin/nologinbash


สวัสดีค่ะพี่ ๆ ! ขอบคุณมากที่สละเวลาตอบคำถามนี้ ดังนั้นในไฟล์ vsftpd.conf ของฉัน ive จึงเพิ่มบรรทัดต่อไปนี้ "chroot_local_user = YES" - เมื่อฉันเข้าใจแล้วฉันต้องเพิ่มบรรทัดที่คล้ายกับที่คุณแสดงให้ผู้ใช้ของฉัน? ต้องยอมรับว่าฉันไม่แน่ใจว่าสิ่งที่จะเขียนมีตัวอย่างที่คุณให้ "1001" เป็นต้นคืออะไร สมมติว่าผู้ใช้ของฉันชื่อ: "im_a_linux_noob" และไดเรกทอรีสำหรับผู้ใช้นั้นคือ: "/var/www/mydomain.com" - มันจะมีลักษณะอย่างไร
user1231561

และฉันจะสามารถทำสิ่งนี้ได้โดยไม่ต้องทำอะไรเพิ่มเติมในโพสต์ของฉัน? ทำ 1-8 แล้วเพิ่มสิ่งที่คุณอธิบายควรทำเคล็ดลับ
user1231561

สวัสดี ตัวอย่างข้างต้นเป็นเพียงบรรทัด (แก้ไขแล้ว) ของ/etc/passwdไฟล์ซึ่งแสดงถึงผู้ใช้ชื่อ upload_ftp, 1001: 1001 คือ ID ผู้ใช้และ ID กลุ่มของเขา / var / www / sites เป็นโฮมไดเร็กตอรี่ของผู้ใช้ (และ พารามิเตอร์ที่ vsftpd อ่านจาก) และ / bin / bash คือเชลล์ usermod -d /var/www/mydomain.com <username>น่าจะเป็นสิ่งที่ขาดหายไปในกรณีของคุณเป็นไดเรกทอรีบ้านให้กับผู้ใช้และสามารถแก้ไขได้ด้วยคำสั่งต่อไปนี้: ไชโย :)

3
ขอบคุณมาก แม้ว่าปัญหาหนึ่ง มันทำงานได้ดีผ่านทาง FTP ปกติ แต่เมื่อฉันเข้าสู่ระบบในฐานะ SFTP - จากนั้นฉันสามารถเรียกดูอีกครั้ง - ความคิดใด ๆ
user1231561

1
แน่นอนเพราะ sftp กำลังถูกจัดการโดยเซิร์ฟเวอร์ ssh ของคุณไม่ใช่โดยเซิร์ฟเวอร์ ftp ของคุณ ด้วยวิธี "หยาบคาย": SFTP = SSH + FTP; FTPS = FTP + SSL มีเธรดเกี่ยวกับ sftp ที่นี่และฉันจะพูดเพื่อทำสำเนา aviod เรื่อง ok? ;) unix.stackexchange.com/a/64541/34720

6

หลังจากที่คุณเปลี่ยนการตั้งค่าเพื่อรวม chroot_local_user=YES

คุณสามารถเปลี่ยนเชลล์ของผู้ใช้เป็น/usr/sbin/nologinหากรหัสผ่านรั่วคุณจะลดความเสี่ยงลง (ตั้งโฮมไดเร็กตอรี่ด้วย) เชลล์จำเป็นต้องแสดงรายการ/etc/shellsด้วยมิฉะนั้นการตรวจสอบจะล้มเหลว

usermod -d /var/www/my.domain.example -s / usr / sbin / nologin exampleuser

-d, --home HOME_DIR ไดเรกทอรีล็อกอินใหม่ของผู้ใช้ หากได้รับตัวเลือก -m เนื้อหาของโฮมไดเร็กตอรี่ปัจจุบันจะถูกย้ายไปยังโฮมไดเร็กตอรี่ใหม่, ซึ่งจะถูกสร้างขึ้นหากมันไม่มีอยู่.

-s, --shell SHELL ชื่อของเชลล์ล็อกอินใหม่ของผู้ใช้ การตั้งค่าฟิลด์นี้เป็นค่าว่างจะทำให้ระบบเลือกเชลล์ล็อกอินเริ่มต้น

https://security.appspot.com/vsftpd/FAQ.txt


4

นี่คือขั้นตอนในการตั้งค่าผู้ใช้และอนุญาตให้ผู้ใช้เข้าถึงผ่าน FTP เท่านั้น (เช่นไม่มี SSH) และ จำกัด การเข้าถึงไดเรกทอรีเฉพาะ (ผู้ใช้ตามบ้าน) บนproftpd :

  1. เพิ่มผู้ใช้ใหม่: adduser newusername

  2. ตั้งรหัสผ่าน: passwd newusername

  3. แก้ไขโฮมไดเร็กทอรีของผู้ใช้จากค่าดีฟอลต์เป็นโฟลเดอร์ใหม่:

    usermod -d /target/directory username

  4. แก้ไขshellsไฟล์: vi /etc/shellsและเพิ่ม/dev/nullที่ส่วนท้าย

  5. แก้ไขnewusernameรายการในpasswdไฟล์: vi /etc/passwdเพื่อเพิ่ม/./ก่อนหน้าnewusernameเพื่อให้รายการมีลักษณะดังนี้:

    newusername:x:502:502::/home/ftp/./newusernamehomedirectory/:/dev/null

    รายละเอียดสำหรับขั้นตอนที่ 4 และ 5 ที่นี่:

  6. แก้ไข/etc/proftpd/proftpd.confไฟล์และยกเลิกหมายเหตุบรรทัดDefaultRoot ~


-4

ตั้งค่าการอนุญาตให้ใช้โฟลเดอร์รูทเป็น711ด้วยบัญชีรูทของคุณ


-4

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

useradd -d ftp_user:chown 711 /etc/init.d/

2
คุณควรพิจารณาขยายโพสต์ของคุณอย่างน้อยก็มีคำอธิบายหรือเอกสารที่เป็นประโยชน์
HalosGhost

นี่คือคำตอบที่น่ากลัว คุณต้องให้สิทธิ์ผู้ใช้ ftp ในการเข้าถึงไดเร็กทอรี /etc/init.d/ แบบสมบูรณ์ - เป็นบ้า 711 อธิบายแล้ว - permission-calculator.org/decode/0711
Tisch
โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.