chrootowany użytkownik sftp z uprawnieniami do zapisu do / var / www

10

Czuję się zagubiony w tej konfiguracji, którą próbuję wdrożyć. Mam nadzieję, że ktoś z was może mi pomóc: bardzo wdzięczny.

Podstawowe informacje

Serwer to Debian 6.0, ext3, z Apache2 / SSL i Nginx z przodu jako odwrotne proxy. Muszę zapewnić dostęp sftp do katalogu głównego Apache (/ var / www), upewniając się, że użytkownik sftp jest chrootowany do tej ścieżki z uprawnieniami RWX.

Wszystko to bez modyfikowania domyślnego uprawnienia w / var / www.

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

Inside / 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

Co próbowałem

  1. utworzył nową grupę secureftp
  2. utworzył nowego użytkownika sftp, dołączonego do grup danych bezpiecznychp i www również z powłoką nologin . Homedir jest /
  3. edytowałem sshd_config za pomocą
Subsystem sftp internal-sftp 
AllowTcpForwarding no 
Match Group <secureftp> 
      ChrootDirectory /var/www 
      ForceCommand internal-sftp

Mogę zalogować się z użytkownikiem sftp, wyświetlać listę plików, ale nie można wykonywać żadnych operacji zapisu. Użytkownik Sftp jest w grupie danych www, ale uprawnienia w / var / www są odczytywane / czytane + x dla bitu grupy, więc ... To nie działa.

Próbowałem też z ACL, ale ponieważ stosuję uprawnienia ACL RWX dla użytkownika sftp do / var / www (katalogi i pliki rekurencyjnie), zmieni to również uprawnienia unix, czego nie chcę.

Co mogę tutaj zrobić?

Myślałem, że mógłbym umożliwić użytkownikowi www-data logowanie się jako sftp, aby mógł modyfikować pliki / katalogi, które www-data posiada w / var / www. Ale z jakiegoś powodu uważam, że byłby to głupi ruch z punktu widzenia bezpieczeństwa.

bashintosh
źródło
Nie sądzę, że jest to możliwe bez zmiany pozwolenia.
Unnikrishnan

Odpowiedzi:

15

To, co zrobiłem, to chrootowanie moich użytkowników do ich katalogów domowych, a następnie mount --bindtworzenie linków do nich w ich katalogach domowych.

Następnie setfaclupewniłem się, że www-datazachowuje uprawnienia do zapisu nowych plików w katalogu. Ten efekt powróci w /var/wwwto, co chcesz zrobić.

Ustawiając g+skatalog, wszystkie nowe pliki i katalogi utworzone w nim odziedziczą własność grupy od jego rodzica.

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

To powinno wystarczyć.

Uczyń swoje wierzchowce trwałymi

Oczywiście chcesz, aby twoje mounty nadal tam były podczas restartu serwera. To tak proste, jak dodawanie uchwytów do swojego /etc/fstab. Nie wszyscy dostawcy pozwalają dotknąć tego pliku, ale większość tak.

Po prostu dodaj takie linie:

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

Możesz zrestartować komputer, aby upewnić się, że działa.

Steen Schütt
źródło
1
Faktem jest, że kiedy przeskoczysz g + s / home / someuser / www i zmienisz someuser: www-data / home / someuser / www, przeniesie on również te same uprawnienia i właściciela: group do / var / www. Wynika to z mount --bind. Wielkie dzięki!
bashintosh,
2
Gdzie mogę ci zapłacić piwo? Wygląda na to, że wszystko jest w porządku, a Apache nie narzeka na użytkownika sftp jako właściciela / var / www. Byłem bardzo blisko twojego rozwiązania, kiedy poszedłem drogą ACL, ale pominąłem część suid: jesteś magiczny, dzięki!
bashintosh,