Je me demande si quelqu'un pourrait m'aider avec cela, je suis essayer de comprendre comment gérer un moment de vérification, problème de temps d'utilisation et de laisser tomber les privilèges quand ils ne sont pas nécessaires , dans le cas par exemple c'est un lien symbolique vers le fichier qui pourrait être changé pour dire le fichier shadow. En supposant que la fonction ci-dessous est appelée pendant que le processus appelant s'exécute avec des privilèges élevés.Mettre à jour un fichier en toute sécurité de liens symboliques - C
int
updatefile(char *file)
{
int fd;
if (access(file, R_OK|W_OK)) {
perror("access()");
return (-1);
}
fd = open(file, O_RDWR);
/*
* file is written to here.
*/
printf("Updated %s on...\n", file);
system("date");
/*
* elevated privileges are required here...
*/
return (0);
}
Le schéma de comparaison inverse est inélégant et obsolète. – chqrlie
@chqrlie c'est le schéma que j'ai toujours vu comme un moyen d'éviter TOCTTOU. soin de partager un schéma plus élégant et moderne? – thurizas
Activer plus d'avertissements du compilateur. 'gcc -Wall -W -Werror' ou' clang -Weverything -Werror' empêche cela et bien d'autres erreurs et fautes de frappe. La chose de comparaison inverse réduit la lisibilité à mon humble avis. – chqrlie