Мне интересно, может ли кто-нибудь помочь мне с этим, я пытаюсь выяснить, как обрабатывать время проверки, время использования проблемы и отказаться от привилегий, когда они не нужны , в случае, например, это символическая ссылка на файл, который можно изменить, чтобы сказать теневой файл. Предполагая, что приведенная ниже функция вызывается, когда вызывающий процесс работает с повышенными привилегиями.Обновите файл на безопасном уровне с символическими ссылками - 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);
}
Реверса схема сравнения безвкусная и устаревшая. – chqrlie
@chqrlie это схема, которую я всегда видел как способ избежать TOCTTOU. заботиться о том, чтобы поделиться более элегантной и современной схемой? – thurizas
Включить дополнительные предупреждения компилятора. 'gcc -Wall -W -Werror' или' clang -Weverything -Werror' предотвращает это и многие другие глупые ошибки и опечатки. Обратное сравнение позволяет уменьшить читаемость ИМХО. – chqrlie