วิธีเพิ่มผู้ใช้ด้วยการเข้าถึง SFTP / FTP ไปยังโฟลเดอร์ '/ var / www / html / website_abc' ใน Amazon EC2 Centos?


19

ซ้ำเป็นไปได้:
สิทธิ์ไดเรกทอรี Linux

ฉันทำงานกับนักพัฒนาบุคคลที่สามและฉันต้องการให้สิทธิ์การเข้าถึง SFTP (หรือ FTP) ไปยังโฟลเดอร์รูทสำหรับเว็บไซต์ที่พวกเขากำลังทำงานอยู่นั่นคือ'/var/www/html/website_abc'เพื่อให้พวกเขาสามารถอัปโหลดไฟล์ที่นั่นได้ หมายเหตุว่าฉันโฮสติ้งเว็บไซต์อื่น ๆ ของฉันมีใน EC2 '/var/www/html/website_xyz'เดียวกันตัวอย่างเช่น

เพียงเพื่อเน้นว่าฉันทำงานกับหลายเว็บไซต์ใน 1 อินสแตนซ์ EC2 เดียวโครงสร้างของเว็บไซต์มีดังนี้:

/ var / www / html /
/ var / www / html / website_abc
...
/ var / www / html / website_xyz

เป้าหมายของฉันมีดังนี้:

  • ผู้ใช้ 'adeveloper' สามารถเข้าถึง '/ var / www / html / website_abc' และเฉพาะ '/ var / www / html / website_abc'
    • ฉันคิดว่าผู้ใช้ 'adeveloper' จะใช้ 'adeveloper @ [elastic IP ของฉัน]' เป็นชื่อผู้ใช้เพื่อเข้าสู่ระบบ SFTP (หรือ FTP) ใช่ไหม?
  • ผู้ใช้ 'adeveloper' ไม่สามารถเข้าถึง '/ var / www / html /' หรือไดเรกทอรีอื่น ๆ ในอินสแตนซ์ EC2 ของฉัน
  • ไฟล์ไพรเวตคีย์เป็นอย่างไร?
    • ฉันจะส่งไฟล์กุญแจส่วนตัวของฉันไปยังนักพัฒนาบุคคลที่สามได้หรือไม่ - แนะนำให้ทำเช่นนั้น?
    • มีวิธีสร้างไฟล์คีย์ส่วนตัวที่แตกต่างกันสำหรับพวกเขาหรือให้พวกเขาเข้าสู่ระบบด้วยชื่อผู้ใช้และรหัสผ่านแทน?

ฉันค้นหาเสร็จแล้ว แต่คนส่วนใหญ่พูดถึงวิธีเข้าถึง EC2 ผ่าน SFTP ซึ่งฉันสามารถใช้ WinSCP ได้แล้ว

ชี้แจง:

  • ฉันต้องการ 'ผู้พัฒนา' เพื่อให้สามารถอัปโหลดเนื้อหา/var/www/html/website_abcที่ได้รับอนุญาตเป็น 'เขียน'
  • ฉันต้องการ 'adeveloper' เพื่อที่จะไม่ได้รับอนุญาต 'เขียน' สำหรับไฟล์ / ไดเรกทอรีใด ๆ ภายใต้/var/www/html/และไม่ควรแม้แต่สิทธิ์ในการ 'read'
  • อย่างไรก็ตามดูเหมือนว่าจะมีปัญหาใหญ่ที่นี่:
    • /var/www/html/มีสิทธิ์ใช้งาน 777 แล้วเนื่องจากนี่คือโฟลเดอร์ DocumentRoot ของฉัน ดังนั้นฉันจะหยุด 'ผู้พัฒนา' จากการเข้าถึงเว็บไซต์อื่นของฉันได้อย่างไร

แก้ไขได้บางส่วน ฉันจัดการบรรลุเป้าหมายโดยใช้ OpenSSH (ฉันสร้างโฟลเดอร์. ssh ภายใน / var / www / html / website_abc / และสร้างคีย์ส่วนตัวและมอบให้กับนักพัฒนาบุคคลที่สาม) ฉันได้เรียนรู้ด้วยว่าฉันไม่ควรให้ไฟล์กุญแจส่วนตัว AWS ให้ฉัน ยังคงเรียนรู้เกี่ยวกับ chroot


