web-dev-qa-db-fra.com

Quelles sont les autorisations correctes pour / tmp? Je mets involontairement tout public récursivement

J'ai créé un répertoire temporaire de vie vraiment très courte que je voulais partager entre quelques utilisateurs pendant quelques heures: /some/path/tmp

Malheureusement, j'ai lancé Sudo chown 777 -R /tmp au lieu de Sudo chown 777 -R tmp, donc mon /tmp le fichier est maintenant complètement public.

Est-ce un problème de sécurité maintenant qu'il est complètement rendu public? Dois-je le rétablir pour des paramètres plus sécurisés? Quelles sont les autorisations correctes pour /tmp?

84
Stephane Rolland

Les paramètres normaux pour /tmp sont 1777, que ls affiche comme drwxrwxrwt. C'est-à-dire: grand ouvert, sauf que seul le propriétaire d'un fichier peut le supprimer (c'est ce que ce bit supplémentaire t signifie pour un répertoire).

Le problème avec un /tmp avec le mode 777, un autre utilisateur peut supprimer un fichier que vous avez créé et remplacer le contenu de son choix.

Si votre /tmp est un système de fichiers tmpfs, un redémarrage restaurera tout. Sinon, exécutez chmod 1777 /tmp.

De plus, de nombreux fichiers dans /tmp doit être privé. Cependant, au moins un répertoire doit absolument être lisible par tout le monde: /tmp/.X11-unix, et éventuellement d'autres répertoires similaires (/tmp/.XIM-unix, etc.). La commande suivante devrait surtout régler les choses:

chmod 1777 /tmp
find /tmp -mindepth 1 -name '.*-unix' -exec chmod 1777 {} + -Prune -o -exec chmod go-rwx {} +

C'est à dire. rendre tous les fichiers et répertoires privés (supprimer toutes les autorisations pour les groupes et autres), mais rendre les sockets X11 accessibles à tous. Le contrôle d'accès sur ces sockets est appliqué par le serveur et non par les autorisations de fichier. Il peut y avoir d'autres sockets qui doivent être accessibles au public. Courir find /tmp -type s -user 0 pour découvrir les sockets appartenant à root dont vous pourriez avoir besoin pour rendre le monde accessible. Il peut également y avoir des sockets appartenant à d'autres utilisateurs du système (par exemple pour communiquer avec un bus système); explorer avec find /tmp -type s ! -user $UID (où $UID est votre ID utilisateur).

/tmp et /var/tmp devrait avoir des droits de lecture, d'écriture et d'exécution pour tous; mais vous ajouteriez généralement le bit collant (o+t), pour empêcher les utilisateurs de supprimer des fichiers/répertoires appartenant à d'autres utilisateurs. Donc chmod a=rwx,o+t /tmp devrait marcher.

En ce qui concerne la modification récursive des autorisations ... Tant que le propriétaire/groupe reste tel qu'il est pour les fichiers et les répertoires, cela ne devrait pas poser beaucoup de problème. Mais vous pouvez peut-être modifier l'autorisation de tout sous /tmp (pas/tmp lui-même) pour garantir la confidentialité des utilisateurs, en supprimant les droits rx des autres et peut-être du groupe.

Trouver est un bon moyen de le faire. En tant que root, faites:

cd /tmp
find . -type f -exec chmod u=rw,go= {} \;   # (or u=rw,g=r,o= {})
find . -type d -exec chmod u=rwx,go= {} \;  # (or u=rwx,g=rx,o= {})
11
Baard Kopperud
[root@Niflheim tmp]# ls -alF .
total 1632
drwxrwxrwt 15 root root    4096 Apr  7 04:24 ./
drwxr-xr-x 28 root root    4096 Apr  2 21:02 ../
[root@Niflheim tmp]# stat -c '%A %a %n' .
drwxrwxrwt 1777 .

À partir d'une machine CentOS 5.9.

3
Aaron D. Marasco