# Fatal: can't open lock file /run/xtables.lock: Permission denied \[ résolu \]

**URL:** <https://www.debian-fr.org/t/fatal-cant-open-lock-file-run-xtables-lock-permission-denied-resolu/76330>\
**Category:** Support Debian\
**Created:** [Avril 5, 2018, 8:49 UTC](https://www.debian-fr.org/t/fatal-cant-open-lock-file-run-xtables-lock-permission-denied-resolu/76330 "2018-04-05T08:49:05Z")\
**Posts on this page:** 13\
**Page:** 1

<div class="post-metadata">

**Author:** ![arawaks](https://www.debian-fr.org/letter_avatar_proxy/v4/letter/a/e495f1/32.png) [@arawaks](https://www.debian-fr.org/u/arawaks)\
**Post date:** [Avril 5, 2018, 8:49 UTC](https://www.debian-fr.org/t/fatal-cant-open-lock-file-run-xtables-lock-permission-denied-resolu/76330/1 "2018-04-05T08:49:05Z")

</div>

Bonjour à tous,

Je viens vous voir car j’ai crée un scrypt iptables que j’aimerais activer au démarrage, j’ai utiliser l’outils gnome tweak permettant de glisser directement des scrypts ou autres au démarrage, mais le scrypt iptables ne fonctionne pas. ( L’outils en lui même fonctionne bien, j’ai d’autres programme ne nécessitant aucun droit root qui s’éxécute sans soucis )

Après vérification il s’avère que quand je suis en utilisateur lamba je n’ai pas l’accès nécessaire à l’execution du scrypt, j’ai pourtant donné les droits approprié mais il continue de me refuser l’accès .

Voici le message d’erreur : Fatal: can’t open lock file /run/xtables.lock: Permission denied

Le message est on ne peut plus claire, l’accès m’est refusé, mais je ne trouve pas comment me l’attribué ?

En vous remerciant d’avance

---

<div class="post-metadata">

**Author:** ![Sputnik93](https://www.debian-fr.org/letter_avatar_proxy/v4/letter/s/35a633/32.png) [@Sputnik93](https://www.debian-fr.org/u/Sputnik93)\
**Post date:** [Avril 5, 2018, 9:40 UTC](https://www.debian-fr.org/t/fatal-cant-open-lock-file-run-xtables-lock-permission-denied-resolu/76330/2 "2018-04-05T09:40:31Z")

</div>

Bonjour,

Je suppose que ton script fait appel à la commande `iptables`, ou à d’autres utilitaires réservés à root.  
Il serait possible de rendre utilisables ces commandes pour un utilisateur standard en particulier, mais je te conseille plutôt de faire exécuter ton script par l’utilisateur root au démarrage.  
Pour exécuter automatiquement un script iptables au démarrage, on le place dans le répertoire /etc/network/if-pre-up.d (appelle le iptables par exemple).

Ah, et aussi: teste ton script avant de le faire exécuter à chaque démarrage, surtout si la machine est un serveur distant. Un moyen de le tester est de sauvegarder la config actuelle dans un fichier, d’exécuter ton script, et de restaurer automatiquement la configuration après x secondes ou minutes, ce qui donne un truc comme  
`iptables-save > config.backup && script-iptables && sleep 300 && iptables-restore < config.backup`  
(là ça laisse 5 minutes pour tester les nouvelles règles et vérifier que tout va bien).

---

<div class="post-metadata">

**Author:** ![arawaks](https://www.debian-fr.org/letter_avatar_proxy/v4/letter/a/e495f1/32.png) [@arawaks](https://www.debian-fr.org/u/arawaks)\
**Post date:** [Avril 5, 2018, 2:00 UTC](https://www.debian-fr.org/t/fatal-cant-open-lock-file-run-xtables-lock-permission-denied-resolu/76330/3 "2018-04-05T14:00:29Z")

</div>

@Sputnik93 Merci pour ta réponse 🙂

Je viens d’essayer la 1er solution, car s’est celle qui me correspond le mieux, ( ce n’ai pas un serveur distant ) mais ça ne fonctionne pas .

A noter que j’ai fait quelques recherches annexe grâce à ce que tu m’as dit, apparemment le nom du fichier compte, rapport sûrement à des caractères interdit, le miens est [parfeu.sh](http://parfeu.sh).

Le shabang etc compte aussi apparemment, mais il était déjà présent ( #!/bin/sh ) mais ça ne fonctionne pas

Les droits d’execution sont aussi là

Donc je sais pas trop, :\ je vais continuer les recherches en attendant une réponse

Merci d’avance à @Sputnik93 ainsi qu’aux autres 😉

---

<div class="post-metadata">

**Author:** ![Sputnik93](https://www.debian-fr.org/letter_avatar_proxy/v4/letter/s/35a633/32.png) [@Sputnik93](https://www.debian-fr.org/u/Sputnik93)\
**Post date:** [Avril 5, 2018, 2:45 UTC](https://www.debian-fr.org/t/fatal-cant-open-lock-file-run-xtables-lock-permission-denied-resolu/76330/4 "2018-04-05T14:45:45Z")

</div>

> [@arawaks](#):
>
> Je viens d’essayer la 1er solution, car s’est celle qui me correspond le mieux, ( ce n’ai pas un serveur distant ) mais ça ne fonctionne pas .

OK, c’est-à-dire rendre utilisable les commandes par un utilisateur standard ?  
Il faudrait quelques renseignements supplémentaires:

- `sudo` est-il installé et l’utilisateur est-il membre du groupe sudo ?
- quelles sont les commandes que tu utilises dans le script ? Je suppose `iptables`, mais peut-être qu’il y en a d’autres (n’hésite pas à partager ton script si tu veux)

La façon la plus propre de faire ça selon moi serait d’autoriser ton utilisateur à exécuter ces commandes précédées de `sudo` mais sans avoir à taper de mot de passe, puisqu’on est dans un script. Pour ça, il faut utiliser `visudo`, pour la syntaxe je sais plus exactement, mais ça se trouve sans mal sur le web ou dans le man.

PS: quand tu dis que ça ne fonctionne pas, n’hésite à nous donner des précisions, comme le retour console. Je suppose que tu as eu un ‹&nbsp;permission denied&nbsp;› mais bon, ça ne fait pas de mal de le préciser.

---

<div class="post-metadata">

**Author:** ![PascalHambourg](https://www.debian-fr.org/user_avatar/www.debian-fr.org/pascalhambourg/32/5837_2.png) [@PascalHambourg](https://www.debian-fr.org/u/PascalHambourg)\
**Post date:** [Avril 5, 2018, 2:54 UTC](https://www.debian-fr.org/t/fatal-cant-open-lock-file-run-xtables-lock-permission-denied-resolu/76330/5 "2018-04-05T14:54:49Z")

</div>

Un script placé dans /etc/network/if-pre-up.d/ doit répondre à plusieurs conditions :

- il doit être exécutable (droit x)
- il doit commencer par le “shebang” `#!/bin/sh` ou autre interpréteur approprié (bash si présence de “bashismes”)
- son nom ne doit comporter que des lettres, chiffres, tirets et traits bas (underscore), pas de point.

Attention : les scripts présents dans /etc/network/if-pre-up.d/ sont exécutés lors de la configuration de chaque interface définie dans le fichier /etc/network/interface et les fichiers qu’il “source” (par défaut dans /etc/network/interfaces.d/), donc ils sont susceptibles d’être exécutés plusieurs fois et doivent être conçus en conséquence :

- n’agir que pour une seule interface, par exemple l’interface de loopback “lo” qui est toujours configurée dans le fichier interfaces),
- ou tester et enregistrer un état par exemple dans /run (volatil donc effacé à chaque démarrage)
- ou bien pouvoir être exécuté plusieurs fois en produisant le même résultat, donc indépendamment du fait que des règles iptables sont déjà présentes ou pas.

---

<div class="post-metadata">

**Author:** ![arawaks](https://www.debian-fr.org/letter_avatar_proxy/v4/letter/a/e495f1/32.png) [@arawaks](https://www.debian-fr.org/u/arawaks)\
**Post date:** [Avril 5, 2018, 5:49 UTC](https://www.debian-fr.org/t/fatal-cant-open-lock-file-run-xtables-lock-permission-denied-resolu/76330/6 "2018-04-05T17:49:55Z")

</div>

@Sputnik93

> [@Sputnik93](#):
>
> OK, c’est-à-dire rendre utilisable les commandes par un utilisateur standard ?
> 
> Il faudrait quelques renseignements supplémentaires:
> 
> sudo est-il installé et l’utilisateur est-il membre du groupe sudo ?  
> quelles sont les commandes que tu utilises dans le script ? Je suppose iptables, mais peut-être qu’il y en a d’autres (n’hésite pas à partager ton script si tu veux)

Oui c’est exactement sa ! Il faut que l’utilisateur standard y ai accès étant donné que le scrypt ne soit rencontré aucun problèmes de droit lors de son exécution au démarrage.

Sudo est installé est l’utilisateur à l’accès.

> #!/bin/sh  
> **Mise à 0**
> 
> iptables -t filter -F  
> iptables -t filter -X  
> echo «&nbsp;Mise à 0&nbsp;»
> 
> # On bloque tout
> 
> iptables -t filter -P INPUT DROP  
> iptables -t filter -P FORWARD DROP  
> iptables -t filter -P OUTPUT DROP  
> _# On drop les scans XMAS et NULL._  
> iptables -A INPUT -p tcp --tcp-flags FIN,URG,PSH FIN,URG,PSH -j DROP  
> iptables -A INPUT -p tcp --tcp-flags ALL ALL -j DROP  
> iptables -A INPUT -p tcp --tcp-flags ALL NONE -j DROP  
> iptables -A INPUT -p tcp --tcp-flags SYN,RST SYN,RST -j DROP
> 
> \__ **Dropper silencieusement tous les paquets broadcastés.** _
> 
> iptables -A INPUT -m pkttype --pkt-type broadcast -j DROP  
> echo «&nbsp;Interdiction&nbsp;»
> 
> # Ne pas casser les connexions établies
> 
> iptables -A INPUT -m state --state RELATED,ESTABLISHED -j ACCEPT  
> iptables -A OUTPUT -m state --state RELATED,ESTABLISHED -j ACCEPT
> 
> # Autorise le loopback (127.0.0.1)
> 
> iptables -t filter -A INPUT -i lo -j ACCEPT  
> iptables -t filter -A OUTPUT -o lo -j ACCEPT  
> echo «&nbsp;Loopback&nbsp;»
> 
> # ICMP (le ping)
> 
> iptables -t filter -A INPUT -p icmp -j ACCEPT  
> iptables -t filter -A OUTPUT -p icmp -j ACCEPT  
> echo «&nbsp;Ping ok&nbsp;»
> 
> # SSH IN/OUT
> 
> iptables -t filter -A INPUT -p tcp --dport 4400 -j DROP  
> iptables -t filter -A OUTPUT -p tcp --dport 4400 -j DROP  
> echo «&nbsp;SSH ok&nbsp;»
> 
> # DNS In/Out
> 
> iptables -t filter -A OUTPUT -p tcp --dport 53 -j ACCEPT  
> iptables -t filter -A OUTPUT -p udp --dport 53 -j ACCEPT  
> iptables -t filter -A INPUT -p tcp --dport 53 -j ACCEPT  
> iptables -t filter -A INPUT -p udp --dport 53 -j ACCEPT  
> echo «&nbsp;dns ok&nbsp;»
> 
> # NTP Out
> 
> iptables -t filter -A OUTPUT -p udp --dport 123 -j DROP  
> echo «&nbsp;ntp ok&nbsp;»
> 
> # HTTP + HTTPS Out
> 
> iptables -t filter -A OUTPUT -p tcp --dport 80 -j ACCEPT  
> iptables -t filter -A OUTPUT -p tcp --dport 443 -j ACCEPT
> 
> # HTTP + HTTPS In
> 
> iptables -t filter -A INPUT -p tcp --dport 80 -j ACCEPT  
> iptables -t filter -A INPUT -p tcp --dport 443 -j ACCEPT  
> iptables -t filter -A INPUT -p tcp --dport 8443 -j ACCEPT  
> echo «&nbsp;http ok&nbsp;»
> 
> # FTP Out
> 
> iptables -t filter -A OUTPUT -p tcp --dport 21 -j DROP  
> iptables -t filter -A OUTPUT -p tcp --dport 20 -j DROP
> 
> # FTP In
> 
> # imodprobe ip\_conntrack\_ftp
> 
> iptables -t filter -A INPUT -p tcp --dport 20 -j DROP  
> iptables -t filter -A INPUT -p tcp --dport 21 -j DROP  
> iptables -t filter -A INPUT -m state --state ESTABLISHED,RELATED -j ACCEPT  
> echo «&nbsp;ftp ok&nbsp;»
> 
> # Mail SMTP:25
> 
> iptables -t filter -A INPUT -p tcp --dport 25 -j DROP  
> iptables -t filter -A OUTPUT -p tcp --dport 25 -j DROP
> 
> # Mail POP3:110
> 
> iptables -t filter -A INPUT -p tcp --dport 110 -j DROP  
> iptables -t filter -A OUTPUT -p tcp --dport 110 -j DROP
> 
> # Mail IMAP:143
> 
> iptables -t filter -A INPUT -p tcp --dport 143 -j DROP  
> iptables -t filter -A OUTPUT -p tcp --dport 143 -j DROP
> 
> # Mail POP3S:995
> 
> iptables -t filter -A INPUT -p tcp --dport 995 -j DROP  
> iptables -t filter -A OUTPUT -p tcp --dport 995 -j DROP  
> echo «&nbsp;mail ok&nbsp;»  
> #log les paquets en entrée.  
> iptables -A INPUT -j LOG
> 
> # log les paquets forward.
> 
> iptables -A FORWARD -j LOG

> [@Sputnik93](#):
>
> La façon la plus propre de faire ça selon moi serait d’autoriser ton utilisateur à exécuter ces commandes précédées de sudo mais sans avoir à taper de mot de passe, puisqu’on est dans un script. Pour ça, il faut utiliser visudo, pour la syntaxe je sais plus exactement, mais ça se trouve sans mal sur le web ou dans le man.

Après quelques recherches [sudoers [Wiki ubuntu-fr]](https://doc.ubuntu-fr.org/sudoers) je viens de respecter la dite syntaxe mais le résultat escompté n’est pas au rendez vous .

Voici mon fichier de config :

 ![Capture d’écran de 2018-04-05 19-46-01](https://www.debian-fr.org/uploads/default/original/2X/f/f3c4e240144d3ed880931b043d6b3ef11ba9e2b2.png)

La ligne %arawaks ALL=(ALL:ALL) ALL est bien évidemment temporaire, le temps que je fasse les manipulations nécessaire.

> [@Sputnik93](#):
>
> PS: quand tu dis que ça ne fonctionne pas, n’hésite à nous donner des précisions, comme le retour console. Je suppose que tu as eu un ‘permission denied’ mais bon, ça ne fait pas de mal de le préciser.

Pour être franc j’étais au boulot quand j’ai écrit le premier message, j’avoue ne pas m’être attarder, mais tu as raisons autant pour moi !

> [@PascalHambourg](#):
>
> Un script placé dans /etc/network/if-pre-up.d/ doit répondre à plusieurs conditions :
> 
> il doit être exécutable (droit x)  
> il doit commencer par le “shebang” #!/bin/sh ou autre interpréteur approprié (bash si présence de “bashismes”)  
> son nom ne doit comporter que des lettres, chiffres, tirets et traits bas (underscore), pas de point.
> 
> Attention : les scripts présents dans /etc/network/if-pre-up.d/ sont exécutés lors de la configuration de chaque interface définie dans le fichier /etc/network/interface et les fichiers qu’il “source” (par défaut dans /etc/network/interfaces.d/), donc ils sont susceptibles d’être exécutés plusieurs fois et doivent être conçus en conséquence :

Bonsoir, @PascalHambourg tout d’abord merci à toi pour ton aide.

C’est justement ce même document que j’ai lû, et donc je fessais référence un peu plus haut

---

<div class="post-metadata">

**Author:** ![PascalHambourg](https://www.debian-fr.org/user_avatar/www.debian-fr.org/pascalhambourg/32/5837_2.png) [@PascalHambourg](https://www.debian-fr.org/u/PascalHambourg)\
**Post date:** [Avril 5, 2018, 6:15 UTC](https://www.debian-fr.org/t/fatal-cant-open-lock-file-run-xtables-lock-permission-denied-resolu/76330/7 "2018-04-05T18:15:28Z")

</div>

Quel document ? Je n’ai mentionné aucun document.

---

<div class="post-metadata">

**Author:** ![Sputnik93](https://www.debian-fr.org/letter_avatar_proxy/v4/letter/s/35a633/32.png) [@Sputnik93](https://www.debian-fr.org/u/Sputnik93)\
**Post date:** [Avril 6, 2018, 10:00 UTC](https://www.debian-fr.org/t/fatal-cant-open-lock-file-run-xtables-lock-permission-denied-resolu/76330/8 "2018-04-06T10:00:08Z")

</div>

Il faut que:

- tu déplaces le script: là où il est, c’est root qui l’exécutera à l’initialisation de chaque interface. Sauf que comme le soulignait PascalHambourg, le nom de fichier ne doit pas comporter de point. Et ce que tu veux apparemment, c’est qu’il soit exécuté par un utilisateur standard, pas par root. (pour moi c’est “mieux rangé” de mettre les scripts iptables dans ce répertoire et qu’ils soient exécutés par root, mais tu es libre de faire comme tu le sens).
- dans ton script, chaque `iptables` soit précédé de `sudo` (tu peux faire `sed -i 's/iptables/sudo iptables/' <chemin vers parfeu.sh>` pour aller plus vite)
- dans le fichier sudoers (que tu édites avec la commande `visudo`) làl où il y a NOPASSWD, il ne faut pas mettre le chemin vers ton script, mais le chemin vers la commande `iptables`(normalement `/sbin/iptables`)

---

<div class="post-metadata">

**Author:** ![arawaks](https://www.debian-fr.org/letter_avatar_proxy/v4/letter/a/e495f1/32.png) [@arawaks](https://www.debian-fr.org/u/arawaks)\
**Post date:** [Avril 6, 2018, 7:13 UTC](https://www.debian-fr.org/t/fatal-cant-open-lock-file-run-xtables-lock-permission-denied-resolu/76330/9 "2018-04-06T19:13:03Z")

</div>

@Sputnik93 @PascalHambourg Super ça fonctionne !! Merci beaucoup à vous deux !

Avant de cloturer le post, j’aimerais savoir, pour l’utilisateur lambda j’aimerais qu’il puisse faire les MAJ, donc il faut que je lui autorise via sudoers le scrypt qui innitialise l’update et l’upgrade, mais je ne sais pas lequel sait … J’ai regardé dans /sbin et j’ai pensé qu’il s’agisait de unix\_update mais apparemment non, vous ne serez pas lequel s’est par hasard ?

Encore merci à vous ! 🙂

---

<div class="post-metadata">

**Author:** ![Sputnik93](https://www.debian-fr.org/letter_avatar_proxy/v4/letter/s/35a633/32.png) [@Sputnik93](https://www.debian-fr.org/u/Sputnik93)\
**Post date:** [Avril 9, 2018, 7:53 UTC](https://www.debian-fr.org/t/fatal-cant-open-lock-file-run-xtables-lock-permission-denied-resolu/76330/10 "2018-04-09T07:53:49Z")

</div>

Les commandes qui permettent de faire les MàJ sur une Debian sont (au choix) `apt`, `apt-get` ou `aptitude`.  
Je te laisse consulter les manuels de ces commandes (en faisant `man <commande>`) pour l’utilisation, en gros c’est `<commande> update` pour rafraîchir la liste des dépôts, et `<commande> upgrade` pour mettre à jour les paquets qui ont une version plus récente dans les dépôts.

---

<div class="post-metadata">

**Author:** ![arawaks](https://www.debian-fr.org/letter_avatar_proxy/v4/letter/a/e495f1/32.png) [@arawaks](https://www.debian-fr.org/u/arawaks)\
**Post date:** [Avril 9, 2018, 4:19 UTC](https://www.debian-fr.org/t/fatal-cant-open-lock-file-run-xtables-lock-permission-denied-resolu/76330/11 "2018-04-09T16:19:41Z")

</div>

@Sputnik93 Autant pour moi, ma question pouvait porter à confusion, je cherche à autoriser l’utilisateur à pouvoir faire les MAJ. Sauf que pour sa, il faut que je spécifie dans visudo qu’il à le droit de pouvoir executer apt-get update/upgrade/dist-upgrade.

Mais je ne sais pas quelle commande fait appel à l’update, afin de l’indiquer dans visudo.

J’ai était voir dans /sbin y a un scrypt nommé unix\_update, mais ça ne doit pas être sa étant donné que quand je l’indique dans visudo, l’utilisateur arawaks ne peut toujours pas utiliser ces commandes.

---

<div class="post-metadata">

**Author:** ![Sputnik93](https://www.debian-fr.org/letter_avatar_proxy/v4/letter/s/35a633/32.png) [@Sputnik93](https://www.debian-fr.org/u/Sputnik93)\
**Post date:** [Avril 9, 2018, 4:27 UTC](https://www.debian-fr.org/t/fatal-cant-open-lock-file-run-xtables-lock-permission-denied-resolu/76330/12 "2018-04-09T16:27:48Z")

</div>

Ben si ton utilisateur est dans le groupe sudo (tu peux vérifier avec `id <nom d'utilisateur>`) il peut exécuter `sudo apt-get tout-ce-qu'il-veut`, il devra juste taper son mot de passe.  
Après, si tu le souhaites, tu peux en effet restreindre les commandes que l’utilisateur peut exécuter avec sudo, au lieu du ALL tu mets juste les chemins vers les commandes autorisées (tu peux trouver le chemin d’une commande en tapant `which <nom de la commande>`, pour apt-get c’est /usr/bin/apt-get).  
Tu peux aussi vouloir faire en sorte qu’il puisse faire des sudo apt-get xxx sans taper de mot de passe, dans ce cas tu mets le chemin vers apt-get à la suite d’iptables, sur la ligne avec NOPASSWD.

Je sais pas trop à quoi ça sert, /sbin/unix\_update, mais d’après `file` c’est un LSB shared object (une _librairie_ quoi), donc c’est pas ce que tu cherches.

---

<div class="post-metadata">

**Author:** ![arawaks](https://www.debian-fr.org/letter_avatar_proxy/v4/letter/a/e495f1/32.png) [@arawaks](https://www.debian-fr.org/u/arawaks)\
**Post date:** [Avril 9, 2018, 5:05 UTC](https://www.debian-fr.org/t/fatal-cant-open-lock-file-run-xtables-lock-permission-denied-resolu/76330/13 "2018-04-09T17:05:47Z")

</div>

Ok @Sputnik93 super ta commande “which” je connaissais pas ça va m’être très pratique ! Tout fonctionne merci beaucoup !