1
ฉันขอโทษ @lain แต่คุณต้องเข้าใจฉันผิด ฉันเดาว่าคุณอาจใช้เวลาทำอย่างอื่นที่มีความหมายมากกว่าการตัดสินผิด ๆ แบบนี้ บางทีถ้าคุณอ่านคำถามของฉันอย่างระมัดระวังคุณจะต้องทำอะไรกับ SSH / SFTP มากกว่าการอนุญาตไฟล์ / โฟลเดอร์ Linux หรือค่อนข้างสับสนระหว่างกัน (ทำไมฉันถึงสับสน? ฉันต้องการความช่วยเหลือ) นี่ไม่ใช่การซ้ำซ้อนของเธรดอื่นอย่างที่คุณเห็น อย่างไรก็ตามฉันจัดการเพื่อให้บรรลุเป้าหมายของฉันโดยใช้ OpenSSH ฉันยังคงเรียนรู้เกี่ยวกับ chroot ตามคำแนะนำของ Tom H และผลการค้นหาบางอย่าง ขอบคุณ
ericn

"ฉันยังได้เรียนรู้ว่าฉันไม่ควรให้ไฟล์กุญแจส่วนตัวกับ AWS เลย" ทำไม .....
Michael Bailey

คำตอบ:


11

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

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

$ cd /etc
-bash-3.2$ ls -1
acpi
adjtime
aliases
...

เช่นฉันสามารถเข้าถึงสิ่งต่าง ๆ มากมายที่คุณต้องการ จำกัด จากผู้ใช้ที่ไม่รู้จักที่คุณต้องการให้การเข้าถึงในท้องถิ่น

ที่นี่ฉันกำลังดูผู้ใช้ภายในทั้งหมดที่กำหนดค่าไว้ใน/etc/passwdไฟล์

$ cat /etc/passwd
root:x:0:0:root:/root:/bin/bash
bin:x:1:1:bin:/bin:/sbin/nologin
...

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

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

ด้วยเหตุนี้ในกรณีของคุณที่คุณต้องการผู้ใช้ลงในไดเรกทอรีchrootadeveloper/var/www/html/website_abc

คุณสามารถตั้งค่าไดเรกทอรี chroot สำหรับผู้ใช้ของคุณเพื่อ จำกัด พวกเขาไปยังไดเรกทอรีย่อย/var/www/html/website_abcเช่นใน/etc/ssh/sshd_config;

สิ่งนี้ต้องใช้ openssh-server หลังจาก 4.8? ดังนั้นอาจต้องใช้ CentOS 6.2

Match Group sftp
    ChrootDirectory %h
    AllowTcpForwarding no

(ไม่ได้ทดสอบดูman sshd_configเพื่อยืนยันไวยากรณ์)

จากนั้นเพิ่มผู้ใช้เหล่านั้นในกลุ่ม sftp

 groupadd sftp
 usermod -d /var/www/html/website_abc adeveloper
 usermod -G sftp adeveloper

เกี่ยวกับคีย์ที่แชร์

คุณควรสร้าง keypair เพิ่มเติมสำหรับผู้ใช้งาน adeveloper และส่งให้กับที่ปรึกษาของคุณ (หรืออีกวิธีหนึ่งคือให้พวกเขาส่งกุญแจสาธารณะของคุณและเพิ่มไปยังไฟล์ authorized_keys สำหรับadeveloper)

ไม่เคยยอมแพ้คีย์ส่วนตัวของคุณนั่นคือสาเหตุที่มันเรียกว่าไพรเวต ;-)

ทางเลือก ftp แบบดั้งเดิม

vsftp / proftp ฯลฯ ยังรองรับการกำหนดค่า chroot แต่ในการกำหนดค่าแบบ ssh สมัยใหม่นี้เป็นวิธีปกติและการสนับสนุน ftp เป็นเพียงประวัติศาสตร์เท่านั้น

มีลิงค์เชื่อมโยงไปยังบทเรียนที่นี่;
http://www.techrepublic.com/blog/opensource/chroot-users-with-openssh-an-easier-way-to-confine-users-to-their-home-directories/229

http://www.howtoforge.com/chrooted-ssh-sftp-tutorial-debian-lenny


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