Nie jesteś zalogowany.
Jeśli nie posiadasz konta, zarejestruj je już teraz! Pozwoli Ci ono w pełni korzystać z naszego serwisu. Spamerom dziękujemy!
Prosimy o pomoc dla małej Julki — przekaż 1% podatku na Fundacji Dzieciom zdazyć z Pomocą.
Więcej informacji na dug.net.pl/pomagamy/.
Od jakiegoś czasu analizuje sobie parametry kernela i zbiera mi się ich w pliku sysctl.conf co raz więcej. Postanowiłem sobie poopisywać je i stworzyć taki sysctl.conf z pseudo dokumentacja, która pozwoli na zorientowanie się co tak naprawdę dany parametr robi i za co odpowiada.
Aktualnie mam tam 84 parametry z 1060 dostępnych i celem jest uzbieranie ich tam tak dużo jak się tylko da. Ja zebrałem chyba te najpopularniejsze ale jak nie patrzeć to jest ledwo niecałe 10% całości.
Gdy zabierałem się do pisania tego pliku, nie miałem kompletnie pojęcia o 90% rzeczach, które w nim zawarłem ale po dogłębnej analizie i czytaniu setek linków myślę, że udało mi się w sposób przejrzysty i w miarę zrozumiały opisać pewne zagadnienia. Niemniej jednak mogą być w opisach zawarte bugi lub opis może być kompletnie nietrafiony. Wobec tego czy mógłbym was prosić o przeczytanie tego pliku oraz zastanowienie się czy aby czasem nie nachrzaniłem tam głupot? xD
Oto mój plik syctl.conf : https://github.com/morfikov/sysctl.conf
Druga sprawa to kolejna prośba do was byście wpisali tutaj parametry które zmienialiście w swojej konfiguracji kernela oraz dodali krótki opis dlaczego takiej a nie innej zmiany dokonaliście, ew. wkleili jakiegoś linka opisującego dany problem czy parametr (może być eng lub pl).
Jestem świadom, że istnieje dokumentacja kernela opisująca wszystkie parametry ale część z opisów w ogóle nic nie wnosi, a połowa pewnie i tak nic nie powie większości ludzi po samym ich przeczytaniu. Zauważyłem to nie tylko ja ale i cała masa ludzi szukających informacji na temat danego parametru... Więc ta dokumentacja kernelowska trochę ssie.
Jeśli zgadzacie się z opisem, który widnienie przy powyższych parametrach, możecie wpisać tylko te parametry, które nie widnieją w moim pliku. Jeśli jakiś parametr wymaga dodatkowego opisu lub trzeba coś wyjaśnić i przy tym posiadacie taką informację, również ją dopiszcie. Wszelkie info zgromadzone w tym wątku będzie miało na celu rozbudowanie pliku sysctl.conf tak by przeciętny człowiek, co sobie go przeczyta, mógł bez problemu skonfigurować sobie kernela według własnego upodobania.
p.s. nie mam mrówek w kompie. xD
Ostatnio edytowany przez morfik (2014-07-07 20:59:25)
Offline
Tu masz chyba całą dokumentację sysctl, nawet nie jest tego specjalnie dużo.
16 /usr/src/linux/Documentation/sysctl/00-INDEX 54 /usr/src/linux/Documentation/sysctl/abi.txt 300 /usr/src/linux/Documentation/sysctl/fs.txt 819 /usr/src/linux/Documentation/sysctl/kernel.txt 254 /usr/src/linux/Documentation/sysctl/net.txt 75 /usr/src/linux/Documentation/sysctl/README 20 /usr/src/linux/Documentation/sysctl/sunrpc.txt 776 /usr/src/linux/Documentation/sysctl/vm.txt 2314 razem
Milej lektury ;)
.....
# Ukrycie symbolów jądra wraz z ich adresami w pliku /proc/kallsyms przed normalnymi użytkownikami (pomijając
# tych, którzy mają przyznanego CAP_SYSLOG). Utrudnia to trochę exploitom wykorzystywanie podatności jądra na
# dynamiczne odnajdywanie symboli / adresów pamięci, zwłaszcza gdy kompilujemy własny kernel.
# — https://lwn.net/Articles/415603/
kernel.kptr_restrict = 1[/quote]
Restrykcje dmesg i kptr przez sysctl?
Średni pomysł, jak jakiś mrówek się wbije na roota, to sobie zmieni,
a praktycznie wszystkie exploity na Linuxa zawsze atakują konto root,
i wykorzystują różne błędy w programach i sterownikach.
Do takich restrykcji lepiej zainteresuj się Grsecurity, to jedyne solidne zabezpieczenie zwiększające bezpieczeństwo powyżej konta root,
na poziomie kernela, do tego morderczo skuteczne, zwłaszcza, kiedy mu się ustawi dodatkowo solidny ACL w [b]/etc/grsec/policy[/b]. ;)
Pozdro
;-)Ostatnio edytowany przez Jacekalex (2014-05-22 10:08:59)
W demokracji każdy naród ma taką władzę, na jaką zasługuje ;)
Si vis pacem para bellum ;) | Pozdrawiam :)
Offline
No to jest to samo co na https://www.kernel.org/doc/Documentation/sysctl/ tyle, że w sporej części wypadków mi te opisy nic nie mówią, tak jak i większości ludzi co szukają info, a niezbyt się jeszcze orientują jak te systemy i sieci dokładnie działają. xD Mógłbyś przejrzeć ten plik co wrzuciłem, bym miał pewność, że wszystko jest w nim ok?
Na Grsecurity przyjdzie czas. xD
Ostatnio edytowany przez morfik (2014-05-22 10:14:42)
Offline
Poza siecią niewiele zmieniałem w domyślnych parametrach kernela.
U Ciebie w sieciach widzę dwa potencjalne błędy:
log_martians = 1
IMHO szkoda czasu, tego zawsze u mnie leciały całe tony, po kilkadziesiąt komunikatów na minutę.
Prościej się zajmować tym, co Firewall przepuścił z netu do kompa jako NEW, a nie tym, co doszło do interfejsu sieciowego.
Tam też masz opóźnianie odpowiedzi ICMP.
Ja u siebie wyłączyłem w ogóle odpowiedzi ICMP echo, a jakbym chciał, żeby komp na cośtam odpowiadał, to bym ustawił na firewallu, czego ile wpuścić, zamiast certolić się w opóźnianie odpowiedzi.
To tak na szybko. ;)
Ostatnio edytowany przez Jacekalex (2014-05-22 10:22:38)
Offline
log_martians = 1
IMHO szkoda czasu, tego zawsze u mnie leciały całe tony, po kilkadziesiąt komunikatów na minutę.[/quote]
U mnie przy włączonej opcji nie ma żadnych zalogowanych pakietów. Ale po tym jak odpalę vpn to faktycznie leci tego pełno, ale przy tym też mi vpn nie działa, a to przez uaktywnienie rp_filter i by mi vpn działał to muszę to wyłączyć, podobnie miałem w tym dhcp dla sieci 10.1.0.0/16 zlokalizowanym pod 192.168.22.22. I dzięki tym logom mogłem namierzyć przyczynę. Może faktycznie jak sra logami to lepiej wyłączyć. Ale jak są problemy z połączeniem to lepiej włączyć. xDTam też masz opóźnianie odpowiedzi ICMP.
Ja u siebie wyłączyłem w ogóle odpowiedzi ICMP echo[/quote]
Tak, tylko tam jest maska odnosząca się do typów komunikatów ICMP i akurat w domyślnych ustawieniach debiana pingi nie są limitowane, a samych komunikatów ICMP jest przecie duuźo. xDOffline
Kilka kolejnych parametrów:
# Ta opcja włącza zabijanie procesów w sytuacjach OOM. W przypadku ustawienia tego parametru na 0, kernel # przeskanuje procesy i ubije ten co zjada najwięcej zasobów pamięci RAM. Gdy zostanie ustawiona wartość "1", # kernel ubije tę aplikację, która doprowadziła do stanu OOM, przy czym nie koniecznie musi to był nowo # uruchomiony program, co może doprowadzić do zabijania pożytecznych procesów, które wcale nie zagrażają # systemowi. W przypadku posiadania partycji SWAP, dane będą tam zrzucane i żaden proces nie zostanie zabity. # vm.oom_kill_allocating_task = 0 # # Włącza zrzut wszystkich zadań w systemie za wyjątkiem wątków kernela w chwili gdy kernel dokonuje zabijania # żarłocznych procesów (OOM-killing). W tym zrzucie zawarte są informacje takie jak pid, uid, tgid, vm size, # rss, nr_ptes, swapents, oom_score_adj score, oraz name. Jest to pomocne w celu zidentyfikowania procesu, # który zainicjował OOM killera. Dodatkowo zostanie wypisanie info dlaczego OOM killer wybrał akurat to # zadanie do zabicia. Ustawienie tej wartości na "0" spowoduje, że ta informacja nie zostanie wyświetlona. W # przypadku wielkich systemów z tysiącami procesów, tego typu zrzut może okazać się niezbyt dobrym pomysłem. vm.oom_dump_tasks = 1 # # W przypadku ustawienia "1", kernel spanikuje za każdym razem gdy dojdzie do sytuacji OOM. W przypadku # gdy proces limituje nody przez mempolicy/cpusets i te nody zaczną wyczerpywać pamięć RAM, sam proces może # zostać zabity przez OMM killera. W takim przypadku kernel nie spanikuje, bo nody pamięci zostaną uwolnione. # Gdy ten parametr zostanie ustawiony na "2", kernel spanikuje w każdej sytuacji. vm.panic_on_oom = 0
Jacekalex -- zastanawia mnie jeszcze opcja net.ipv4.tcp_ecn , która ustawiłeś na 0. Z tego co czytam to raczej powinno być włączone. Mógłbyś napisać czemu to wyłączyłeś?
Offline
Jacekalex — zastanawia mnie jeszcze opcja net.ipv4.tcp_ecn...[/quote]
To znalazłem na necie, jak mi się demon pppd dziwnie sypał, sprawdziłem na 1 sypał się, na 0 chodzi lepiej.
W tutku "Zaawansowany Routing w Linuxie" tłumaczonym przez Bronimskiego masz chyba objaśnienie tego parametru w kontekście neozdrady i innych usług ADSL.
W demokracji każdy naród ma taką władzę, na jaką zasługuje ;)
Si vis pacem para bellum ;) | Pozdrawiam :)
Offline
Kilka nowych opcji:
# W przypadku pewnych sytuacji, kernel napotyka problem, który jest na tyle poważny, że może zachwiać dalszym # funkcjonowaniem maszyny. W takich przypadkach kernel zwyczajnie przestaje odpowiadać, a cała sytuacja jest # znana bardziej jako kernel panic. Poniższy parametr określa ilość czasu (w sekundach), po którym system # zostanie uruchomiony ponownie w przypadku paniki kernela. Jeśli ten parametr zostanie ustawiony na "0", # reboot zostanie wyłączony. kernel.panic = 60 # # Mniej poważne błędy kernela są nazywane "oops". Nie doprowadzają one bezpośrednio do paniki kernela, gdyż # ten może się obronić ubijając złowrogi proces. W sporej części przypadków "oops", system z mniejszym lub # większym powodzeniem może pracować dalej. Poniższa opcja, jeśli ustawiona na "0", sprawi, że kernel będzie # próbował funkcjonować dalej. Jeśli zaś zostanie ustawiona na "1", kernel spanikuje natychmiast. Dodatkowo, # jeśli parametr panic jest ustawiony na niezerową wartość, system zostanie zresetowany. kernel.panic_on_oops = 0 # Określa ilość prób wysłania pakietów z ustawioną flagą SYN przy nawiązaniu połączenia zanim kernel się podda # i zrezygnuje. net.ipv4.tcp_syn_retries = 6 # Aktywuje TCP Fast Open, co ma na celu wyeliminowanie początkowego RTT przy nawiązywaniu połączenia podczas # three-way handshake i tym samym zmniejszenie opóźnień, bo część pakietu SYN będzie zawierać faktyczne dane. # Może to poprawić wydajność łącza nawet o 40% przy przeglądaniu stron www. Jednak system ten opiera się o # generowane ciasteczka weryfikujące tożsamość klienta, a to niestety pociąga za sobą lekkie utylizowanie # procesora. By ten mechanizm zadziałał, aplikacje również muszą mieć zaimplementowaną jego obsługę. # Jeśli w poniższym parametrze zostanie ustawiona wartość "1", aplikacja będzie mogła żądać ciasteczek i tym # samym wysyłać dane w pakietach inicjujących połączenie (SYN) ze stacji klienckich. Z kolei wartość "2" # umożliwia serwerowi generowanie ciasteczek i akceptowanie tego typu żądań zanim three-way handshake zostanie # ukończone. Wartość "3" włącza funkcjonalność zarówno serwera jak i klienta na danej maszynie. Istnieje także # możliwość sprecyzowania wartości "4" i w takim wypadku dane mogą być przesyłane bez względu na dostępność # ciasteczek i w ogóle bez precyzowania tej opcji. # -- http://lwn.net/Articles/508865/ net.ipv4.tcp_fastopen = 1
Zna się może ktoś na tych opcjach?
net.ipv4.route.error_burst = 1250 net.ipv4.route.error_cost = 250 net.ipv4.route.gc_elasticity = 8 net.ipv4.route.gc_interval = 60 net.ipv4.route.gc_min_interval = 0 net.ipv4.route.gc_min_interval_ms = 500 net.ipv4.route.gc_thresh = -1 net.ipv4.route.gc_timeout = 300 net.ipv4.route.max_size = 2147483647 net.ipv4.route.min_adv_mss = 256 net.ipv4.route.min_pmtu = 552 net.ipv4.route.mtu_expires = 600 net.ipv4.route.redirect_load = 5 net.ipv4.route.redirect_number = 9 net.ipv4.route.redirect_silence = 5120
Część z nich opisałem sobie ale ze zrozumieniem pozostałych mam drobne problemy.
Poza tym czy ktoś się orientuje co to jest rhash_entries i jak sprawdzić wartość tego parametru? Niby znalazłem trochę info o nim ale na moim pc w logach nie ma kompletnie wzmianki na temat tego ile on zajmuje, nawet po ustawieniu go w extlinuxie w linijce kernela nie ma żadnych wpisów w logu kernela co by zawierały "route".
Offline
Kilka dodatkowych parametrów:
# Wartości tylko do odczytu. Określają rodzaj systemu operacyjnego oraz numerek kernela. Dodatkowo "#1" w # parametrze version oznacza, że jest to pierwszy kernel zbudowany z tego źródła, a data na końcu wskazuje # kiedy ów kernel został zbudowany. #kernel.ostype = Linux #kernel.osrelease = 3.14-1-amd64 #kernel.version = #1 SMP Debian 3.14.4-1 (2014-05-13) # W przypadku gdy opcja jest ustawiona na inną wartość niż "0" i dojdzie do zdarzenia, które wybudzi dysk ze # stanu uśpienia, wszystkie dirty pages zostaną automatycznie zapisane na dysk w czasie określonym w tym # parametrze. Rozsądne wartości od 2s do 5s. Wartość "0" wyłącza laptop mode. vm.laptop_mode = 0 # Czasami dysk rozkręca talerze z niewiadomego powodu. Kiedy tego typu sytuacja występuje, można spróbować # ustalić jej przyczynę przy pomocy parametru block_dump . Zanim się jednak uaktywni tę opcję, trzeba, albo # wyłączyć logi kernela w syslogu, albo wyłączyć sysloga całkowicie. W przeciwnym wypadku, system się zapętli, # bo informacje o aktywności dysku zbierane będą przez syslog, a ten je będzie zapisywał na dysk, a to # wygeneruje więcej informacji o aktywności dysku i tak dalej. Po wyłączeniu sysloga lub ukryciu logów # kernela, by odczytać informacje, które zostaną pokazane za sprawą block_dump, trzeba posłużyć się dmesg. # # Przykładowe logi mogą wyglądać jak poniżej: # bash(273): READ block 3242 on hda1 # bash(273): dirtied inode 10237 (.bash_history) on hda1 # pdflush(6): WRITE block 3242 on hda1 # # Mówią one, że proces nazwany bash, o numerze ID 273, odczytał blok 3242 na urządzeniu hda1. Ten sam proces # zmienił plik .bash_history ale dane z tej zmiany nie zostały jeszcze zapisane na dysk (figurują w pamięci # RAM jako dirty pages). Z kolei proces pdflush zapisał blok 3242 -- dirty pages zostały zapisane na dysk. # -- http://www.linuxjournal.com/article/7539 vm.block_dump = 0 # W przypadku ustawienia na "1", napęd wysunie płytkę od razu po wydaniu polecenia umount -- nie trzeba # dodatkowo korzystać z eject . dev.cdrom.autoeject = 0 # Jeśli ustawione na wartość "1", napęd zamknie tackę po wydaniu polecenia mount i po chwili zamontuje płytkę. # W przeciwnym wypadku zostanie zwrócony błąd o niemożliwości zamontowania krążka. dev.cdrom.autoclose = 1
Offline
Kolejne parametry (w sumie 106):
# Zrzut pamięci (coredump) jest to skopiowanie na bardziej wiarygodne medium (dysk twardy) zawartości pamięci # RAM w chwili gdy dochodzi do jakiegoś zdarzenia, np. poważnego błędu aplikacji. Nazwy, pod jakimi # zachowywany jest plik, można zmienić, tak samo jak i lokalizację do zapisu tych plików. Obecną konfigurację # można przetestować przez wydanie poniższych poleceń: # # $ ulimit -c unlimited # $ kill -s SIGSEGV $$ # # Doprowadzą one do segmentation fault shella, w którym zostaną wydane, a sam zrzut będzie zapisany w # aktualnej lokalizacji powłoki, w której się użytkownik znajdował przed wystąpieniem błędu. # # Domyślną nazwą dla pliku ze zrzutem pamięci jest "core". Przez ustawienie poniższego parametru na wartość # "1", nazwa pliku ulegnie zmianie na "core.PID". Jeśli core_pattern nie zawiera "%p" oraz core_uses_pid jest # ustawiony na "1", wtedy ".PID" zostanie dołączony do nazwy pliku. Przydatne przy debugowaniu wielowątkowych # aplikacji. kernel.core_uses_pid = 0 # # Poniższy parametr jest używany do sprecyzowania wzoru nazwy dla pliku zawierającego zrzut pamięci. # Maksymalna ilość znaków to 128, domyślna wartość to "core". Poniżej są rozpisane parametry, które można # wykorzystać przy tworzeniu nazwy dla pliku: # # %<NUL> '%' is dropped # %% output one '%' # %p pid # %P global pid (init PID namespace) # %u uid # %g gid # %d dump mode, matches PR_SET_DUMPABLE and # /proc/sys/fs/suid_dumpable # %s signal number # %t UNIX time of dump # %h hostname # %e executable filename (may be shortened) # %E executable path # %<OTHER> both are dropped # # Jeśli pierwszym znakiem we wzorze jest "|", kernel będzie traktował dalszy jego ciąg jako polecenie do # wykonania i zrzut pamięci będzie zapisany na standardowe wejście tego programu, a nie do pliku. Można również # sprecyzować miejsce zapisu pliku przez rozpoczęcie nazwy od "/". kernel.core_pattern = /tmp/core.%t.%h.%e.%p # Gdy jakiś plik zostaje otwarty, system operacyjny tworzy wpis reprezentujący ten plik i przechowujący # informacje na jego temat. Jeśli otwartych zostało 100 plików, będzie istnieć 100 wpisów w kernelu. Te wpisy # są określane przy pomocy liczb, np. 100, 101, 102, etc. To są deskryptory plików. Ponadto, domyślnie każdy # proces po uruchomieniu ma otwarte 3 standardowe deskryptory plików: STDIN(0), STDOUT(1), STDERR(2) . To # jakie deskryptory ma otwarte jakaś aplikacja, można sprawdzić przez: # # $ ls -al /proc/$(pidof firefox)/fd/ # # Deskryptor pliku może odnosić się do pliku, katalogu, urządzenia blokowego lub urządzenia znakowego, # gniazda, kolejki FIFO, nienazwanego strumienia lub dowiązania symbolicznego. # # Wartość w file-max określa maksymalną liczbę deskryptorów plików w systemie. Gdy tablica się zapełni, w logu # kernela można znaleźć komunikaty typu: "VFS: file-max limit <number> reached" . W takim przypadku trzeba # zwiększyć wartość tego parametru. #fs.file-max = 99970 # # Te trzy wartości określają kolejno liczbę zaalokowanych, liczbę zaalokowanych ale nieużywanych oraz # maksymalną liczbę deskryptorów w systemie. #fs.file-nr = 4384 0 99970 # # Określa maksymalną liczbę deskryptorów jakie pojedynczy proces może zaalokować. fs.nr_open = 1048576 # Poniższy parametr określa rozmiar kolejki nasłuchu (listen queue), czyli gniazd w stanie LISTEN . Jest to # liczba jednoczesnych połączeń, które serwer stara się skonfigurować. Gdy połączenie zostanie ustanowione, # nie występuje już w tej kolejce i ta liczba nie ma już większego znaczenia. Jeśli kolejka nasłuchu zostanie # zapełniona w wyniku zbyt wielu jednoczesnych prób połączeń, kolejne próby będą zrzucane. Większe kolejki # lepiej się sprawują w unikaniu ataków DoS (Denial of Service). net.core.somaxconn = 128
Ostatnio edytowany przez morfik (2014-06-03 19:21:31)
Offline
Dwa nowe parametry:
# Włącza ochronę symbolicznych dowiązań w katalogach z ustawionym sticky bitem, np. w /tmp/ . Ustawienie tego # bitu chroni przed usuwaniem nieswoich plików w danym katalogu ale pojawia się znów problem z eskalacją # uprawnień, np. w sytuacji gdy proces posiadający uprawnienia root przechodzi przez link symboliczny innego # użytkownika. Ustawienie wartości "1" zezwoli na podążanie za dowiązaniami tylko w przypadku katalogów bez # sticky bitu. W przypadku folderów, które mają ustawiony sticky bit, utworzenie symlinku będzie możliwe # dopiero wtedy gdy UID dowiązania oraz użytkownika przechodzącego będą do siebie pasować, albo właściciel # katalogu jest taki sam co w przypadku dowiązania. To ustawienie może popsuć część źle napisanych programów # ale daje gwarancję, że uprawnienia nie zostaną przekroczone za pomocą dowiązań symbolicznych. fs.protected_symlinks = 1 # # Ochrona twardych dowiązań działa na podobnej zasadzie co w przypadku dowiązań symbolicznych, z tym, że tutaj # sytuacja nie ogranicza się tylko do katalogów z ustawionym sticky bitem. W przypadków systemów bez # oddzielnej partycji na katalog /home/, użytkownik może utworzyć link do /etc/shadow w swoim katalogu # domowym. W prawdzie właściciel pliku i prawa dostępu są takie same jak były ale jakiś proces z prawami roota # mógłby przez przypadek zmienić prawa dostępu tego dowiązania, np. w wyniku: # # # chown -R morfik:morfik /home/morfik/ # # Co definitywnie zmieni nie tylko prawa dowiązania ale także prawa do pliku /etc/shadow . Jeśli wartość # poniższego parametru zostanie ustawiona na "1", tworzenie twardych dowiązań będzie możliwe tylko w przypadku # plików, do których użytkownik, tworzący owe dowiązanie, posiada prawa zapisu lub jest ich właścicielem. fs.protected_hardlinks = 1
Do tych co to czytają (o ile są tacy xD) -- orientuje się ktoś jak dokładnie ta eskalacja uprawnień działa? Wchodzi użytkownik A przez link użytkownika B i co dalej? xD
Offline
Eskalacja uprawnień wymaga przeważnie binarki z bitem SUID lub SGID, jedenz ataków polegał, o ile pamiętam, do wyjścia z partycji zamontowanej jako nosuid przez dowiązanie do pliku zawierającego SUID.
Zainteresuj się lepiej wywalaniem bitów SUID na rzecz uprawnień Capabilities.
W Archu nad tym pracują:
Sznurki:
https://wiki.archlinux.org/index.php/DeveloperWiki:Security#Replacing_setuid_with_capabilities
https://github.com/tsgates/arch-wiki-markdown/blob/master/wiki/Using_File_Capabilities_Instead_Of_Setuid.md
https://wiki.archlinux.org/index.php/Capabilities
Pozdro
;-)
Offline
Kiedyś już się spotkałem z tymi capabibities, kiedyś je sobie obadam ale jeśli dobrze zrozumiałem to to dotyczy tylko linkowania do tych plików z suid i sgid i przy przechodzeniu przez te linki w katalogach ze sticky bitem? To nie jest tak, że jeśli sobie podlinkuje jakiś katalog/plik w tmp, to to zagraża czemuś?
Ostatnio edytowany przez morfik (2014-06-07 09:13:05)
Offline
Nie pamiętam dokładnie, jak działały te ataki z symlinkami,
ale były takie dwa, jeden polegał na ataku DOS przez FTP, drugi na linkowaniu binarek z SUID na partycji, z której atakujący nie mógł odpalać podobnych programów, formalnie też nie mail dostępu do komend sudo, su czy mount.
Szczegółów poszukaj na necie, w każdym razie wiem, ze najpierw sprawą zajęli się Developerzy Grsecurity, potem to błyskawicznie trafiło do standardowego kernela.
W Grsecu to są takie opcje:
http://en.wikibooks.org/wiki/Grsecurity/Appendix/Grsecurity_and_PaX_Configuration_Options#Linking_restrictions
Pozdro
;-)
Offline
Kilka nowych parametrów + poprawiony 1 bug. xD
# Jeśli nie ma odpowiedzi na rozpoczynający połączenie pakiet SYN, kernel spróbuje ponowić zapytanie kilka # razy i będzie robił to w ciągle zwiększających się odstępach czasu. Ustanawiając limit dla prób połączeń, # można tym samym ograniczyć czas, przez który kernel będzie próbował ustanowić nowe połączenie. Przykładowo: # # próby | czas na retransmisje (sekundy) # --------|------------------------------- # 1 | 1 # 2 | 1+2=3 # 3 | 1+2+4=7 # 4 | 1+2+4+8=15 # 5 | 1+2+4+8+16=31 # 6 | 1+2+4+8+16+32=63 # 7 | 1+2+4+8+16+32+64=127 # # Wartość 4 oznacza zatem, że kernel, po nieudanej próbie nawiązania połączenia, spróbuje zretransmitować # pakiet SYN 4 razy i jeśli żadna z tych prób się nie powiedzie, po czasie 15 sekund kernel odpuści. net.ipv4.tcp_syn_retries = 4 # Gdy serwer otrzymuje zapytanie SYN, natychmiast wysyła odpowiedź w postaci pakietu z ustawionymi flagami # SYN i ACK umieszczając jednocześnie to połączenie w kolejce (backlog queue) do chwili aż nadejdzie od # klienta pakiet z ustawioną flagą ACK . Gdy taki pakiet nie nadchodzi, serwer retransmituje swój pakiet # SYN-ACK kilka razy, dając tym samym szanse klientowi by spróbował odesłać pakiet ACK jeszcze raz. Jeśli # adres klienta został zespoofowany, taka odpowiedź nigdy nie nadejdzie i serwer usunie to półotwarte # połączenie. Połączenia w stanie SYN RCVD zajmują cenne zasoby i by odciążyć trochę maszynę można # przyśpieszyć proces zamykania tego typu połączeń przez zmianę ilości retransmisji (działa na takiej samej # zasadzie co tcp_syn_retries). Obniżenie wartości tego parametru w przypadku słabych łącz może powodować # problemy z połączeniem. # -- http://www.symantec.com/connect/articles/hardening-tcpip-stack-syn-attacks net.ipv4.tcp_synack_retries = 2 # Maksymalna ilość osieroconych połączeń. Osierocone połączenie to takie gniazdo, które nie jest powiązane z # żadnym deskryptorem pliku i żaden deskryptor nie odnosi się do tego gniazda ale samo gniazdo ciągle istnieje # w pamięci i czeka aż protokół TCP z nim skończy. Każde takie połączenie może zjeść do 64KiB pamięci i tych # danych nie da rady przenieść do SWAP. Jeśli wartość tego parametru zostanie przekroczona, wszystkie sieroty # zostaną natychmiast zresetowane i kernel wyrzuci ostrzeżenie. Domyślna wartość zależy od ilości posiadanej # pamięci RAM. Ilość sierot można sprawdzić przez /proc/net/sockstat . # -- http://kaivanov.blogspot.com/2013/01/troubleshooting-out-of-socket-memory.html #net.ipv4.tcp_max_orphans = 4096 # # Poniższy parametr określa ile razy próbować zabić osierocone połączenie odpytując przy tym drugą stronę # zanim połączenie zostanie ubite lokalnie. #net.ipv4.tcp_orphan_retries = 0 # Ilość stron pamięci (pages) przeznaczonych dla gniazd TCP. Gniazdo TCP identyfikuje konkretne połączenie, # w skład którego wchodzi lokalny adres, lokalny port, zdalny adres, zdalny port oraz protokół. By przeliczyć # strony pamięci na faktyczną jej objętość, trzeba przemnożyć ilość stron przez rozmiar strony. Z kolei # rozmiar strony można uzyskać porównując dwa parametry z /proc/meminfo oraz /proc/vmstat , przykładowo: # # $ cat /proc/meminfo | egrep -i "Mapped" && cat /proc/vmstat | egrep -i "nr_mapped" # Mapped: 67408 kB # nr_mapped 16852 # # Rozmiar strony to Mapped/nr_mapped , czyli 67408KiB/16852=4KiB albo 4096 bajtów. Poniższe 3 wartości # określają minimalną, umiarkowaną i maksymalną ilość stron pamięci, które mogą wykorzystać wszystkie gniazda # TCP łącznie i odpowiadają odpowiednio za 64MiB, 96MiB i 144MiB pamięci. Ten parametr domyślnie jest # kalkulowany przy starcie systemu w oparciu o ilość dostępnej pamięci RAM. net.ipv4.tcp_mem = 16500 24750 37125
Offline
Parę nowych parametrów:
# Określa limit dla liczby procesów w systemie -- wątki (threads) są w istocie procesami, które dzielą # przestrzeń adresową. #kernel.threads-max = 15725 # Kontroluje liczbę stron, które mogą być jednocześnie odczytane ze SWAP. W przypadku gdy SWAP jest dość # intensywnie wykorzystywany, zwiększenie wartości tego parametru może polepszyć wydajność. # # wartość | ilość stron | rozmiar (bajty) # ------------------------------------------- # 0 | 1 | 1*4096 =4096 # 1 | 2 | 2*4096 =8192 # 2 | 4 | 4*4096 =16384 # 3 | 8 | 8*4096 =32768 # 4 | 16 | 16*4096 =65536 # 5 | 32 | 32*4096 =131072 # ... | .... | ... # # Wartość "10" pozwala na odczyt 4MiB danych. vm.page-cluster = 10 # Każda maszyna posiada pamięć fizyczną, czyli taką, która jest w niej zainstalowana. Dodatkowo posiada # również przestrzeń adresową, która to jest mapą możliwej do zaadresowania przez proces pamięci. Nie cały # jej obszar musi mieć swój odpowiednik w pamięci fizycznej, co jest implementowane za pomocą pamięci # wirtualnej (SWAP). Dane na temat zaalokowanej pamięci można odczytać z /proc/meminfo : # # $ cat /proc/meminfo | grep -i comm # CommitLimit: 2609604 kB # Committed_AS: 1404848 kB # # -- http://www.win.tue.nl/~aeb/linux/lk/lk-9.html # # Gdy ustawione na "0", kernel próbuje ustalić ilość wolnej pamięci w przypadku gdy przestrzeń użytkownika # prosi o kolejne zasoby. W przypadku ustawienia "1", kernel udaje, że zawsze ma wystarczającą ilość pamięci # aż do momentu gdy jej faktycznie zabranie. Z kolei wartość "2" sprawi, że kernel będzie próbował nie # dopuścić do sytuacji, w której możliwe by było zaalokowanie więcej zasobów niż faktycznie jest dostępnych. # Ta opcja może być bardzo użyteczna, bo wiele programów rezerwuje duże ilości pamięci "na wszelki wypadek", # a w rzeczywistości z większości tych zasobów wcale nie korzysta. vm.overcommit_memory = 0 # # W przypadku gdy overcommit_memory jest ustawiony na "2", przestrzeń adresowa do zaalokowana nie może # przekroczyć sumy wartości dostępnej ilości SWAP oraz procentu pamięci fizycznej ustawionej w tym parametrze. # Przykładowo, jeśli system posiada do dyspozycji 1GiB pamięci RAM i do tego SWAP ma 1GiB, po sprecyzowaniu # w overcommit_ratio wartości "50", możliwe będzie do zaalokowanie 1,5GiB. #vm.overcommit_kbytes = 0 #vm.overcommit_ratio = 100 # MMAP to wywołanie systemowe nakazujące systemowi operacyjnemu odwzorowanie danej części wybranego pliku w # przestrzeni adresowej procesu. Operacja ta powoduje, że do obszaru pliku można odnosić się jak do zwykłej # tablicy bajtów w pamięci, eliminując potrzebę korzystania z dodatkowych wywołań systemowych typu read lub # write. Z tego powodu często używa się tej operacji do przyspieszenia działania na dużych plikach. Poniższy # parametr określa przestrzeń adresową, której procesy użytkownika nie będą mogły mapować. W przypadku gdyby # pozwolono na mapowanie niższych wartości niż 64KiB, mogą wystąpić problemy z bezpieczeństwem systemu znane # jako "kernel NULL pointer dereference". Ponieważ kernel w wyniku błędu może operować przez przypadek na # informacjach zawartych na pierwszych kilku stronach pamięci, to procesom w przestrzeni użytkownika nie # powinno się zezwalać na ich zapisywanie. Może do doprowadzić do powieszenia się systemu lub niestabilnej # jego pracy. Dodatkowo, jeśli użytkownik jest w stanie mapować niższe porcje przestrzeni adresowej, może # także zwiększyć swoje uprawnienia. Część aplikacji do poprawnej pracy wymaga by ustawić tutaj "0", jednak # pozostałe bez problemu działają przy określeniu wartości "65536". # -- https://wiki.debian.org/mmap_min_addr vm.mmap_min_addr = 65536 # W przypadku aplikacji z ustawionym bitem setuid, zrzut pamięci w chwili błędu takiego programu może zawierać # poufne informacje, co stanowi zagrożenie dla bezpieczeństwa systemu, bo bit setuid na pliku wykonywalnym # umożliwia uruchomienie danego programu przez innych użytkowników systemu z prawami właściciela tego # pliku -- jeśli bit setuid jest ustawiony na programie, którego właścicielem jest root, nie ważne kto go # wykona, ten program będzie się zachowywał tak jakby go uruchomił root. Jeśli ten parametr przyjmie wartość # "0", to w przypadku gdy dojdzie do jakiejkolwiek zmiany uprawnień podczas startowania aplikacji, nie będzie # można wykonać zrzutu pamięci. W przypadku "1", wszelkie kwestie bezpieczeństwa są odstawione na boczny # tor -- ta wartość ma służyć tylko do debugowania. Można także sprecyzować wartość "2", która odpowiada za # zrzut pamięci binarek, który normalnie by nie miał miejsca ale jeśli core_pattern będzie ścieżką absolutną # (zaczynającą się znakiem "/") lub potokiem, to zrzut zostanie dokonany. # -- http://manpages.ubuntu.com/manpages/trusty/pl/man5/core.5.html fs.suid_dumpable = 0
Offline
Kolejne parametry:
# Każda niezerowa wartość wskazuje na fakt, że kernel ma załadowane moduły, które nie są do końca free, # prawdopodobnie sterowniki do grafik lub bezprzewodowych kart sieciowych. Deweloperzy kernela nie są zbytnio # zainteresowani problemami występującymi w takich jądrach, bo nie mogą ustalić przyczyny, której nie można # dostrzec z racji, że takie moduły posiadają zamknięty kod. Poniżej znajduje się lista wartości, które mogą # być dodane do siebie, dając tym samym wynikową wartość: # # 1 - A module with a non-GPL license has been loaded, this includes modules with no license. Set by # modutils >= 2.4.9 and module-init-tools. # 2 - A module was force loaded by insmod -f. Set by modutils >= 2.4.9 and module-init-tools. # 4 - Unsafe SMP processors: SMP with CPUs not designed for SMP. # 8 - A module was forcibly unloaded from the system by rmmod -f. # 16 - A hardware machine check error occurred on the system. # 32 - A bad page was discovered on the system. # 64 - The user has asked that the system be marked "tainted". This could be because they are running # software that directly modifies the hardware, or for other reasons. # 128 - The system has died. # 256 - The ACPI DSDT has been overridden with one supplied by the user instead of using the one provided # by the hardware. # 512 - A kernel warning has occurred. # 1024 - A module from drivers/staging was loaded. # 2048 - The system is working around a severe firmware bug. # 4096 - An out-of-tree module has been loaded. # 8192 - An unsigned module has been loaded in a kernel supporting module signature. # # Dla przykładu wartość "4097" to suma "4096" i "1", czyli załadowany jest moduł na licencji nie GPL. W logu # kernela można odszukać informacje wskazujące na moduły, które plamią opensourcowe imię kernela: # # # dmesg | grep -i taint # [Tue Jun 10 06:19:38 2014] nvidia: module license 'NVIDIA' taints kernel. # [Tue Jun 10 06:19:38 2014] Disabling lock debugging due to kernel taint # # W tym przypadku winne są sterowniki nvidii. Po ich usunięciu poniższy parametr powinien wskazywać wartość # "0". #kernel.tainted = 4097 # Pamięć współdzielona (shared memory) jest to taki obszar pamięci, który może być dzielony przez kilka # różnych procesów w celu wymiany informacji między tymi procesami. Takie rozwiązanie jest szybsze od # standardowej międzyprocesowej komunikacji (Inter Process Communication), bo w przypadku gdy pamięć jest # mapowana na przestrzeń adresową procesu, który współdzieli dany obszar pamięci, kernel nie bierze udziału w # przekazywaniu danych między procesami, bo nie ma potrzeby by te dane kopiować. Wiele aplikacji korzysta z # tego ficzeru, np. oprogramowanie od baz danych. By ustalić jakie limity są w systemie, można skorzystać # z "ipcs -lm", przykładowo: # # $ ipcs -lm # ------ Shared Memory Limits -------- # max number of segments = 4096 - shmmni # max seg size (kbytes) = 65536 - shmmax # max total shared memory (kbytes) = 524288 - shmall # min seg size (bytes) = 1 - minimalny rozmiar segmentu do współdzielenia # # Poniższy parametr kontroluje całkowitą ilość pamięci współdzielnej, która może być wykorzystana w tym samym # czasie na danym systemie. Ten parametr nie jest definiowany w bajtach, tylko w stronach (page) i by uzyskać # maksymalną ilość pamięci przeznaczoną do współdzielenia, trzeba pomnożyć wartość tego parametru przez # rozmiar strony, zwykle 4096 bajtów. kernel.shmall = 131072 # # Definiuje maksymalny rozmiar dla pojedynczego segmentu współdzielonego (w bajtach). kernel.shmmax = 67108864 # # Ten parametr jest używany do ustawienia maksymalnej ilości współdzielonych segmentów w systemie. kernel.shmmni = 4096 # # W przypadku ustawienia shmall na "0", czyli usunięcia górnego limitu dla pamięci współdzielonej, istnieje # możliwość, że użytkownik systemu będzie w stanie wykorzystać całą dostępną pamięć na segmenty SHM. Jeśli # tego typu sytuacja wystąpi, OMM-killer nie będzie w stanie uwolnić tych zasobów pamięci. Jednym z dwóch # rozwiązań jest włączenie opcji shm_rmid_forced , która wymusza aby każdy segment SHM był tworzony z flagą # IPC_RMID , która to gwarantuje, że dany segment SHM jest przypisany do co najmniej jednego procesu, co z # kolei zapewnia, że w przypadku wyczerpania się pamięci, OMM-killer zdoła ubić winny proces, a segment SHM # zniknie razem z tym procesem. Drugą opcją jest ustawienie górnego limitu dla pamięci współdzielonej w # parametrze shmall . # -- http://lwn.net/Articles/595638/ # # Jeśli poniższy parametr zostanie ustawiony na "1", wszystkie segmenty zostaną przeznaczone do usunięcia, w # momencie gdy liczba dołączonych do nich procesów spadnie do 0 i co z tym się wiąże, nie da się utworzyć # współdzielonych segmentów pamięci istniejących niezależnie od procesów. Tego typu zachowanie może popsuć # pewne aplikacje. kernel.shm_rmid_forced = 0 # PageCache/BufferCache przyspiesza odczyt plików przez buforowanie danych w pamięci RAM przy pierwszym # odczycie lub zapisie plików na dysku. Jeśli zajdzie potrzeba by w późniejszym czasie odczytać te dane # ponownie, to system odwoła się do pamięci RAM zamiast do dysku twardego, co przyśpieszy znacznie operacje na # plikach. W przypadku gdyby system potrzebował więcej pamięci pod aplikacje, zwolni on część obszaru # wykorzystywanego w danej chwili przez PageCache, # # W zależności od sprecyzowanej wartości, część cache w pamięci RAM zostanie wyczyszczona. W przypadku # przesłania "1", kernel uwolni cały PageCache, w przypadku "2", cache pod inody i dentry zostanie zwolniony. # Można także przesłać "3", co spowoduje uwolnienie tych dwóch powyżej. Jednak dirty pages nie zostaną w ten # sposób wyczyszczone. Jeśli istnieje potrzeba wyczyszczenia całego cache, trzeba pierw wydać polecenie sync , # po czym przesłać "3" via: # # # echo "3" > /proc/sys/vm/drop_caches # # Przy czym ta operacja nie ma trwałego efektu, tj. po wydaniu powyższego polecenia, cache i tak będzie się # zbierał i by go zwolnić, ponownie trzeba zapisać drop_caches . vm.drop_caches = 0
Post nie może mieć więcej niż 65535 znaków (64 KB).[/quote]
hmmm. xD No to nie mam jak zaktualizować tego pliku tutaj. Chyba podlinkuje go z pastebina.Ostatnio edytowany przez morfik (2014-06-10 15:32:25)
Offline
Na dugu mamy własną wklejkę :p
Offline
A ograniczenie do ilu znaków? I da radę edytować? I jak to wkleić, bo ja tu nie widzę żadnej wklejki? xD
W każdym razie parę dodatkowych parametrów:
# Księgowanie procesów (process accounting) pozwala na szczegółowe monitorowanie pracy systemu. Jądro # operacyjne, dzięki temu mechanizmowi, jest w stanie zbierać informacje na temat nazwy procesu, jego # właściciela, grupy czy też czasu stworzenia i usunięcia takiego procesu. Dodatkowo są zbierane informacje na # temat wykorzystywanych zasobów, takie jak: czas na operacje, zużycie pamięci oraz ilość danych wej/wyj , # które proces przesłał. Te dane są zapisywane do pliku w katalogu /var/log/account/ i czytane podczas # inicjalizacji księgowania. By skorzystać z tego ficzera trzeba mieć kernela z włączoną opcją # CONFIG_BSD_PROCESS_ACCT oraz posiadać zainstalowany pakiet "acct". # # Środkowa liczba oznacza procent wolnego miejsca w systemie plików (tam gdzie jest /var/log/), poniżej # którego księgowanie zostanie wstrzymane. Jeżeli ilość wolnego miejsca wzrośnie powyżej procentu wyrażonego # pierwszą liczbą, księgowanie zostanie wznowione. Ostatnia liczba oznacza częstość sprawdzania wolnego # miejsca i wyrażona jest w sekundach. kernel.acct = 4 2 60 # Poniższy parametr definiuje sposób w jaki zachowa się system po wciśnięciu kombinacji ctrl+alt+delete . # W przypadku ustawienia "0", sygnał jest przesyłany do programu init, co pozwala na zwyczajne zamknięcie # systemu i niczym się to nie różni od skorzystania z polecenia shutdown . Jeśli się tutaj ustawi "1", system # zostanie zresetowany tak jakby to się odbyło przez przycisk na obudowie. kernel.ctrl-alt-del = 0 # Pierwszy parametr zawiera ścieżkę do programu ładującego moduły jądra, drugi zaś umożliwia dynamiczne # ładowanie i wyładowywanie modułów. Oba parametry są dostępne tylko w przypadku gdy kernel został # skompilowany z opcją CONFIG_MODULES . W przypadku ustawienia modules_disabled na "1", nie da rady przestawić # ten opcji z powrotem na "0". kernel.modprobe = /sbin/modprobe kernel.modules_disabled = 0
Offline
http://wklej.dug.net.pl/
Żadnych ograniczeń nie widzę wiec raczej nie ma :)
Offline
Parę nowych parametrów:
# Poniższy parametr ustawia próg limitu dla liczby pseudoterminali (tych odpalanych w graficznym środowisku). kernel.pty.max = 4096 # # Wartość tylko do odczytu przechowująca informacje na temat liczby aktualnie otworzonych pseudoterminali. #kernel.pty.nr = 6 # Kernel generuje logi z wykorzystaniem printk(). Te logi są zapisywane w buforze, do którego to można się # odwołać przez dmesg. Z kolei rozmiar tego bufora jest kontrolowany przez opcję kernela CONFIG_LOG_BUF_SHIFT , # której argumentem jest liczba, np. 17 -- oznacza ona rozmiar bufora 128KiB (2^17). Rozmiar pojedynczej # wiadomości nie może przekraczać 1KiB. W zależności od ważności komunikatu, te dzielimy na: # # 0 KERN_EMERG # 1 KERN_ALERT # 2 KERN_CRIT # 3 KERN_ERR # 4 KERN_WARNING # 5 KERN_NOTICE # 6 KERN_INFO # 7 KERN_DEBUG # # Poniższe cztery wartości odpowiadają za console_loglevel, default_message_loglevel, minimum_console_level # oraz default_console_loglevel . Komunikaty o priorytecie wyższym (niższy numer) niż console_loglevel będą # wypisywane na konsoli. Komunikaty bez jawnego priorytetu, będą wypisywane z priorytetem ustawionym w # default_message_level. Z kolei minimum_console_loglevel jest najmniejszą wartością, którą można ustawić w # console_loglevel, a default_console_loglevel jest domyślną wartością dla console_loglevel. kernel.printk = 1 4 1 7 # # Precyzuje opóźnienie kolejnych komunikatów (czas w milisekundach). Dozwolone wartości z zakresu od 0 do # 10000. kernel.printk_delay = 0 # # Pierwszy parametr definiuje limit wiadomości, po przekroczeniu którego kernel zaprzestanie wypisywać # komunikaty przez pewien okres czasu, który zostanie sprecyzowany w printk_ratelimit . Ten mechanizm ma # zastosowanie jedynie w przypadku wykrycia takich samych wiadomości. # -- http://lwn.net/Articles/66091/ kernel.printk_ratelimit_burst = 10 kernel.printk_ratelimit = 5 # Fizyczna pamięć jest podzielona na strony (pages), które są podstawową jednostką zarządzania pamięcią. Kiedy # proces uzyskuje dostęp do wirtualnego adresu, procesor musi przetłumaczyć go na adres fizyczny, a robi to w # oparciu o tablicę stron, którą dostarcza kernel. Zanim jednak procesor może dokonać takiego tłumaczenia, # musi on przeprowadzić szereg odczytów pamięci fizycznej i uzyskać informację o tej tablicy. By przyśpieszyć # ten proces dla późniejszych odwołań do tego samego adresu wirtualnego, procesor zapisuje informacje na temat # ostatnio odwiedzonych adresów w TLB (Translation Lookaside Buffer). TLB jest to mały ale bardzo szybki cache # CPU i nietrafianie przy odpytywaniu adresów kosztuje sporo czasu. Jednak można zwiększyć liczbę trafień # przez zmapowanie większych ciągłych obszarów pamięci fizycznej przez zwiększenie rozmiaru strony, który # domyślnie wynosi 4KiB. Im większe są strony, tym mniej wpisów zawiera tablica, a im mniej wpisów, tym lepsze # i szybsze jest zarządzanie pamięcią, bo mniej czasu zajmuje odnalezienie zmapowanego obszaru. # # Mechanizm, zwany HugePages, pozwala zwiększyć, w zależności od procesora, rozmiar strony do 2MiB lub nawet # do 1GiB. Jednak HugePages znajdują zastosowanie tylko w przypadku pamięci współdzielonej i jeśli zostanie # przeznaczony jakiś obszar pamięci pod HugePages, będzie on prealokowany i nigdy nie zostanie przeniesiony # do SWAP. Aplikacje, które używają tylko zwykłych stron, nie będą mogły się odwoływać do tego zarezerwowanego # miejsca w pamięci. Wielkość strony można odczytać z /proc/meminfo lub też przez sprawdzenie flag procesora w # /proc/cpuinfo -- PSE dla 2MiB i PDPE1GB dla 1GiB. Trzeba także posiadać kernel z włączonymi opcjami # CONFIG_HUGETLBFS , CONFIG_HUGETLB_PAGE . # # Wartość tego parametru określa ilość HugePages w systemie. #vm.nr_hugepages = 200 # # Poniższy parametr precyzuje jak bardzo może się rozrosnąć przestrzeń pamięci pod HugePages , w przypadku gdy # jakiś proces potrzebuje zaalokować więcej pamięci ale limit w nr_hugepages został przekroczony. W przypadku # gdy ten proces straci apetyt na pamięć, te strony zostaną zwolnione. #vm.nr_overcommit_hugepages = 50 # # Wartość tego parametru ustala grupę, w skład której wchodzą użytkownicy mogący korzystać z ficzeru # HugePages. Grupę pierw trzeba stworzyć i następnie dodać do niej określonych użytkowników. Trzeba także # utworzyć punkt montowania oraz dodać wpis do /etc/fstab w postaci: # # hugetlbfs /hugepages hugetlbfs mode=1770,gid=5555 0 0 # #vm.hugetlb_shm_group = 5555
Offline
Kolejna zwrotka (Postęp: 216/1060):
# Wartość tego parametru (tylko do odczytu) pokazuje jak dużo entropii maszyna zgromadziła -- jeśli jest niska # (<1000), kryptograficzne aplikacje mogą się blokować do chwili gdy napłynie więcej entropii, co może np. # spowolnić działanie sieci bezprzewodowych, w przypadku gdy serwer robi za programowy access point. By # zwiększyć ilość i jakoś entropii, można posłużyć się demonami entropii np. haveged lub rngd z pakietu # rng-tools . Ten drugi operuje na sprzętowym generatorze (urządzenie /dev/hwrng ). Daemon haveged generuje, # co prawda, niewyczerpane ilości entropii ale nie jest do końca jeszcze sprawdzony i najlepiej nie polegać # tylko na nim, ewentualnie używać go w połączeniu z rngd . # -- http://lwn.net/Articles/525459/ #kernel.random.entropy_avail = 2730 # # Ustawiony na sztywno limit dla puli entropii (wartość tylko do odczytu). #kernel.random.poolsize = 4096 # # W przypadku gdy licznik entropy_avail spadnie do 0, proces, który żąda entropii z pliku /dev/random zostanie # uśpiony do momentu aż entropy_avail pokaże wartość ustawioną w tym parametrze. kernel.random.read_wakeup_threshold = 128 # # Próg, powyżej którego urządzenie /dev/random zostanie odcięte od dokarmiania nowymi porcjami entropii. kernel.random.write_wakeup_threshold = 2048 # # Wartość tylko do odczytu, generowana za każdym razem gdy jakiś proces spróbuje odczytać ten parametr. Ciąg # ma formę xxxxxxxx-xxxx-4xxx-yxxx-xxxxxxxxxxxx , gdzie za "x" można podstawić dowolną wartość hexalną, a "y" # może przyjąć wartości ze zbioru 8,9,A,B. Wartość tego parametru jest przypisywana np. partycjom przy # tworzeniu nowego systemu plików. #kernel.random.uuid = bad69d77-d1cc-465c-b5e1-ecd8519e179e # # Wartość tylko do odczytu, która jest generowana podczas startu systemu. Przydatne, jeśli ktoś chce wiedzieć # czy system został zresetowany. #kernel.random.boot_id = 55e71850-b022-528e-898d-8c7528883822
Ostatnio edytowany przez morfik (2014-06-16 08:43:58)
Offline
Może przerzuć się na githuba?
Offline
Time (s) | Query |
---|---|
0.00014 | SET CHARSET latin2 |
0.00005 | SET NAMES latin2 |
0.00115 | SELECT u.*, g.*, o.logged FROM punbb_users AS u INNER JOIN punbb_groups AS g ON u.group_id=g.g_id LEFT JOIN punbb_online AS o ON o.ident='3.145.85.74' WHERE u.id=1 |
0.00079 | REPLACE INTO punbb_online (user_id, ident, logged) VALUES(1, '3.145.85.74', 1732694472) |
0.00049 | SELECT * FROM punbb_online WHERE logged<1732694172 |
0.00218 | DELETE FROM punbb_online WHERE ident='18.117.168.71' |
0.00065 | DELETE FROM punbb_online WHERE ident='18.191.165.192' |
0.00056 | DELETE FROM punbb_online WHERE ident='185.191.171.1' |
0.00080 | DELETE FROM punbb_online WHERE ident='185.191.171.19' |
0.00076 | DELETE FROM punbb_online WHERE ident='3.14.143.149' |
0.00064 | DELETE FROM punbb_online WHERE ident='3.144.25.248' |
0.00069 | SELECT topic_id FROM punbb_posts WHERE id=269708 |
0.00011 | SELECT id FROM punbb_posts WHERE topic_id=25863 ORDER BY posted |
0.00056 | SELECT t.subject, t.closed, t.num_replies, t.sticky, f.id AS forum_id, f.forum_name, f.moderators, fp.post_replies, 0 FROM punbb_topics AS t INNER JOIN punbb_forums AS f ON f.id=t.forum_id LEFT JOIN punbb_forum_perms AS fp ON (fp.forum_id=f.id AND fp.group_id=3) WHERE (fp.read_forum IS NULL OR fp.read_forum=1) AND t.id=25863 AND t.moved_to IS NULL |
0.00006 | SELECT search_for, replace_with FROM punbb_censoring |
0.00443 | SELECT u.email, u.title, u.url, u.location, u.use_avatar, u.signature, u.email_setting, u.num_posts, u.registered, u.admin_note, p.id, p.poster AS username, p.poster_id, p.poster_ip, p.poster_email, p.message, p.hide_smilies, p.posted, p.edited, p.edited_by, g.g_id, g.g_user_title, o.user_id AS is_online FROM punbb_posts AS p INNER JOIN punbb_users AS u ON u.id=p.poster_id INNER JOIN punbb_groups AS g ON g.g_id=u.group_id LEFT JOIN punbb_online AS o ON (o.user_id=u.id AND o.user_id!=1 AND o.idle=0) WHERE p.topic_id=25863 ORDER BY p.id LIMIT 0,25 |
0.00100 | UPDATE punbb_topics SET num_views=num_views+1 WHERE id=25863 |
Total query time: 0.01506 s |