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
?
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= {})
[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.