Co może pójść nie tak, jeśli wyłączymy selinux [zamknięte]

9

Odziedziczyliśmy kilka używanych serwerów od innego zespołu. Niektóre z nich mają włączony SELinux, niektóre nie. Z powodu SELinuksa mamy problem z konfiguracją ssh bez hasła, naszego serwera WWW itp. Znaleźliśmy obejście tej strony stosu wymiany , która ma działać:

restorecon -R -v ~/.ssh

Ponieważ jednak nie potrzebujemy uruchamiania SELinuksa do tego, co robimy, może być łatwiej go wyłączyć, niż dla nas, aby pamiętać, że każdy powinien uruchamiać powyższe polecenie cmd na dowolnym katalogu, który potrzebuje uprawnień.

Czy możemy wyłączyć SELinux bez żadnych konsekwencji w przyszłości, czy lepiej po prostu ponownie zilustrować serwer? Należy zwrócić uwagę na jedną rzecz; nasza grupa IT jest bardzo zajęta, więc ponowne obrazowanie serwera nie znajduje się wysoko na liście, chyba że jest to absolutnie konieczne (potrzeba bardzo dobrego uzasadnienia biznesowego) ... lub ktoś przekupi swojego szefa butelką szkockiej lub whisky.

AKTUALIZACJA: Dziękujemy za sugestie i porady dla wszystkich. Wszystkie te serwery będą używane jako wewnętrzne serwery programistyczne. Nie będzie żadnego zewnętrznego dostępu do tych maszyn, więc bezpieczeństwo nie jest dla nas najważniejsze. Nasze obecne serwery, których używamy wszystkie (zgodnie z moją najlepszą wiedzą) nie mają włączonego SELinux. Niektóre z tych, które właśnie nabył mój menedżer, to te, które chcemy wyłączyć, więc wszystko w naszym klastrze jest jednolite.

Sklasyfikowany
źródło
1
Odpowiedziałem na podobne pytanie na Android.se: Jak niebezpieczny jest fakt, że SELinux jest w trybie „Permissive”? Czego powinienem się wystrzegać? . Główną różnicą między trybem „Permissive” a wyłączeniem SELinux jest to, że nie będziesz już otrzymywać komunikatów dziennika AVC i że SELinux nie będzie aktualizował etykiet plików, więc będziesz musiał ponownie oznakować pliki przed ponownym włączeniem.
WhiteWinterWolf
"Co może pójść nie tak?"
scai
3
@scai To właściwie dobre pytanie. Jak zauważa Sato Katsura , SELinux jest trudny w użyciu. Fałszywe poczucie bezpieczeństwa jest szkodliwe dla bezpieczeństwa.
Rhymoid

Odpowiedzi:

14

SELinux jest funkcją bezpieczeństwa systemu operacyjnego. Został zaprojektowany w celu ochrony niektórych części serwera przed innymi częściami.

Na przykład, jeśli korzystasz z serwera WWW i masz „podatny” kod, który pozwala osobie atakującej na uruchomienie dowolnych poleceń, SELinux może to złagodzić, uniemożliwiając Twojemu serwerowi dostęp do plików, których nie może zobaczyć.

Teraz już można wyłączyć SELinux i nie powinno nic złamać. Serwer będzie działał normalnie.

Ale wyłączysz jedną z funkcji bezpieczeństwa.

Stephen Harris
źródło
10
SELinux działa dobrze tylko przy prawidłowej konfiguracji. Jednak SELinux jest tak skomplikowany, że nikt nie ma czasu i / lub wiedzy, aby go poprawnie skonfigurować, a zatem kończy się albo na wyłączeniu, albo jako ciągły ból z tyłu dla administratora. Ale wy wciąż inwestujecie w to jako zabezpieczenie .
Satō Katsura,
3
Zgadzam się, że selinux jest PITA do administrowania, ale nadal jest uczciwe i całkowicie dokładne nazywać to funkcją bezpieczeństwa. dla tych, którzy chcą lub muszą poświęcić czas na naukę i administrowanie nim (nie dla mnie), jest to nieocenione - np. sysadmins dla dużej, głośnej strony internetowej, która jest również atrakcyjnym celem dla dzieciaków skryptów na całym świecie.
cas
2
@SatoKatsura Po prostu dlatego, że jest trudny do skonfigurowania lub trudny do zrozumienia, nie uzasadnia wyłączenia mechanizmu bezpieczeństwa. Pod warunkiem, że ten mechanizm bezpieczeństwa jest rzeczywiście potrzebny, co nie zawsze jest łatwe do podjęcia.
scai
@scai Nie powiedziałem, że powinien (lub nie powinien) być wyłączony. Mówię, że podstawowy model SELinuksa jest wadliwy. Niektórzy twierdzą, że wszystkie mechanizmy bezpieczeństwa, które można wyłączyć, są wadliwe.
Satō Katsura
@SatoKatsura tak, dlatego posiadanie haseł jest całkowicie i całkowicie bezcelowe, ponieważ można je wyłączyć (np. Pam lub nss lub po prostu pustym hasłem). BTW, nigdy nie twierdziłem, że powiedziałeś, że selinux powinien być wyłączony. właśnie kwestionowałem twoje twierdzenie, że nie jest to prawdziwa funkcja bezpieczeństwa.
cas
8

