Sysctl e o interfata pentru citirea si modificarea dinamica a parametrilor de functionare a kernelului in sistemele de operare BSD si Linux. Cu ajutorul sysctl se pot modifica anumte variabile care altfel ar impune o recompilare a kernelului. Este un instrument foarte util cand este necesara optimizarea unui sistem pentru un anumit serviciu sau pentru un anumit tip de resurse.
In Linux parametri disponibili se gasesc in /proc/sys. Existenta procfs este necesara pentru ca sysctl sa functioneze corect. In FreeBSD apelurile de sistem folosite sun implementate direct in kernel ceea ce duce la o imbunatatire a timpului de raspuns.
Ca sa vedem ce parametri ne permite sa citim sau sa modificam putem rula comanda sysctl -a care, in functie de componentele instalate si de sistemul de operare poate returna pana la 2000 de parametri.
[root@LinuxPedia ~]# sysctl -a | head -20 kern.ostype: FreeBSD kern.osrelease: 7.1-RELEASE-p4 kern.osrevision: 199506 kern.version: FreeBSD 7.1-RELEASE-p4 #0: Mon Apr 6 17:00:11 UTC 2009 root@lamp.ro:/usr/obj/usr/src/sys/LAMP kern.maxvnodes: 35343 kern.maxproc: 4004 kern.maxfiles: 8008 kern.argmax: 262144 [root@LinuxPedia ~]#
Daca ne intereseaza un anumit parametru, putem apela sysctl urmat de numele complet sau clasa din care face parte variabila cautata:
[root@LinuxPedia ~]# sysctl security.bsd.see_other_uids security.bsd.see_other_uids: 1 [root@LinuxPedia ~]# sysctl security.bsd security.bsd.suser_enabled: 1 security.bsd.unprivileged_proc_debug: 1 security.bsd.conservative_signals: 1 security.bsd.see_other_gids: 1 security.bsd.see_other_uids: 1 security.bsd.unprivileged_read_msgbuf: 1 security.bsd.hardlink_check_gid: 0 security.bsd.hardlink_check_uid: 0 security.bsd.unprivileged_get_quota: 0 [root@LinuxPedia ~]#
Daca ne intereseaza sa modificam valoarea unei variabile vom folosi semnul egal pentru a-i da o valoare.
[root@LinuxPedia ~]# sysctl kern.maxfiles=2048 kern.maxfiles: 8008 -> 2048 [root@LinuxPedia ~]#
Daca modificam un parametru pe Linux, spre deosebire de FreeBSD, va trebui sa folosim sysctl -w variabila=valoare.
Valorile modificate vor fi sterse la prima resetare a sistemului. Pentru ca schimbarile sa fie permanente trebuie sa le adaugam in fisierul /etc/sysctl.conf de unde vor fi citite la pornire. Un exemplu de fisier /etc/sysctl.conf (FreeBSD) ar fi urmatorul:
# General security.bsd.see_other_uids=0 kern.ipc.shm_use_phys=0 vfs.vmiodirenable=1 vfs.write_behind=1 net.inet.tcp.recvspace=16384 net.inet.tcp.sendspace=32768 net.inet.tcp.always_keepalive=0 kern.ipc.somaxconn=32768 kern.maxfiles=32768 kern.ipc.nmbclusters=65536 net.inet.tcp.syncookies=0 # Protectie la DDoS net.inet.tcp.msl=30000 net.inet.tcp.blackhole=2 net.inet.udp.blackhole=1 net.inet.icmp.icmplim=50 # Firewall net.inet.ip.fw.verbose=1 net.inet.ip.fw.verbose_limit=8 net.inet.ip.fw.dyn_max=16384
Toate variabilele de mai sus vor fi setate la pornirea sistemului. Mai multe detalii legate de sysctl se pot gasi in pagina de manual.