在不作为超级用户的情况下更改文件权限

Change file permission without being a superuser

本文关键字:文件 权限 情况下 不作为 用户      更新时间:2023-10-16

我想在目录中读取一些来自第三方工具的文件。在阅读这些文件之前,我正在检查这些文件是否为regular file

预读

if (!S_ISREG(file_info.st_mode))
{
    return false;
}

看完这个文件后,我想更改它的权限,这样它就不会一次又一次地读了。

我的问题是如何更改文件权限st_mode,使我的应用程序在没有超级用户的情况下不会再次读取它。

我的linux发行版是RedHat

如果您读取了该文件,但不想再次读取,则不应该测试它是否为常规文件,因为无论它拥有什么权限,常规文件都是常规文件。因此,我认为您应该检查读取权限,如果设置了读取权限,则读取文件,并使用chmod()设置禁用读取的权限。

/* Check it it is readable by the user */
if ((file_info.st_mode & S_IRUSR)==0)
{
  return false;
}
/* If it is, open and read the file... */
...
...
/* Mark it as not readable by the user. file_name is assumed
   to be the name of the file as you have used it upon calling
   lstat */
chmod (file_name, file_info.st_mode & ~S_IRUSR);

如果你是文件的所有者(如果你正在运行第三方工具,你可能是所有者),你可以直接从终端使用chmod命令来更改文件的权限
"例如:chmod 666 log.txt"
在chmod之前无需使用sudo。