Pisanie bezpośrednio do / proc versus za pomocą sysctl -w

8

Próbuję skonfigurować jądro mojego serwera Linux, aby nie działał jako router, dla większego bezpieczeństwa. Nie chodzi o to, aby przekazywać pakiety.

Znalazłem to:

echo 0 > /proc/sys/net/ipv4/ip_forward  

i to:

sysctl -w net.ipv4.ip_forward=0  

Oczywiście obaj robią to samo, ale nie jestem pewien, jaka jest prawdziwa różnica między nimi. Chciałbym również, aby w miarę możliwości efekty były trwałe.

John M.
źródło
Bez różnicy, sysctl robi to samo co polecenie echo. Po prostu łatwiej.
vonbrand

Odpowiedzi:

6

Nie ma różnicy. sysctlPoleceń w systemie Linux pisze bezpośrednio do plików /proc/sys. Ten fragment kodu źródłowego dla tego sysctldowodzi:

/*
 * Write a sysctl setting
 */
static int WriteSetting(const char *setting)
{
    /* ... */

    /* used to open the file */
    tmpname = xmalloc(equals - name + 1 + strlen(PROC_PATH));
    strcpy(tmpname, PROC_PATH);
    strncat(tmpname, name, (int) (equals - name));
    tmpname[equals - name + strlen(PROC_PATH)] = 0;
    /* change . to / */
    slashdot(tmpname + strlen(PROC_PATH), '.', '/');

    /* ... */

    fp = fopen(tmpname, "w");
    /* some error checking ... */
    rc = fprintf(fp, "%s\n", value);

    /* ... */
}

Jeśli chcesz czegoś trwałego, musisz edytować /etc/sysctl.conflub dodać plik w /etc/sysctl.d(np. /etc/sysctl.d/99-disable-ip-forwarding.conf) Zawierający:

# Disable IP packet forwarding
net.ipv4.ip_forward = 0

Nawiasem mówiąc, niektóre dystrybucje już domyślnie wyłączają to jawnie . Na przykład RHEL <= 6 lub Fedora <= 15 mają to w /etc/sysctl.conf:

# Controls IP packet forwarding
net.ipv4.ip_forward = 0

Fedora 20 już go nie wyłącza. Nie ma ustawienia przekazywania w /etc/sysctl.conf, /etc/sysctl.d/lub /usr/lib/sysctl.d/.

Cristian Ciupitu
źródło
Czy przekazywanie nie zawsze jest domyślnie wyłączone?
user1686
Tak też myślę, ale nigdy nie wiadomo, jakie dzikie dystrybucje mogą tam być :-)
Cristian Ciupitu
@ grawitacja, domyślnie wyłączona również w mojej dystrybucji. Jestem teraz trochę zmieszany, czy jest jakaś inna konfiguracja jądra, aby uniknąć działania naszego systemu jako routera?
John M.
@JohnM .: czego można uniknąć, jeśli ustawienie domyślne jest wyłączone?
Cristian Ciupitu
@CristianCiupitu, nie wiem, jestem nowy w Linuksie i chcę tylko wyłączyć mój serwer z uruchamiania jako router. Nie jestem więc pewien, czy to polecenie jest wystarczające :)
John M.