Zmiana uprawnień do zapisu dla więzionego SFTP odmawia logowania

14

Sprawdziłem wiele witryn i forów, jak skonfigurować użytkownika SFTP, który jest więziony w określonym katalogu za pomocą CHROOT. Oto kroki, które wykonałem, ale nie mogę uzyskać uprawnień do zapisu do pracy.

Ustawiać

sshd_config

#Subsystem sftp /usr/lib/openssh/sftp-server
Subsystem sftp internal-sftp


Match group webmaster
        X11Forwarding no
        ChrootDirectory %h
        AllowTcpForwarding no
        ForceCommand internal-sftp

Utwórz folder

mkdir /var/www/sites

Utwórz użytkownika i grupę

useradd uploader
passwd uploader
usermod -d /var/www/sites uploader
groupadd webmaster uploader
groupadd www-data uploader

Uprawnienia i własność

chown root:root /var/www
chmod 755 /var/www/sites

Teraz przy tych ustawieniach użytkownik przesyłający może SFTP przenieść do katalogu domowego, ale nie może zapisać do katalogu.

Występują 2 typowe błędy: albo nie mogę się zalogować, albo nie mam uprawnień do zapisu.

Błąd logowania

Error:    Network error: Software caused connection abort
Error:    Could not connect to server


Changing permissions of /var/www/sites to 775 or 777 causes login error.
chown /var/www/sites to uploader:root causes login error.
chwon root:webmaster or root:www-data I have no write permissions

Staram się to rozgryźć i jeśli ktoś mógłby skierować mnie w dobrym kierunku, byłbym bardzo wdzięczny.

Dziękuję Ci.

onggie
źródło

Odpowiedzi:

16

Znalazłem rozwiązanie. Użytkownik jest więziony /var/www/sites. Następnie utworzyłem inny folder /var/www/sites/site1.

Używam:

chown root:webmaster /var/www/sites/site1 
chmod 775 /var/www/sites/site1

Dzięki temu katalog domowy miał odpowiednie uprawnienia do logowania, a następnie mógł zapisywać do następnego folderu w górę.

Jeśli użytkownik potrzebuje dostępu do zapisu /var/www/sites, musisz uwięzić użytkownika, /var/wwwktóry ma root:rootwłasność i uprawnienia 755. Następnie musisz przekazać /var/www/siteswłasność root: (twoja grupa) i uprawnienia 775.

onggie
źródło
1

Być może najlepszym rozwiązaniem jest:

mkdir /var/www/sites/myfirstuser/hisownsite
mkdir /var/www/sites/myseconduser/hisownsite

...

chown root:root /var/www/sites /var/www/sites/{myfirstuser,myseconduser} && chmod 755 /var/www/sites/{myfirstuser,myseconduser}

chmod 775 /var/www/sites/myfirstuser/hisownsite
chmod 775 /var/www/sites/myseconduser/hisownsite
chgrp www-data /www/sites/myfirstuser/hisownsite /var/www/sites/myseconduser/hisownsite

Dodaj użytkowników:

useradd -d /var/www/sites/myfirstuser -s /bin/false -g www-data  dev1
useradd -d /var/www/sites/myseconduser -s /bin/false -g www-data dev2
passwd dev1
passwd dev2

Następnie dla każdego utworzonego użytkownika dodaj znacznik ssh w następujący sposób: (możesz również użyć dyrektywy „Dopasuj grupę” jak w przykładzie zamiast „Dopasuj użytkownika”)

Match User dev1
    ChrootDirectory %h
    ForceCommand internal-sftp
    AllowTcpForwarding no

Match user dev2
    ChrootDirectory %h
    ForceCommand internal-sftp
    AllowTcpForwarding no

Dzięki temu możesz zarządzać wszystkimi potrzebnymi użytkownikami w środowisku chroot.

Hth, Fabrizio

fabreg
źródło
Re twój ostatni blok kodu: Matches obsługują wiele celów na listach oddzielonych przecinkami, dzięki czemu moglibyśmy znacznie uprościć / uporządkować to, mając jeden zestaw przesłonięć dla obu użytkowników, według nagłówkaMatch User dev1,dev2
underscore_d
1
Jak to ustawić, aby były zablokowane w folderze, do którego mają dostęp do odczytu / zapisu?
Kevin B Burns