Korzystam z serwera i muszę przyznać dostęp do odczytu / zapisu do konkretnego katalogu jednemu użytkownikowi. Próbowałem następujące:
sudo adduser abcd
sudo groupadd abcdefg
chown -R .abcdefg /var/www/allowfolder
chmod -R g+rw /var/www/allowfolder
usermod -a -G comments abcd
Powyższe wydaje się działać, ale daje użytkownikowi dostęp tylko do odczytu do reszty serwera.
Jak skonfigurować uprawnienia, aby użytkownik mógł tylko czytać i zapisywać w określonym folderze? Użytkownik powinien również mieć możliwość uruchamiania programów takich jak mysql
.
permissions
files
account-restrictions
Manishearth
źródło
źródło
mysql
zlokalizowany program? Użytkownik musi być w stanie go odczytać oraz wszystkich potrzebnych bibliotek i plików danych.Odpowiedzi:
Ujemne listy ACL
Możesz uniemożliwić użytkownikowi dostęp do niektórych części systemu plików, ustawiając listy kontroli dostępu . Na przykład, aby upewnić się, że użytkownik
abcd
nie może uzyskać dostępu do żadnego pliku w/home
:To podejście jest proste, ale musisz pamiętać, aby zablokować dostęp do wszystkiego, do czego nie chcesz
abcd
mieć dostępu.Chroot
Aby uzyskać pozytywną kontrolę nad tym, co
abcd
można zobaczyć, skonfiguruj chroot , tj. Ogranicz użytkownika do poddrzewa systemu plików.Musisz wykonać wszystkie pliki, których potrzebuje użytkownik (np.
mysql
I wszystkie jego zależności, jeśli chcesz, aby użytkownik mógł uruchomićmysql
) w chroocie. Powiedz, że ścieżka do chroot jest/home/restricted/abcd
;mysql
program musi być dostępny pod/home/restricted/abcd
. Dowiązanie symboliczne wskazujące poza chrootem nie jest dobre, ponieważ na dowiązanie symboliczne ma wpływ więzienie chroot. Pod Linuksem możesz dobrze wykorzystać montowania opraw:Możesz także kopiować pliki (ale wtedy musisz zadbać o ich aktualność).
Aby ograniczyć użytkownika do chroot, dodaj
ChrootDirectory
dyrektywę do/etc/sshd_config
.Możesz to przetestować za pomocą:
chroot --userspec=abcd /home/restricted/abcd/ /bin/bash
Ramy bezpieczeństwa
Możesz także użyć struktur bezpieczeństwa, takich jak SELinux lub AppArmor. W obu przypadkach musisz napisać dość delikatną konfigurację, aby upewnić się, że nie pozostawiasz żadnych dziur.
źródło
/var/www/allowfolder
i jego podkatalogi muszą być dostępne, nie tylko/var/www/allowfolder
same. I odwrotnie, inne pliki nie mogą być dostępne. W rzeczywistości rozwiązanie oparte wyłącznie na uprawnieniach do plików i liście kontroli dostępu nie może całkowicie spełnić wymagań: pozwoliłoby przynajmniej użytkownikowi przetestować, czy dana nazwa istnieje pod/var/www
, ponieważ muszą mieć x uprawnienia/var/www
dostępu/var/www/allowfolder
.Powinieneś użyć
chroot
.chroot
Polecenie zmienia katalog główny, że wszystkie procesy potomne widzieć. Podam przykład, aby pokazać, jak to działa.Zostało to napisane na miejscu; Tak naprawdę nie jestem teraz przed komputerem z systemem UNIX. W tym przykładzie jest to katalog o nazwie
dir
z trzech plików:a
,b
,c
, ils
. Pierwsze trzy to zwykłe pliki.ls
jest dowiązaniem twardym do prawdziwegols
pliku binarnego, dzięki czemu możemy wyświetlać listę plików w chroot.Idę
chroot
dodir
. (Zauważ, że prawdopodobnie zapominam o niektórych katalogach w katalogu głównym).Oto konfiguracja w postaci danych wyjściowych powłoki:
Teraz wejdę
chroot
wdir
. W/bin/bash
Wybiera argumentów co proces ten powinien być prowadzony z nowego katalogu. Domyślnie jest to/bin/sh
.Teraz wychodzimy z
chroot
:Mam nadzieję, że to ilustruje działanie
chroot
polecenia. Zasadniczo, co musisz zrobić, aby rozwiązać problem, to uruchomićchroot
polecenie jako ten użytkownik za każdym razem, gdy się loguje. Być może umieścić go w skrypcie startowym?Hardlink do pliku będzie nadal działał wewnątrz
chroot
, nawet jeśli do tego pliku nie można uzyskać dostępu innymi sposobami (działa to, ponieważ hardlinks wskazują na i-węzły, a nie ścieżki). Aby umożliwić użytkownikowi dostęp np. Domysql
polecenia, należy wykonać:źródło
chmod
. kiedy powiesz „czy nie byłoby łatwiej uruchomić polecenia ... nie tracisz do nich dostępu”, to polecenie brzmichroot
. jeśli wytłumaczysz, co masz na myśli przez „całe środowisko chroot”, lub dlaczego byłby to problem, może zrozumiem lepiej. (uwaga, że można dać dostęp do wszystkich plików wykonywalnych z oneliner:ln /bin/* /path/to/chroot/target
)chroot
sobą lub daję znać, co nie miało sensu. jeszcze lepiej, zrób obie rzeczy. (i przeczytaj strony).