Quelles sont les autorisations correctes pour / tmp? J'ai involontairement tout définir public récursivement

79

J'ai abusé sudo.

J'ai créé un répertoire temporaire à très courte durée de vie que je souhaitais partager entre quelques utilisateurs pendant quelques heures ... et j'ai nommé ce répertoire /some/path/tmp

Malheureusement, j'ai lancé sudo chown 777 -R /tmpau lieu de sudo chown 777 -R tmp, mon /tmpdossier est maintenant complètement public.

J'utilise le commun /tmpassez souvent (tous les jours, presque toutes les heures) personnellement pour des fichiers de courte durée, des scripts, beaucoup de scripts.

Est-ce un problème de sécurité maintenant qu'il est complètement ouvert au public? Devrais-je revenir à des paramètres plus sécurisés, ou à des paramètres par défaut communs pour une distribution Debian ou Ubuntu - (je ne sais pas qui ils étaient)? Quelles sont les autorisations correctes pour /tmp?

Stéphane Rolland
la source
Attention, j'ai oublié quelque chose d'important dans ma réponse initiale: le socket X11 doit être accessible au public, sinon vous ne pourrez pas démarrer de nouvelles applications à interface graphique. J'ai mis à jour ma réponse.
Gilles 'SO- arrête d'être méchant'
Était-ce chownou chmod?
Melebius
@ Melebius Je suis un peu perplexe devant votre question: je ne l'ai pas mentionnée chmod. chown (comme ch-own), concerne la propriété des fichiers, quel utilisateur est propriétaire d'un fichier. chmod (comme ch - modifify) concerne plus particulièrement ceux qui peuvent exécuter, écrire à l'intérieur ou lire le contenu d'un fichier.
Stéphane Rolland
2
@StephaneRolland Oui, c'est ce qui m'a confondu. Vous pouvez utiliser chown 777ce paramètre pour définir la propriété d'un fichier sur l'utilisateur portant l'ID 777. Cependant, toutes les réponses, y compris celle acceptée, fonctionnent avec chmod. Étant donné qu'ils ont tous défini l'autorisation sur la même valeur pour tous les utilisateurs (propriétaire, groupe, autres), la plupart des effets de la propriété du fichier deviennent inutiles. Cependant, la commande correcte à corriger le résultat sudo chown 777 -R /tmpdevrait être sudo chown root -R /tmp.
Melebius

Réponses:

117

Les paramètres normaux pour /tmpsont 1777, ce qui lsindique que drwxrwxrwt. C'est-à-dire: grand ouvert, sauf que seul le propriétaire d'un fichier peut le supprimer (c'est ce que ce tbit supplémentaire signifie pour un répertoire).

Le problème avec le /tmpmode 777 est qu'un autre utilisateur peut supprimer un fichier que vous avez créé et remplacer le contenu de son choix.

Si vous êtes /tmpun système de fichiers tmpfs, un redémarrage restaurera tout. Sinon, cours chmod 1777 /tmp.

En outre, de nombreux fichiers /tmpdoivent être privés. Cependant, au moins un répertoire doit absolument être lisible par tout le monde:, /tmp/.X11-unixet éventuellement d’autres répertoires similaires ( /tmp/.XIM-unix, etc.). La commande suivante devrait généralement régler le problème:

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 du groupe et autres), mais rendre les sockets X11 accessibles à tous. Le contrôle d'accès sur ces sockets est imposé par le serveur et non par les autorisations de fichier. Il peut y avoir d'autres sockets qui doivent être accessibles au public. Courez find /tmp -type s -user 0pour découvrir les sockets appartenant à la racine que vous devrez peut-être rendre accessibles au monde entier. Il peut également y avoir des prises 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ù $UIDest votre identifiant utilisateur).

Gilles, arrête de faire le mal
la source
1
pourriez-vous expliquer le deuxième chmod plus?
Bartlomiej Lewandowski
@BartlomiejLewandowski go-rwx: aucune autorisation pour le groupe et les autres. Cela définit les autorisations sur rwx------(sauf que les fichiers créés depuis chmodpeuvent éventuellement se retrouver avec moins d'autorisations, par exemple rw-------). En d'autres termes, les fichiers ne seront accessibles que par leur propriétaire. /tmp/.[!.]*est d'inclure les fichiers de points, qui existent généralement dans /tmp.
Gilles 'SO- arrête d'être méchant'
@BartlomiejLewandowski: chmod -go-rwx: définissez les droits "rwx" sur le propriétaire et le groupe. r = lire, w = écrire, x = exécuter (pour le fichier) ou entrer / traverse (pour le répertoire). 777 = rwxrwxrwx (la partie droite peut être vue comme: "set 'r' set 'w' set 'x', set 'r' set 'w' set 'x', set 'r' set 'w' set 'x '", qui en binaire est représenté par" 111111111 "(1 pour régler, 0 pour non défini). Et" 111111111 "en binaire est représenté en octal par" 777 "(octal = groupes de 3 bits, chaque groupe valant de 0 à 7). Si "rwxr-xr--" ce serait "111101100" qui en octal est "754"
Olivier Dulac
2
Le + t est appelé le bit collant. C'est ce qui empêche toute personne autre que le propriétaire de pouvoir supprimer des fichiers, même si les autorisations sont 777 sinon. Le sticky bit était à l’origine de faire en sorte que le noyau laisse généralement des programmes en mémoire lorsqu’ils se terminent afin qu’ils n’aient pas à les récupérer à la prochaine exécution. Nous parlons de PDP11 jours ....
kurtm
1
@ GabrielFair J'ai remplacé la commande en utilisant des caractères génériques par un en utilisant find qui ne rencontrera pas ce problème.
Gilles 'SO- arrête d'être méchant'
10

/tmpet /var/tmpaurait dû lire, écrire et exécuter des droits pour tous; mais vous ajouteriez généralement aussi sticky-bit ( o+t) pour empêcher les utilisateurs de supprimer des fichiers / répertoires appartenant à d'autres utilisateurs. Alors chmod a=rwx,o+t /tmpdevrait fonctionner.

Pour ce qui est de changer les autorisations de manière récursive ... Tant que le propriétaire / groupe reste tel qu'il est pour les fichiers et les répertoires, cela ne devrait pas poser trop de problème. Mais vous pourriez peut-être changer la permission de tout ce qui est sous /tmp(pas / tmp lui-même) pour assurer la confidentialité des utilisateurs, en supprimant les rxdroits 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= {})
Baard Kopperud
la source
Sur un système de bureau typique, vous devriez également rendre le /tmp/.X11-unix/*monde lisible, sinon vous ne pourrez plus lancer d'applications X.
Gilles 'SO- arrête d'être méchant'
chmod a=rwX,o+t /tmp -Rdevrait faire la findmagie.
dhill
3
[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.

Aaron D. Marasco
la source