Jak zapobiec, aby nowy użytkownik zrobił coś niebezpiecznego?

31

Niedawno zainstalowałem serwer Ubuntu na moim serwerze, aby wypróbować system Linux jako nowy użytkownik. Postępowałem zgodnie z samouczkiem na temat konfigurowania serwera WWW, który powiedział, że potrzebuję chmod 777katalogu serwera WWW, aby można go było zapisać.

W każdym razie utworzyłem nowe konto dla jednego kolesia, aby umożliwić mu przeglądanie niektórych plików na serwerze, które umieściłem w jego katalogu domowym:

adduser francis

Po utworzeniu konta sprawdziłem, z jakim dostępem ma on

groups francis

Napisał „francis: francis”, więc nie jest to problem, pomyślałem, że ubuntu domyślnie nie włączył go do żadnej grupy, co ma sens, stworzył go bez dodatkowych uprawnień ze względów bezpieczeństwa, więc wszystko jest w porządku i eleganckie. Tydzień później, z absolutnym i całkowitym przerażeniem, dowiedziałem się, że chociaż nie mógł robić takich rzeczy jak SUDO lub robić bałaganu w katalogach systemowych, miał pełny dostęp do prawie wszystkiego innego na serwerze. Na przykład miał pełny dostęp do odczytu / zapisu do moich plików serwera WWW w / var / www (a więc haseł przechowywanych w plikach konfiguracyjnych php itp.), Mimo że katalog ten NIE znajduje się w jego katalogu domowym i nigdy nie dodałem go do żadnych grup, które mogłyby uzyskać dostęp do tego katalogu, ani nie przyznałem mu żadnego specjalnego dostępu do czegokolwiek po wykonaniu adduser.

W każdym razie, co się tutaj dzieje? Jak zabić jego dostęp do czegoś ważnego? Nie powinien mieć dostępu do takich rzeczy jak / media lub / var / www. Myślałem, że nowi użytkownicy domyślnie nie mogą robić nic niebezpiecznego lub węszyć w miejscach, w których nie powinni być.

Podsumowując, muszę tylko pozwolić mu na dostęp do katalogów, które ręcznie określam + do katalogów, które musi poprawnie funkcjonować (jego domowy katalog, vim, nano itp.)

Dziękuję Ci

Askerman
źródło
30
Robisz chmod 777 i pytasz, dlaczego każdy może czytać tam pisać? przeczytaj stronę podręcznika dla chmod
Anwar
16
Tak, 777 to twój problem z wielu powodów.
Android Dev
21
@Askerman - Nie, kiedy dajesz 777, wszyscy może uzyskać dostęp do wszystkiego , proszę przeczytać to: linux.com/learn/understanding-linux-file-permissions
Android Dev,
11
Wszyscy popełniamy błędy, zwłaszcza gdy uczymy się w zupełnie nowym środowisku. To dobry sposób na naukę, zdecydowanie rozsądnie jest porzucić swoje wyobrażenia o tym, jak działa system Windows podczas korzystania z systemu operacyjnego opartego na Linuksie. Po cofnięciu uprawnień powinieneś zauważyć, że użytkownik nie może zmienić niczego, czego nie powinien. Jeśli używałeś chmodgdzie indziej, możesz mieć inne problemy.
Arronical
8
Do waszej wiadomości głosuję za tym pytaniem, ponieważ jest ono dobre dla nowych osób. I to nieporozumienie jest prawdopodobnie częstsze niż nam się wydaje. To także dobry przykład, dlaczego nie powinieneś po prostu kopiować poleceń znalezionych w Internecie (nawet tutaj), nie wiedząc, co one robią.
Aaron

Odpowiedzi:

40

To jest zgodne z przeznaczeniem. I gorzej. chmod 777 oznacza ... „Chciałbym, aby właściciel, każdy w jego grupie i ktokolwiek w ogóle miał uprawnienia do odczytu, zapisu i wykonywania”

Co jest okropne.

A dla serwera WWW 777 nie jest optymalny. 755 (Właściciel ma pełną grupę uprawnień, a inni mają odczyt i wykonanie) jest częstym ustawieniem domyślnym, ale z tego, co powiedziałeś, że chcesz przynajmniej odczyt-zapis lub odczyt-zapis wykonać dla właściciela (użytkownika serwera WWW), a może grupa i brak uprawnień dla użytkownika. Bardziej kompletne pytania dotyczą tego, jakie odpowiednie poziomy uprawnień dotyczą błędu serwera ale rozważmy coś takiego jak 640 lub 740.

powiedziawszy, możesz również umieścić użytkownika w jego małym świecie - konfigurując chroota, aby trzymał użytkownika we własnej przestrzeni w systemie. W tym celu krążą przewodniki - na przykład doskonała odpowiedź oli tutaj, która może być opcją w zależności od potrzeb.

Journeyman Geek
źródło
4
Drobny punkt: „właściciel, każdy w jego grupie ...” - właściciel pliku niekoniecznie musi należeć do grupy plików.
alex_d
2
Miły. Podoba mi się, że odniosłeś się do kanonicznej odpowiedzi na servfault.
Elder Geek
3
Historyczny żargon dla tej sytuacji brzmi: „ świat do odczytu / zapisu”.
Kaz
19

Zasadniczo rozkłada się w następujący sposób:

R = 4 (read)
W = 2 (write)
X = 1 (execute)

Zatem uprawnienia do odczytu to 4, odczyt i zapis to 6, odczyt i wykonanie to 5, a wszystkie (odczyt, zapis, wykonanie) to 7. W ten sposób obliczasz wartość oktetu uprawnień dla właściciela, grupy właściciela lub wszyscy.

