Zarządzanie uprawnieniami do katalogu w systemie Linux i SFTP


Dzień dobry; Mam serwer sieciowy RHEL 5.7 skonfigurowany tak, aby zezwalał tylko na SSH/SFTP dla niektórych grup. Chciałbym, aby menedżerowie treści przesyłali treści do swoich katalogów i aby te treści dziedziczyły prawa własności użytkowników/grup do katalogu, niezależnie od metody przesyłania lub aplikacji. Na przykład:
  • John w zespole "sieć" dla praw SSH/SFTP i "finanse" aby uzyskać uprawnienia do katalogu i przesłać do katalogu „materiał internetowy” przez SFTP.
  • Katalog „materiał internetowy” ma prawo dostępu „2760” (rwxrws ---) i jest właścicielem „apache: finanse” .

Jeśli Jan pobierze aktualizację do istniejącego pliku w formacie

„materiał internetowy”
, własność pliku pozostaje

„apache: finanse”
... Jeśli Jan prześle nowy plik do

„materiał internetowy”
, własność pliku

„John: finanse”

.
Chcę, aby każdy plik od Jana został przesłany do

„materiał internetowy”

zmienić właściciela katalogu. Próbowałem z setuid i setgid, ale żadna własność nie została zaakceptowana. Widziałem wzmianki w ServerFault o używaniu list ACL lub chrootowanego więzienia dla SFTP, ale jeszcze ich nie skonfigurowałem i przetestowałem i nie wiem, czy są one opłacalnym rozwiązaniem (mogą być, po prostu nie wiem, ponieważ ja nigdy). Będziemy wdzięczni za wszelkie przemyślenia i pomoc.
Zaproszony:
Anonimowy użytkownik

Anonimowy użytkownik

Potwierdzenie od:

Problem polega na tym, że sftp uruchamia się jako identyfikator użytkownika - najpierw klient sftp ssh łączy się z docelowym hostem jako podany użytkownik, a następnie uruchamia sftp-server. Ponieważ serwer sftp działa jako zwykły użytkownik, nie ma możliwości „oddania” pliku (zmiany właściciela pliku).
Jeśli jednak możesz użyć scp i przypisać parę kluczy każdemu użytkownikowi, możesz to obejść. Wymaga to dodania klucza użytkownika do pliku głównego ~/.ssh/authoris_keys z parametrem command =, aby zmusić go do uruchomienia skryptu, który czyści i modyfikuje argumenty w programie serwera scp. Użyłem tej techniki wcześniej, aby skonfigurować anonimową skrzynkę dropbox scp, która pozwoliła każdemu wysłać plik i zapewnić, że nikt nie może odebrać wysłanych plików, a także zapobiegać nadpisywaniu.
Jeśli jesteś otwarty na tę technikę, daj mi znać, a uzupełnię ten post szybkim przepisem.
Edycja: Na podstawie komentarzy, oto mój przepis, którego pierwotnie użyłem, aby skonfigurować Dropbox Anonymous. Ale musi też działać w tym celu.
Jeśli chcesz, aby Jan napisał, aby przesłać pliki do
/var/www/webstuff
a wszystkie zapisane w nim pliki są własnością identyfikatora użytkownika
         apache
, następnie:
1) Utwórz parę kluczy ssh:
ssh-keygen -t rsa -f john-scp-key  

2) Edytuj plik klucza publicznego „john-scp-key.pub” i wstaw na początku instrukcję „command =” w następujący sposób:
command="/usr/local/bin/strictscp ^/var/www/webstuff" ssh-rsa AAAA..... (reset
of key follows)

3) Dodaj zawartość
         john-scp-key.pub
do
         ~apache/.ssh/authorized_keys
file (utwórz plik, jeśli nie istnieje, upewniając się, że katalog .ssh i klucz_autoryzowany należą do
         apache
, i nie jest dostępny do nagrywania ani przez grupę, ani przez świat)
4) Utwórz skrypt
/usr/local/bin/strictscp
w następujący sposób:
#!/bin/sh
read cmd arg1 arg2 <<EOT
$SSH_ORIGINAL_COMMAND
EOT
if [ "$cmd" = scp -a "$arg1" = -t ] && echo "$arg2" |grep "$1" >/dev/null 2>&1
then
eval $cmd $arg1 $arg2
fi

5) Teraz podaj plik klucza prywatnego
         john-scp-key
Johna i poproś go o skopiowanie plików na Twój serwer WWW w następujący sposób:
scp -i john-scp-key some_file.html apache@yourserver:/var/www/webstuff/

Działa to w ten sposób: kiedy używasz scp do kopiowania pliku na serwer, klient scp używa ssh do wykonania "scp -t/ścieżka/nazwa" na serwerze. Korzystając z pary kluczy, można zastąpić wykonywane polecenie i wymusić uruchomienie określonego polecenia podczas korzystania z tego klucza. Pierwotnie żądane polecenie wraz z argumentami znajduje się w zmiennej środowiskowej $ SSH_ORIGINAL_COMMAND. Więc zwracamy uwagę
         COMMAND=
do skryptu, który sprawdza poprawne argumenty (w tym przypadku sprawdza, czy trzeci argument to konkretny katalog, w którym chcemy zapisać dane), aby ten przełącznik był odpowiedni tylko do zamierzonego celu i nie można go używać do uruchamiania dowolnych poleceń na serwerze ...
Możesz zablokować
         strictscp
skryptu, sprawdzając, czy plik docelowy istnieje, czy nie, a także możesz dodać
         chgrp
na koniec, aby ustalić własność pliku dla grupy (pod warunkiem, że
         apache
jest członkiem tej grupy).
Mam nadzieję, że to pomoże - jeśli napotkasz problemy, daj mi znać, a zobaczę, czy mogę poprawić tę odpowiedź.

Aby odpowiedzieć na pytania, Zaloguj się lub Zarejestruj się