ผู้ใช้ chrooted sftp พร้อมสิทธิ์การเขียนไปที่ / var / www


10

ฉันสับสนเกี่ยวกับการตั้งค่าที่ฉันพยายามปรับใช้นี้ ฉันหวังว่าบางคนในพวกคุณจะให้ความช่วยเหลือฉันได้

ข้อมูลความเป็นมา

เซิร์ฟเวอร์คือ Debian 6.0, ext3 โดยมี Apache2 / SSL และ Nginx ที่ด้านหน้าเป็น reverse proxy ฉันต้องการให้ sftp เข้าถึงไดเรกทอรีราก Apache (/ var / www) ตรวจสอบให้แน่ใจว่าผู้ใช้ sftp chrooted ไปยังเส้นทางนั้นด้วยสิทธิ์ RWX

ทั้งหมดนี้ไม่ต้องแก้ไขการอนุญาตเริ่มต้นใน / var / www

drwxr-xr-x  9 root root  4096 Nov  4 22:46 www

ภายใน / var / www

-rw-r----- 1 www-data www-data     177 Mar 11  2012 file1
drwxr-x--- 6 www-data www-data    4096 Sep 10  2012 dir1
drwxr-xr-x 7 www-data www-data    4096 Sep 28  2012 dir2
-rw------- 1 root     root          19 Apr  6  2012 file2
-rw------- 1 root     root     3548528 Sep 28  2012 file3
drwxr-x--- 6 www-data www-data    4096 Aug 22 00:11 dir3
drwxr-x--- 5 www-data www-data    4096 Jul 15  2012 dir4
drwxr-x--- 2 www-data www-data  536576 Nov 24  2012 dir5
drwxr-x--- 2 www-data www-data    4096 Nov  5 00:00 dir6
drwxr-x--- 2 www-data www-data    4096 Nov  4 13:24 dir7

สิ่งที่ฉันได้ลอง

  1. สร้างsecureftpกลุ่มใหม่
  2. สร้างผู้ใช้ SFTP ใหม่เข้าร่วมกลุ่มsecureftpและwww-dataด้วยเชลล์nologin Homedir คือ /
  3. แก้ไข sshd_config ด้วย
Subsystem sftp internal-sftp 
AllowTcpForwarding no 
Match Group <secureftp> 
      ChrootDirectory /var/www 
      ForceCommand internal-sftp

ฉันสามารถเข้าสู่ระบบด้วยผู้ใช้ sftp รายการไฟล์ แต่ไม่อนุญาตให้เขียนได้ ผู้ใช้ Sftp อยู่ในกลุ่ม www-data แต่การอนุญาตใน / var / www เป็นการอ่าน / อ่าน + x สำหรับกลุ่มบิตดังนั้น ... มันไม่ทำงาน

ฉันได้ลองกับ ACL แล้ว แต่เมื่อฉันใช้สิทธิ์ ACL RWX สำหรับผู้ใช้ sftp กับ / var / www (dirs และไฟล์ซ้ำ) มันจะเปลี่ยนสิทธิ์ unix เช่นกันซึ่งเป็นสิ่งที่ฉันไม่ต้องการ

ฉันจะทำอะไรที่นี่

ฉันคิดว่าฉันสามารถเปิดใช้งานผู้ใช้ www-data เพื่อเข้าสู่ระบบเป็น sftp เพื่อที่จะสามารถแก้ไขไฟล์ / dirs ที่ www-data เป็นเจ้าของใน / var / www แต่ด้วยเหตุผลบางอย่างฉันคิดว่านี่จะเป็นการเคลื่อนไหวที่ปลอดภัย


ฉันไม่คิดว่ามันเป็นไปได้โดยไม่เปลี่ยนสิทธิ์
Unnikrishnan

คำตอบ:


15

สิ่งที่ฉันได้ทำคือการ chroot ผู้ใช้ของฉันไปยังไดเรกทอรีบ้านของพวกเขาและจากนั้นใช้mount --bindในการสร้างลิงค์ไปยังไดเรกทอรีบ้านของพวกเขา

ฉันใช้setfaclเพื่อให้แน่ใจว่าwww-datamaintans เขียนสิทธิ์ในไฟล์ใหม่ในไดเรกทอรี เอฟเฟกต์นี้จะถูกย่อกลับคืนมา/var/wwwซึ่งเป็นสิ่งที่คุณต้องการทำ

โดยการตั้งค่าg+sในไดเรกทอรีไฟล์และไดเรกทอรีใหม่ทั้งหมดที่สร้างขึ้นภายในจะสืบทอดความเป็นเจ้าของกลุ่มจากแม่ของมัน

useradd someuser
mkdir -p /home/someuser/www
mount --bind /var/www /home/someuser/www
chmod g+s /home/someuser/www
chown -R someuser:www-data /home/someuser/www
setfacl -d -m g::rwx /home/someuser/www

นั่นควรทำเคล็ดลับ

ทำให้การเมาท์ของคุณคงอยู่

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

เพียงเพิ่มบรรทัดดังนี้:

/var/www        /home/someuser/www        none        bind        0        0

คุณอาจต้องการรีบูตเพื่อให้แน่ใจว่าทำงานได้


1
ความจริงก็คือเมื่อคุณ chmod g + s / home / someuser / www และ chown someuser: www-data / home / someuser / www มันจะถ่ายโอนการอนุญาตและเจ้าของแบบเดียวกัน: group ไปยัง / var / www นี่คือเนื่องจากการผูก - ผูก ขอบคุณมาก!
bashintosh

2
ฉันจะจ่ายเบียร์ให้คุณได้ที่ไหน ดูเหมือนว่าทุกอย่างดีและ Apache ดูเหมือนจะไม่บ่นเกี่ยวกับผู้ใช้ sftp ในฐานะเจ้าของ / var / www ฉันเข้าใกล้ทางออกของคุณมากเมื่อฉันไปทาง ACL แต่ฉันออกจากส่วน suid: คุณวิเศษได้ขอบคุณ!
bashintosh
โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.