Comment mktemp crée-t-il des fichiers temporaires dans un répertoire sans autorisation d'écriture dans Ubuntu?

1

J'ai remarqué que dans Ubuntu, mktemp permet à un utilisateur de créer des fichiers temporaires dans un répertoire, même si les autorisations d'écriture ne sont pas autorisées pour cet utilisateur. Je m'attendais donc à ce que les autorisations sur mktemp lisent quelque chose comme ceci, donnant à l'utilisateur des privilèges root temporaires pendant son exécution:

-rwsr-xr-x 1 root root   35392 Nov 19  2012 mktemp

mais au lieu de cela, ils lisent quelque chose comme ceci:

-rwxr-xr-x 1 root root   35392 Nov 19  2012 mktemp

Là où je pensais qu'il y avait un 's', il y a un 'x', ce qui signifie que mktemp ne fonctionne pas avec les privilèges root. Comment mktemp peut-il créer des fichiers temporaires dans un répertoire sans en avoir l’autorisation?

MYV
la source

Réponses:

7

mktempcrée par défaut un répertoire temporaire sous /tmp, qui par défaut est accessible en écriture pour n'importe qui; si vous passez le --tmpdir option de mktemp (ou définissez le TMPDIR variable d’environnement), il essaiera de créer un répertoire temporaire dans le répertoire indiqué par l’argument de l’option, et que volonté échouez sauf si vous avez le droit d'écriture dans le répertoire indiqué. Par exemple:

[me@box] $ mktemp
/tmp/tmp.sL1g7rRGQv
[me@box] $ mktemp --tmpdir=/root
mktemp: failed to create file via template `/tmp.XXXXXXXXXXX': Permission denied

Si vous faites, par exemple, mktemp --tmpdir=/root en tant qu'utilisateur non root et ne pas échouer, alors quelque chose de très bizarre se passe. Êtes-vous sûr que c'est ce que vous voyez?

Aaron Miller
la source
J'utilisais juste les drapeaux par défaut. Je pensais que cela mettait des fichiers dans ./tmp, pas / tmp parce que apparemment je ne faisais pas attention. Merci!
MYV
Heureux d'avoir pu aider!
Aaron Miller
4
Un peu nit-picking: IMHO /tmp a généralement le peu collant ( t ) ensemble: drwxrwxrwt root root 0 May 24 23:52 /tmp. C'est à dire. tout le monde peut y créer des fichiers / répertoires, mais ne peut pas supprimer / renommer des fichiers appartenant à quelqu'un d'autre - même si c'est le cas. officiellement monde en écriture comme indiqué par ls. Pour plus d'informations, voir par exemple en.wikipedia.org/wiki/Sticky_bit
mpy