người dùng sftp chroot với quyền ghi vào / var / www


10

Tôi đang bị lẫn lộn về thiết lập này mà tôi đang cố gắng triển khai. Tôi hy vọng ai đó trong số các bạn có thể giúp tôi một tay: được đánh giá cao.

Thông tin cơ bản

Máy chủ là Debian 6.0, ext3, với Apache2 / SSL và Nginx ở phía trước là proxy ngược. Tôi cần cung cấp quyền truy cập sftp vào thư mục gốc Apache (/ var / www), đảm bảo rằng người dùng sftp được điều khiển theo đường dẫn đó với quyền RWX.

Tất cả điều này mà không sửa đổi bất kỳ quyền mặc định trong / var / www.

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

Bên trong / 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

Những gì tôi đã cố gắng

  1. đã tạo một nhóm bảo mật mới
  2. đã tạo một người dùng sftp mới, tham gia vào nhóm Secureftpdữ liệu www cũng với vỏ nologin . Homedir là /
  3. chỉnh sửa sshd_config với
Subsystem sftp internal-sftp 
AllowTcpForwarding no 
Match Group <secureftp> 
      ChrootDirectory /var/www 
      ForceCommand internal-sftp

Tôi có thể đăng nhập với người dùng sftp, liệt kê các tệp nhưng không cho phép ghi hành động. Người dùng Sftp nằm trong nhóm dữ liệu www nhưng các quyền trong / var / www được đọc / đọc + x cho bit nhóm nên ... Nó không hoạt động.

Tôi cũng đã thử với ACL, nhưng khi tôi áp dụng quyền ACL RWX cho người dùng sftp cho / var / www (thư mục và tệp đệ quy), nó sẽ thay đổi quyền unix cũng là điều tôi không muốn.

Tôi có thể làm gì ở đây?

Tôi đã nghĩ rằng tôi có thể cho phép người dùng dữ liệu www đăng nhập dưới dạng sftp, để nó có thể sửa đổi các tệp / thư mục mà dữ liệu www sở hữu trong / var / www. Nhưng vì một số lý do, tôi nghĩ rằng đây sẽ là một động thái ngu ngốc.


Tôi không nghĩ rằng nó có thể mà không thay đổi sự cho phép.
Unnikrish Nam

Câu trả lời:


15

Những gì tôi đã làm là chroot người dùng của tôi vào thư mục nhà của họ và sau đó được sử dụng mount --bindđể tạo một liên kết đến nó trong thư mục nhà của họ.

Sau đó tôi đã sử dụng setfaclđể đảm bảo www-dataduy trì quyền ghi trên các tệp mới trong thư mục. Hiệu ứng này sẽ tái diễn /var/www, đó là những gì bạn muốn làm.

Bằng cách thiết lập g+strên thư mục, tất cả các tệp và thư mục mới được tạo trong đó sẽ kế thừa quyền sở hữu nhóm từ cha mẹ của nó.

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

Điều đó sẽ làm các trick.

Làm cho thú cưỡi của bạn bền bỉ

Rõ ràng là bạn muốn thú cưỡi của mình vẫn ở đó khi bạn khởi động lại máy chủ. Nó đơn giản như việc thêm các gắn kết vào của bạn /etc/fstab. Không phải tất cả các nhà cung cấp cho phép bạn chạm vào tập tin này, nhưng hầu hết làm.

Chỉ cần thêm các dòng như thế này:

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

Bạn có thể muốn khởi động lại để đảm bảo nó hoạt động.


1
Thực tế là khi bạn chmod g + s / home / someuser / www và chown someuser: www-data / home / someuser / www, nó cũng sẽ chuyển các quyền và chủ sở hữu tương tự: nhóm sang / var / www. Điều này là do gắn kết --bind. Cảm ơn rất nhiều!
bashffy

2
Tôi có thể trả bia ở đâu? Có vẻ như tất cả đều tốt và dường như Apache không phàn nàn về người dùng sftp với tư cách là chủ sở hữu của / var / www. Tôi đã rất gần với giải pháp của bạn khi tôi đi theo con đường ACL, nhưng tôi đã bỏ phần tự tử ra: bạn thật kỳ diệu, cảm ơn!
bashffy
Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.