程序删除其他用户的文件 - 权限被拒绝

Program deleting file of other user - permission denied

本文关键字:权限 拒绝 文件 删除 其他 用户 程序      更新时间:2023-10-16

我有两个用户。用户 1 正在运行一个程序,该程序试图从用户 2 中删除文件。但是我的程序总是返回我"权限被拒绝"。

当我尝试使用 rm 命令以 user1 身份自己删除文件时,没有问题。文件的权限是 775,我的用户 1 在用户 2 组中。此组也是文件的所有者。文件所在的目录的权限也是 775。

为了删除文件,我编写的程序使用c/c ++中的"删除"函数。有人有解决方案或想法吗?

我以前在 unix.stackexchange.com 上问过这个问题。他们把我送到这里来。

这是我的代码:

    void deleteFile()
{
    if(0 != remove("File1.txt"))
        cout<<"Error deleting File: "<<strerror(errno)<<endl;
    if(0 != remove("File2.txt"))
        cout<<"Error deleting File: "<<strerror(errno)<<endl;
}

我已经重命名了文件,但我知道原始路径是正确的。 我已经测试过了

更多信息:好的,我已经以user2运行了该程序,并且文件已被删除,没有任何问题。

groups user1 users user2

groups user2 user2 adm www-data plugdev users ftp vsftpd

ls -lah drwxrwxr-x 7 user2 user2 4.0K Nov 27 14:13 . drwxrw-r-x 4 user2 user2 4.0K Nov 11 12:34 .. -rwxrwxr-x 1 user2 user2 50 Nov 12 15:12 File1.txt -rwxrwxr-x 1 user2 user2 826 Nov 27 14:13 File2.txt

我在下面做了一个测试,它表明要删除文件,用户需要对包含该文件的目录具有写入权限。 根据你从"ls -l"输出,你的user2应该被允许删除(删除)文件。

您的代码示例无法编译。 您能否提供一个完整的代码示例来演示您的问题? 下面的简单程序的行为符合预期。 您可以使用以下更简单的示例尝试测试:

#include <stdio.h>
    int main()
{
    printf("result: %in", remove("/home/user1/delete_me"));
}

我认为您的问题与文件权限无关。

newf:~# groups user1
user1 : user1
newf:~# groups user2
user2 : user2 user1
newf:~# su - user1
$ date > delete_me
$ chmod g+w delete_me
$ exit
newf:~# su - user2
$ ls -la ~user1
total 12
drwxr-xr-x 2 user1 user1 4096 Nov 28 13:27 .
drwxr-xr-x 8 root  root  4096 Nov 28 13:19 ..
-rw-rw-r-- 1 user1 user1   29 Nov 28 13:28 delete_me
$ date >> ~user1/delete_me
$ cat ~user1/delete_me
Fri Nov 28 13:28:44 EST 2014
Fri Nov 28 13:31:39 EST 2014
$ rm ~user1/delete_me
rm: cannot remove ‘/home/user1/delete_me’: Permission denied
$ exit
newf:~# su - user1
$ chmod g+w .
$ exit
newf:~# su - user2
$ ls -la ~user1 
total 12
drwxrwxr-x 2 user1 user1 4096 Nov 28 13:27 .
drwxr-xr-x 8 root  root  4096 Nov 28 13:19 ..
-rw-rw-r-- 1 user1 user1   58 Nov 28 13:31 delete_me
$ rm ~user1/delete_me
$ ls -la ~user1
total 8
drwxrwxr-x 2 user1 user1 4096 Nov 28 13:32 .
drwxr-xr-x 8 root  root  4096 Nov 28 13:19 ..

您没有正确使用remove。很简单:

remove("File1.txt")

而不是

remove(("File1.txt").c_str())

编译时会导致错误:

error: request for member ‘c_str’ in ‘("File1.txt")’, which is of non-class type ‘const char [10]’

对于错误检查:

if(remove("File1.txt") == -1)
     error occurred