Bash / proc / sys / net / ipv4 / ip_forward: autorisation refusée

11

J'ai essayé de courir

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

Il dit que l'accès a été refusé à partir de bash, j'ai ensuite fait:

sudo chmod 1+x /proc/sys/net/ipv4/ip_forward

et maintenant il est dit Opération non autorisée.

Comment puis-je y accéder?

Kevin Hernandez
la source
4
Essayez ceci:echo 1 | sudo tee /proc/sys/net/ipv4/ip_forward
Doug Smythies
Cela a fonctionné, pouvez-vous expliquer ce que fait le tee?
Kevin Hernandez
3
Le problème sudo echo 1 > /proc/sys/net/ipv4/ip_forwardest que la redirection de la sortie ne se fait pas en tant que sudo, donc cela ne fonctionne pas. Depuis la page de manuel:, tee - read from standard input and write to standard output and fileset si cela est fait, sudoil dispose des privilèges suffisants pour écrire dans le fichier.
Doug Smythies

Réponses:

15

Les bits d'autorisation pour le fichier /proc/sys/net/ipv4/ip_forwardsont:

-rw-r--r-- 

avec l' owner:groupêtre root:root.

Donc, seul rootpeut écrire dans le fichier.

Quand vous faites:

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

en tant qu'utilisateur normal, vous ne pourrez pas écrire dans le fichier en raison d'une autorisation insuffisante.

Tu peux faire:

  • Utiliser sudoet bash:

    sudo bash -c 'echo 1 > /proc/sys/net/ipv4/ip_forward'
  • Utilisation tee:

    echo 1 | sudo tee /proc/sys/net/ipv4/ip_forward

Notez que vous devez utiliser /etc/sysctl.confpour les opérations persistantes sur les /proc/syssous - répertoires.

En bref, pour activer le transfert IP, vous pouvez simplement mettre ce qui suit dans /etc/sysctl.conf:

net.ipv4.ip_forward = 1

Exécutez ensuite:

sudo sysctl -p

d'avoir un effet immédiat.

Cela a le même effet que d'éditer le fichier /proc/sys/net/ipv4/ip_forward directement, sans parler de beaucoup plus propre et bien sûr persistant.

heemayl
la source
Faire écho 1 | sudo tee / proc / sys / net / ipv4 / ip_forward a fonctionné pour moi, pouvez-vous expliquer ce qu'est le tee?
Kevin Hernandez
1
@ChrisEthanFox teeest une commande pour envoyer tout ce qu'il reçoit à la fois sur la sortie standard et sur les fichiers. Chèqueman tee
heemayl
Je suis connecté en tant que root mais je ne peux toujours pas utiliser la commande rm ( rm /proc/sys/net/ipv4/icmp_echo_ignore_all) pour supprimer un tel fichier! J'ai même vérifié le bit immuable et ce n'est pas défini sur ce fichier ... J'obtiens la même erreur "rm: impossible de supprimer '/ proc / sys / net / ipv4 / icmp_echo_ignore_all': autorisation refusée". Mais comme par magie, je peux éditer le fichier comme vous l'avez décrit! Je ne peux pas réaliser quel est le problème rm!
Mojtaba Rezaeian
@MojtabaRezaeian C'est le noyau qui empêche la suppression. /procc'est-à-dire qu'il procfsvit dans la mémoire et est exposé par le noyau. Ainsi, vous obtenez une vue du noyau, et tout ce que le noyau vous permet de faire sur les fichiers sur un tel FS est totalement à la hauteur du noyau.
heemayl
@heemayl Alors, comment puis-je supprimer ce fichier parce que la création de ce fichier était une option pour désactiver définitivement les requêtes de ping icmp sur mon serveur mais après avoir créé ce fichier maintenant j'ai changé d'avis mais il n'y a aucun moyen de supprimer cette option (bien que maintenant ce ne soit pas une option quand il ne peut pas être changé!) avez-vous une idée de comment faire cela? ou peut-être qu'il faut ouvrir une autre question?
Mojtaba Rezaeian