这是我的问题。我需要从 FreeBSD 上的 C 代码检查特定文件和特定用户的读取权限。我写了一段代码:
#include <unistd.h>
#include <stdio.h>
#include <stdlib.h>
#include <errno.h>
int main(int argc, char *argv[]){
int r_ok;
if(setuid(1002)){
printf("Cant's set uid\n");
exit(1);
}
r_ok = access("/tmp/dir", R_OK);
printf("error: %d: %s\n", errno, strerror(errno));
printf("%d\n", r_ok);
return 0;
}
一般来说,它工作正常,但是当我像这样为 /tmp/dir 设置权限时:
d---r-x--- 2 root fruit1 512 Sep 10 18:20 /tmp/dir
程序输出
error: 13: Permission denied
-1
尽管 UID 为 1002 的用户是组 fruit1 的有效成员:
# groups 1002
orange fruit1
我会很高兴为您提供任何帮助。