Quels sont les répertoires accessibles en écriture par défaut?

14

Dans un système de fichiers Linux standard, lesquels de ces répertoires communs sont accessibles en écriture par défaut ?

 /tmp 
 /etc
 /var 
 /proc 
 /bin 
 /boot
 /....
 ....

Pourquoi sont-ils accessibles en écriture dans le monde? Cela pose-t-il un risque pour la sécurité?

Abdennour TOUMI
la source

Réponses:

16

Les seuls répertoires mandatés par la FHS qui sont généralement accessibles en écriture mondiale sont /tmpet /var/tmp. Dans les deux cas, c'est parce qu'ils sont destinés à stocker des fichiers temporaires qui peuvent être créés par n'importe qui.

Il est également courant /dev/shm, en tant que tmpfs (système de fichiers soutenu par la RAM), d'accéder rapidement aux données de taille moyenne partagées entre les processus, ou tout simplement de créer des fichiers dont la destruction est garantie au redémarrage.

Il peut également y avoir un /var/mailou /var/spool/mail, et parfois d'autres répertoires de spouleur. Ceux-ci sont utilisés pour conserver temporairement le courrier avant qu'il ne soit traité. Ils ne sont pas toujours accessibles en écriture, selon les outils utilisés. Quand ils le sont, c'est parce que les fichiers peuvent y être créés par des outils utilisateur pour être traités par des démons.

Tous ces répertoires ont généralement le sticky bit ( t) défini, ce qui signifie que seul le propriétaire d'un fichier ou du répertoire peut déplacer ou supprimer les fichiers qu'il contient.

Tout programme fonctionnant comme n'importe quel utilisateur peut créer des fichiers dans ces répertoires, et c'est au programme de création de faire ce qu'il faut en matière de sécurité pour ses données particulières. Il n'y a pas de problème de sécurité général particulier autre que quelqu'un remplissant potentiellement le système de fichiers, mais beaucoup de possibilités pour un programme de se tromper.

Il y a eu quelques mouvements vers des /tmprépertoires spécifiques aux services . Ceux-ci évitent certains des bogues potentiels qui peuvent survenir, il n'est donc pas aussi vital que le programme soit exempt de bogues dans la façon dont il utilise le répertoire.


Vous pouvez trouver les répertoires accessibles en écriture sur votre système avec:

find / -maxdepth 3 -type d -perm -777
Michael Homer
la source
8

/tmp, /var/tmpEt /var/locksont par défaut accessibles en écriture. Il peut y avoir des liens symboliques, tels que /usr/tmp/var/tmp, fournis pour la compatibilité avec les applications plus anciennes.

/tmpet /var/tmpaccessible en écriture car ils sont destinés à être utilisés par tout utilisateur pour tout stockage temporaire. /var/lockest accessible en écriture afin que tout processus, exécuté en tant qu'utilisateur, puisse créer des fichiers de verrouillage dans un emplacement central.

Y a-t-il un risque pour la sécurité? Non, mais en quelque sorte oui.

Les autorisations pour tous ces répertoires sont 1777, le premier 1étant le bit collant . Cela signifie que même si n'importe qui peut créer un fichier dans ces répertoires accessibles en écriture, seul le propriétaire peut supprimer ses propres fichiers (et bien sûr, le superutilisateur peut aussi).

Le risque de sécurité possible peut provenir d'une création de fichier temporaire non sécurisée. Étant donné que ces répertoires sont gratuits, les utilisateurs doivent prendre des précautions pour s'assurer que les fichiers qu'ils créent sont bien de nouveaux fichiers, plutôt que d'ouvrir un fichier existant ou un lien symbolique qui pourrait y avoir été planté par un utilisateur malveillant. Si les fichiers sont créés à l'aide de techniques appropriées, telles que open(…, O_EXCL)ou mkstemp(3), ce risque est évité.

200_success
la source
1
Sur les systèmes modernes, l'un de ces liens symboliques de compatibilité est /var/lock/run/lock
camh
2

/tmp

C'est risqué, car vous devez ajouter du code supplémentaire pour l'utiliser en toute sécurité. De toute évidence, cela est négligé.

Un exemple récent est donné par Steve Kemp. http://blog.steve.org.uk/sometimes_reading_code_makes_you_scream_.html

./mgmt/tools/SysAPI.cc:  tmp = fopen("/tmp/shadow", "w");
./mgmt/tools/SysAPI.cc:    system("/bin/mv -f /tmp/shadow /etc/shadow");

Si vous (l'attaquant) remplacez / tmp / shadow avant la deuxième ligne, vous pouvez remplacer le mot de passe de tout le monde. (Je suppose que l'attaque vous oblige à créer le fichier avant la première ligne et à le rendre accessible en écriture).

Systemd sur linux permet d'atténuer ces vulnérabilités en isolant / tmp pour de nombreux services système. (Sauf ceux qui "utilisent mal / tmp comme emplacement pour les sockets IPC et autres primitives de communication").

Dans Fedora Linux - http://fedoraproject.org/wiki/Features/ServicesPrivateTmp

Explication de Systemd - http://0pointer.de/blog/projects/security.html

sourcejedi
la source
"Je suppose que l'attaque vous oblige à créer le fichier avant la première ligne" - En effet. Si le fichier n'existe pas déjà, la première ligne le créera en tant qu'utilisateur en cours d'exécution (vraisemblablement root), et un autre utilisateur malveillant n'aura pas l'autorisation de le remplacer avant la deuxième ligne. Si le fichier existe déjà, l' fopenécrase mais ne réinitialise pas les autorisations, afin que l'utilisateur malveillant puisse toujours apporter des modifications. En outre, un utilisateur malveillant aurait pu faire quelque chose comme ln -s /bin/bash /tmp/shadowavant la première ligne, de sorte qu'un binaire système essentiel soit écrasé.
hvd
2

Pour trouver des répertoires accessibles en écriture dans le monde, vous pouvez utiliser

find / -xdev -type d \( -perm -0002 -a ! -perm -1000 \) -print

Pour les fichiers, changez le type en f

Pour le type de liens symboliques vers l

Pour définir le bit collant:

find / -xdev -type d \( -perm -0002 -a ! -perm -1000 \) -print0| xargs -0 chmod +t
jithinsha
la source