Ana içeriğe atla

ssh servisinin ram tükensede çalışmasını istemek ( oom killer ve ssh ) ve ssh ile sisteme bağlanan kişilerin sistem kaynağını tüketmesini önlemek

Oncelikler asagidaki baglantidan linux hafiza yonetimine bakmak faydali olur.

https://linux-mm.org/OOM_Killer

It is the job of the linux 'oom killer' to sacrifice one or more processes in order to free up memory for the system when all else fails. It will also kill any process sharing the same mm_struct as the selected process, for obvious reasons. Any particular process leader may be immunized against the oom killer if the value of its /proc/<pid>/oomadj is set to the constant OOM_DISABLE (currently defined as -17).


 Genelde ram  tükendiğinde oom killer çalışan normal işlemleri öldürmeye başlar.

sshd islemlerinin oom_adj parametresini  kontrol ettigimizde, 

pgrep sshd  | while read PID; do echo $PID;cat /proc/$PID/oom_adj;done

1244

-17

6425

0


sshd dinleme modunda calismaya basladiginda oom_adj -17 olarak  goruyoruz. oom_adj=17 bu islemin kesinlikle oldurulmemesi demektir.
Fakat bizim ssh ile baglandigimizda olusan alt islemin  oom_adj degeri 0 goruyoruz.
Yani sistemde servis olarak calisan sshd oldurulmez, fakat bizim baglantimiz oldurulur.

Boyle bir durumda ssh ile işlem yaplımaz duruma geliniyor. Bu durumda ssh servisini korumak için;

ssh servisine kural ve sshd dokunma diyoruz.

~# cat /etc/systemd/system/sshd.service 

[Unit]

Description=OpenBSD Secure Shell server

Documentation=man:sshd(8) man:sshd_config(5)

After=network.target auditd.service

ConditionPathExists=!/etc/ssh/sshd_not_to_be_run


[Service]

DefaultLimitNICE=-19

OOMPolicy=continue

OOMScoreAdjust=-1000

EnvironmentFile=-/etc/default/ssh

ExecStartPre=/usr/sbin/sshd -t

ExecStart=/usr/sbin/sshd -D $SSHD_OPTS

ExecReload=/usr/sbin/sshd -t

ExecReload=/bin/kill -HUP $MAINPID

KillMode=process

Restart=on-failure

RestartPreventExitStatus=255

Type=notify

RuntimeDirectory=sshd

RuntimeDirectoryMode=0755


[Install]

WantedBy=multi-user.target

Alias=sshd.service


# systemctl daemon-reload

# systemctl restart sshd

# pgrep sshd  | while read PID; do echo $PID;cat /proc/$PID/oom_adj;done

8409

-17

8454

-17

Artık sshd islemleri oom kiler tarafindan öldürülmeyecektir.

OOM score 1000 ile -1000 arasında değişir. Varsayılan değer 0 dır.

-1000 öldürülemez anlamındadır.

ssh ile ilgili bir başka sorunda sisteme bağlanan kullanıcıların limitleri.

rhel7/8/9 sistemlerinde /etc/security/limits.conf veya /etc/security/limits.d/ dizini altında oluşturacağım ayarlar ssh kullanıcıları için etkili olmayacaktır. ssh ile bağlanan kullanıcıların limitleri systemd tarafından belirlenmektedir(1).

Her hangi bir kullanıcının cpu veya sistem kaynağını tüketmesini  önlemenin en güvenli yöntemi user.slice limitlemektedir. Tek tek kullanıcıya limit verilebileceği gibi genel limitde belirlenebilir.  Aşağıdaki örnekte tüm kullanıcılar için limit ayarlama gösterilmiştir.

Örneğimizde kullanıcıların 2 çekirdek(her bir çekirde 100% olarak kabul edilir) ve en fazla 2GB  kullanabilecek şekilde ayarlanıyor.

# systemctl set-property user.slice CPUAccounting=yes
# systemctl set-property user.slice CPUQuota=200%
# systemctl set-property user.slice MemoryAccounting=yes
# systemctl set-property user.slice MemoryLimit=2G

Kullanıcıların limitleri hakkında detaylı bilgi almak için systemctl status user.slice inceleyebilirsiniz.

Bu kullanıcılar ile ilgili durum, kullanıcı ve servisleri karıştırmamak gerekiyor. Konu ile ilgili detaylı bilgi systemd, cgroup v2, rhel user.slice  gibi kelimelerle araştırma yapabilirsiniz.


1. https://access.redhat.com/solutions/1257953

2. https://access.redhat.com/documentation/en-us/red_hat_enterprise_linux/7/html/resource_management_guide/sec-default_cgroup_hierarchies





Yorumlar

Bu blogdaki popüler yayınlar

ttnet tilgin hg1332 modem(router) kablosuz özelliğini güçlendirmek

Bu gün ttnetin hediyesi olan tilgin yönlendiriciyle biraz oynayayım dedim Matkap, ve rg316-rp-sma kablo alıp cihazın kapağını tekrar açtım. Matkapla usb çıkışın yanına bir delik açarak kaployu taktım. Sonra elimdeki antenlerden ikiti tanesini takıp test ettim. . Bu iki antenin, gözle farkedilir derecede sinyalleri kuvvetlendirdiğini fark ettim.. Normalde bu cihaz ile evin iki en uc noktaları arasında haberleşme olmaz iken şimdi en kör iki uç arasında sorun olmadan kablosuz kullanılabildiğini gördüm. Arada 4 tane kuvvetli beton duvar mevcut. Deneme bitti, tilgin rafa kalktı yine. Her nekadar ben bu cihazı kaldırsamda, kullanmak zorunda olan arkadaşlar, bir kablo ve ikitane anten takarak her herde kullanabilirler. İyi eğlenceler.

yerel ssl ca sertifikasını güvenli sertifika olarak kabul etmek. (özet tekrar)

  openssl s_client  -connect akyuz.tech:443 -showcerts > /tmp/akyuz.tech.cacrt keytool -import -alias akyuz.tech  -keystore  /etc/pki/ca-trust/extracted/java/cacerts -file /tmp/akyuz.tech.cacrt /etc/pki/ca-trust/extracted/java/cacerts dosyası varsayılan java için varsayılan ca cert dosyasıdır.   cp -iv /tmp/akyuz.tech.cacrt /etc/pki/ca-trust/source/anchors/ update-ca-trust     DOMAIN=akyuz.tech openssl s_client -showcerts -connect ${DOMAIN}:443 </dev/null | sed -n -e '/BEGIN\ CERTIFICATE/,/END\ CERTIFICATE/ p' > ${DOMAIN}.cert