Istnieją różne widoki SELinuksa. W wielu przypadkach niektóre aplikacje nie działają dobrze z SELinux, więc ta decyzja jest dyskusyjna (Oracle jest jednym z przykładów).
Ogólnie rzecz biorąc, SELinux jest mechanizmem chroniącym przed kolejną przeszkodą na drodze złego faceta, który chce obalić twój system.

W moich poprzednich rolach jako administrator systemów w dużych firmach ... ogólnie wyłączyłem SELinux. Nie miałem czasu wyśledzić wszystkich błędów SELinuksa na wszystkich systemach używanych przez użytkowników, programistów i menedżerów.

Przed wyłączeniem rzeczy możesz zacząć od ponownego oznakowania plików w systemie z powrotem do tego, czym powinny być. Najłatwiejszą metodą, jaką znalazłem, jest wprowadzenie polecenia:

 # /sbin/fixfiles onboot

LUB

 # touch /.autorelabel

Następnie uruchom ponownie i poczekaj, ponieważ system zajmie tyle samo czasu, aby zweryfikować i zresetować błędne etykiety SELinux w systemie. Po tym możesz być w porządku, ponieważ naprawia i koryguje niezgodne etykiety SELinux, które mogły zostać zmodyfikowane przed próbą administrowania serwerem.

Jednak jeśli nie, system nie ucierpi na tym, że NIE będzie miał SELinux w trybie wymuszania. To tylko dodatkowa warstwa ochrony.

mdpc
źródło
3
dyskusja, nie wyciszenie. Ale całkowicie poprawne; nie wszystkie systemy wymagają selinux.
phyrfox,
+1 za doradzenie, aby spróbować globalnie ponownie oznaczyć pliki przed wyłączeniem SELinux jako rezerwowego. SELinux ma zapobiegać nieoczekiwanemu zachowaniu oprogramowania i użytkowników. W systemach, w których nie ma dokładnie określonego oczekiwanego zachowania, SELinux może rzeczywiście wyrządzić więcej szkody niż pożytku (zasady dostarczane przez system operacyjny starają się być tak ogólne, jak to możliwe, ale czasami to nie wystarcza).
WhiteWinterWolf
Dziękuję Ci! /sbin/fixfiles onbootpracował dla mnie w CentOS, a nie z touch /.autorelabel. Uruchomienie sealert -a /var/log/audit/audit.logpokazuje teraz 0 alertów. @mdpc Jaka jest różnica między tymi dwoma poleceniami?
Joseph K.
5

Mówiąc najprościej, wyłączenie mechanizmów obowiązkowej kontroli dostępu (MAC), takich jak SELinux, nie jest dobrym pomysłem i może postawić cię w niekorzystnej sytuacji pod względem bezpieczeństwa, jeśli złoczyńca skutecznie obejdzie kontrolę dostępu opartą na nazwie, wdrożoną przez Discretionary Access Control (DAC).

Gdyby to ja zrobiłbym coś takiego

semanage fcontext -a -t ssh_home_t ~/.ssh # Adding the policy
restorecon -R -v ~/.ssh # Applying the policy

dla większej pewności co do etykiety typu przypisanej rekurencyjnie od~/.ssh

sjsam
źródło
1
Jest to stylizowany „SELinux”. Linux nie jest akronimem, a część „SE” to inicjalizm.
Rhymoid
@ Rhymoid: To naprawdę dobra notatka. W rzeczywistości to, co napisałem, było przypadkowe.
sjsam
2

Ogólnie rzecz biorąc, nie powinieneś wyłączać SELinux. Istnieją narzędzia, które mogą pomóc Ci zrozumieć, co poszło nie tak. Moim ulubionym jest przykładowe użycie Sealert:

sealert -a /var/log/audit/audit.log

OFC zawsze możesz ustawić SELinux w trybie zezwalającym na debugowanie, ale utrzymywanie wyłączonego lub zezwalającego SELinuksa jest uznawane przez Red Hat za poważną lukę w zabezpieczeniach.

Alex Baranowski
źródło