Podczas stosowania tych uprawnień chmoddo do lokalizacji pliku lub katalogu, obliczone powyżej liczby są stosowane w ten sposób, z oktetem dla właściciela, grupy i wszystkich:

     $ chmod _ _ _ <file or directory>
             | | |
owner--------  | |
owner's group--  |
everyone---------

Więc jeśli chciałbym dać sobie i mojej grupie uprawnienia do odczytu, zapisu i wykonywania uprawnień do folderu, który posiadałem, ale nie chciałem, aby wszyscy mogli go nawet przeczytać, użyłbym:

$ chmod 770 myDirectory

Aby uzyskać więcej informacji, sprawdź stronę podręcznika dla chmod :

$ man chmod
Aaron
źródło
Jeśli nie pamiętasz bitów, które należy dodać, aby uzyskać odpowiednie uprawnienia we właściwej kolejności, możesz także użyć prawdopodobnie łatwiejszej do odczytania chmod ugo+rwx <...>. Postacie oznaczają u Ser g rupy, O Ther; r ead, w rite, e x ecute. Możesz użyć „-”, aby usunąć (np chmod go-wx <...>.:). Pamiętaj, że powoduje to tylko dodanie lub usunięcie dokładnie tego, co wpisujesz. chmod ugo+rwx <file>; chmod u+rwx <file> nie usuwa dostępu dla grupy / innych.
ReactiveRaven
@ReactiveRaven To świetny punkt. Ale OP był oczywiście zdezorientowany co do tego chmod 777, co się stało , więc w tym miejscu skierowałem moje wyjaśnienie.
Aaron
@Zanna Dobry telefon!
Aaron
6

Jak wspomnieli inni, nie powinieneś mieć uprawnień ustawionych na 777

Oto pomocny arkusz, którego używam.

+-----+---+--------------------------+
| rwx | 7 | Read, write and execute  |
| rw- | 6 | Read, write              |
| r-x | 5 | Read, and execute        |
| r-- | 4 | Read,                    |
| -wx | 3 | Write and execute        |
| -w- | 2 | Write                    |
| --x | 1 | Execute                  |
| --- | 0 | no permissions           |
+------------------------------------+
You can use the octal notation, where the three digits correspond to the user, then group, then other. 
Perhaps this might help 
+------------+------+-------+
| Permission | Octal| Field |
+------------+------+-------+
| rwx------  | 700  | User  |
| ---rwx---  | 070  | Group |
| ------rwx  | 007  | Other |
+------------+------+-------+
Dlaczego Ayala?
źródło
1
Miły! Jest to duża pomoc dla osób (takich jak ja), które są uczniami wizualnymi.
Aaron
3

Aby udostępnić pliki osobie, której podałeś login, nie musisz nic robić. Podczas domyślnej instalacji Debiana użytkownicy mają dostęp do swoich katalogów domowych.

Na przykład,

$ ls -ld ~
drwxr-xr-x 65 zwets zwets 4096 Sep 29 12:06 /home/zwets

Uprawnienia do mojego katalogu domowego są odczytywane (r) i dostępne (x) dla każdego użytkownika w moim systemie. Tylko ja dodatkowo mam napisać (w) .

Ponadto domyślnym umaskw Ubuntu jest to, że pliki i katalogi tworzone przez użytkowników są domyślnie czytelne na całym świecie . Możesz ustawić umaskna077 jeśli nie chcemy.

Co to oznacza, że ​​w domyślnej konfiguracji, jeśli użytkownik youchce udostępnić ~/README.txtmi dokument , nie youtrzeba nic robić. Mogę to po prostu wyświetlić:

$ who am i
zwets    pts/26       2016-09-29 08:05 (:pts/19:S.6)
$ ls -l ~you/README.txt
-rw-r--r-- 1 you you 24 Sep  8 11:23 /home/you/README.txt
$ cat ~you/README.txt
You's shared thoughts.

Nie mogę edytować ani usunąć pliku, ale mogę go skopiować do lokalizacji, w której mam uprawnienia do zapisu. Następnie jestem właścicielem kopii:

$ echo "Adding my thoughts." >> ~you/README.txt
bash: /home/you/README.txt: Permission denied
$ rm ~you/README.txt
rm: remove write-protected regular file '/home/you/README.txt'? yeah!
rm: cannot remove '/home/you/README.txt': Permission denied
$ cp ~you/README.txt ~zwets
$ ls -l ~/README.txt
-rw-r--r-- 1 zwets zwets 24 Sep  29 14:09 /home/zwets/README.txt

Są dobre powody, dla których większość systemu jest domyślnie czytelna na całym świecie, jak wyjaśniłem w innej odpowiedzi na AskUbuntu . Jednak w systemie współdzielonym może być sensowne, aby katalogi domowe były niedostępne dla osób niebędących właścicielami:

$ chmod o-rwx ~
$ ls -l ~
drwxr-x--- 65 zwets zwets 4096 Sep 29 12:06 /home/zwets

... ponieważ wielu użytkowników najwyraźniej nie zna domyślnych ustawień - QED ;-). Rozsądniej byłoby jednak uświadomić użytkownikom, że uprawnienia do plików nie chronią tajemnic.

zwets
źródło
1

W Ubuntu każdy użytkownik ma uprawnienia administratora, które są dodawane do grupy „sudo”. Sprawdź to, aby upewnić się, że żaden inny użytkownik nie zostanie dodany w tej grupie.

Aby zabezpieczyć swoje pliki i katalog przed innymi użytkownikami, możesz ustawić uprawnienia zgodnie z sugestią pana Journeyman Geek w powyższej odpowiedzi.

Możesz także użyć specjalnych uprawnień, aby zabezpieczyć swoje pliki i katalogi przed innymi.

Puneet Dixit
źródło