Одна вещь, о которой я могу думать, хотя она кажется слабой - access () использует реальные, а не эффективные uid и gid. Предполагается, что это позволяет программе setuid (которая выполняется обычным пользователем, но получает разрешения владельца), чтобы проверить, может ли вызывающий пользователь прочитать файл, чтобы предотвратить непреднамеренное предоставление этому пользователю доступа к файлу, который он не сможет прочитать, возможно, с помощью какой-нибудь символической ссылки или хитрого трюка с ссылками. Я не могу найти никаких доказательств того, что это возможно или что это невозможно с помощью stat (), но представьте себе такой сценарий:
user executes program
program is setuid, immediately gets all privs of root
program checks file1 to ensure that user has access
file1 is a hardlink to file2, which user has access to
user changes file1 to hardlink to file3 (/etc/shadow or something like that)
program reads file1 and does something to it (print, convert, whatever)
user now has access to a file they shouldn't