Wyobraź sobie konfigurację serwera współdzielonej firmy hostingowej, w której wielu (~ 100) klientów ma dostęp shellowy do jednego serwera.
Wiele internetowych „programów” zaleca pliki chmod 0777 . Niepokoi mnie to, że nasi klienci nierozsądnie postępują zgodnie z tymi samouczkami, otwierając swoje pliki przed innymi naszymi klientami. (Z pewnością sam nie używam cmod 0777
niepotrzebnie!) Czy istnieje sposób, aby upewnić się, że klienci mają dostęp tylko do własnych plików i uniemożliwiają im dostęp do plików czytelnych dla świata od innych użytkowników?
Zajrzałem do AppArmor , ale jest to bardzo ściśle powiązane z procesem, który wydaje się zawodzić w tym środowisku.
linux
security
file-permissions
shared-hosting
Phillipp
źródło
źródło
chmod files 0777
są absolutnie konieczne, tj. Dotyczą pierwotnej przyczyny problemu, a nie objawu, że w ten sposób każdy może czytać pliki innych osób. Wiele razy zalecenie „ zezwól na dostęp” jest po prostu tanim sposobem na uniknięcie wezwań pomocy technicznej lub braku technicznej umiejętności prawidłowego konfigurowania uprawnień. W prawie żadnym przypadku nie musiałem ustawiać plików0777
ani udzielać aplikacjom pełnego dostępu do konta root na żądanie. Edukacja użytkowników i / lub dostawców bardzo pomaga tutaj.suexec
lubmpm_itk
lub podobny.chmod 0777
plików. Myślę, że denerwuje się, że idąloltoturialz.com/php_problems
i osiadająchmod 0777
same, ślepo śledząc źle napisany artykuł. Naprawdę nie ma sposobu, aby powstrzymać ich przed tym lub zapobiec ich zdenerwowaniu, gdy ktoś kradnie ich rzeczy.Odpowiedzi:
Umieść ograniczony i niezmienny katalog między światem zewnętrznym a chronionymi plikami, np
lub
/home/joe/restricted/public_html
.Ograniczony oznacza, że tylko użytkownik i być może serwer sieciowy może go odczytać (np. Tryby
0700
/0750
lub niektóre listy ACL ).Niezmienność można wykonać za pomocą
chattr +i
lub poprzez zmianę własności na coś podobnegoroot:joe
.Łatwym sposobem na utworzenie tej hierarchii na Ubuntu byłoby edytowanie
/etc/adduser.conf
i ustawienieGROUPHOMES
nayes
.źródło
Istnieje opcja, którą możesz rozważyć (w zależności od tego, ile pracy chcesz w tym celu wykonać).
Jak już napisali inni, „normalnie” nie można uniemożliwić komuś z dostępem do powłoki dostępu do plików do odczytu.
Jednak możesz chrootować je do ich własnego domu, po prostu ograniczając dostęp do powłoki, po pierwsze, tylko do katalogu głównego, który chcesz (AKA katalog domowy), a po drugie, uniemożliwić użytkownikom wykonywanie wszystkiego, czego nie chcą.
Podjąłem podobne podejście, gdy miałem jednego użytkownika, aby mieć dostęp do plików internetowych, ale nie chciałem, aby widział inne pliki poza folderem internetowym.
Miało to duży narzut, było bałaganem w konfiguracji i za każdym razem, gdy coś aktualizowałem, zrywało się.
Ale na dziś myślę, że można to osiągnąć dość łatwo dzięki opcji chroot OpenSSH :
WikiBooks OpenSSH
źródło
arch-chroot
Komenda nie wydaje się, że pokrycie. Jest też kwestia zmarnowanego miejsca na dysku ze wszystkimi duplikatami. Nie twierdzę, że nie da się tego zrobić, tylko że może być nieco bardziej skomplikowane.Odkryłem, że listy kontroli dostępu POSIX pozwalają, jako administrator systemu, chronić użytkowników przed najgorszym ich niewiedzą, zastępując zwykłe uprawnienia systemu plików grupy użytkowników, bez dużej szansy na złamanie czegoś kluczowego .
Mogą być szczególnie przydatne, jeśli na przykład (fi) potrzebujesz, aby katalogi domowe były dostępne na całym świecie, ponieważ zawartość WWW musi być dostępna dla apache
~/public_html/
. (Chociaż za pomocą list ACL można teraz zrobić odwrotnie, usunąć dostęp dla wszystkich i użyć konkretnej skutecznej listy ACL dla użytkownika apache).Tak, znający się na rzeczy użytkownik może je ponownie usunąć / zastąpić, są po prostu tak rzadkie, że jest to mało prawdopodobne, a ci użytkownicy, którzy zazwyczaj nie są tymi, którzy
chmod -R 777 ~/
tak wygodnie, tak?Musisz zamontować system plików z
acl
opcją zamontowania:W wielu dystrybucjach domyślnie jest tworzenie grup użytkowników, każdy użytkownik ma swoją grupę podstawową, a ja ustawiłem wszystkich użytkowników w grupie dodatkowej o niewyobrażalnej nazwie
users
.Korzystanie z list ACL jest teraz trywialne, aby uniemożliwić innym użytkownikom dostęp do katalogów domowych:
Przed:
Teraz ustaw efektywne uprawnienia do katalogu dla członków
users
grupy na0
brak odczytu, zapisu i dostępu:+
Znak oznacza obecność tam ustawienia ACL. Igetfacl
może potwierdzić, że:group:users:---
Pokazują, że grupa skutecznie bez prawa dostępu, pomimo regularnych uprawnień dla drugiej istotyother::rwx
I testowanie jako użytkownik1:
Drugim powszechnym rozwiązaniem w systemach współdzielonych jest posiadanie na żądanie automountera katalogów domowych montowanych na żądanie i serwera dedykowanego do dostępu do powłoki. To nie jest głupi dowód, ale zazwyczaj tylko garstka użytkowników będzie zalogowana jednocześnie, co oznacza, że tylko katalogi domowe tych użytkowników są widoczne i dostępne.
źródło
Linux Containers (LXC) może być najlepszą kombinacją chroot i osobnego systemu.
Są bardziej jak zaawansowany chroot, a nie wirtualizacja, ale można łączyć różne systemy operacyjne na jednym serwerze.
Możesz dać użytkownikowi kompletny system operacyjny i tam go zrootować, więc gdy się zaloguje, idzie do swojego kontenera. Możesz także ograniczyć użycie procesora i pamięci.
Stéphane Graber, autor LXC, ma fajny samouczek, który pomoże Ci zacząć.
źródło
Na przykład, jeśli chcesz, aby użytkownik miał dostęp tylko do własnego
home
katalogu, powinieneś:Teraz
/home/username
jest widoczny tylko dla właściciela. Aby/etc/adduser.conf
ustawić tę opcję jako domyślną dla wszystkich nowych użytkowników, edytuj i ustawDIR_MODE
na0700
zamiast0755
domyślnej.Oczywiście, jeśli chcesz zmienić domyślny DIR_MODE, zależy to od twojej dystrybucji, na której opublikowałem
Ubuntu
.edytować
Jak poprawnie wspomniano @Dani_l , ta odpowiedź jest poprawna, ponieważ NIE są one czytelne dla świata.
źródło
Po prostu pedantyczny - Nie, nie ma.
@Marek udzielił poprawnej odpowiedzi , ale twoje pytanie jest niepoprawne - nie możesz uniemożliwić dostępu do plików „czytelnych dla świata”.
Albo są czytelne na całym świecie, albo nie. @ Odpowiedź Marka jest poprawna, aby NIE były czytelne dla świata.
źródło
W podanych dotychczas odpowiedziach nie widzę wzmianki o „ograniczonej powłoce”.
ln / bin / bash / bin / rbash
Ustaw to jako powłokę logowania.
źródło
Jeśli serwer WWW działa jako ten sam użytkownik i grupa dla każdej hostowanej domeny, trudno jest (jeśli nie niemożliwe) zabezpieczyć konfigurację.
Chcesz, aby niektóre pliki były dostępne dla użytkownika i serwera WWW, ale nie dla innych użytkowników. Ale gdy tylko serwer WWW będzie mógł uzyskać do nich dostęp, inny użytkownik może je odczytać, umieszczając dowiązanie symboliczne do pliku na swojej stronie internetowej.
Jeśli możesz uruchomić każdą witrynę jako osobny użytkownik, stanie się to dość proste. Każdy klient będzie teraz miał dwóch użytkowników w systemie, jednego dla serwera WWW i jednego dla dostępu do powłoki.
Utwórz grupę zawierającą tych dwóch użytkowników. Teraz utwórz katalog z tą grupą i rootem użytkownika. Ten katalog powinien mieć uprawnienia
750
, co oznacza, że root ma pełny dostęp, a grupa ma dostęp do odczytu i wykonywania. W tym katalogu możesz utworzyć katalogi domowe dla każdego z dwóch użytkowników. Oznacza to, że katalog domowy użytkownika nie będzie już miał formy/home/username
, ale coś z co najmniej jednym dodatkowym składnikiem katalogu. To nie jest problem, nic nie wymaga nazywania katalogów domowych zgodnie z tą konkretną konwencją.Uruchomienie stron internetowych z różnymi użytkownikami i grupami może być trudne, jeśli używasz vhostów opartych na nazwach. Jeśli okaże się, że separacja może działać tylko z vhostami opartymi na IP i nie masz wystarczającej liczby adresów IP dla każdej witryny, możesz hostować każdą witrynę pod adresem IPv6 i umieścić odwrotne proxy dla wszystkich z nich na Adres IPv4.
źródło