我有两个用户。 User1正在运行尝试从user2删除文件的程序。但我的计划总是让我回复#34;许可被拒绝"。
当我尝试使用rm命令将我自己的文件删除为user1时,没有问题。文件的权限是775,我的user1在user2的组中。该组也是文件的所有者。文件所在目录的权限也是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
答案 0 :(得分:0)
我在下面做了一个测试,它表明要删除文件,用户需要拥有包含该文件的目录的写权限。根据“ls -l”的输出,您的user2应该被允许删除(删除)该文件。
您的代码示例无法编译。您能提供一个完整的代码示例来演示您的问题吗?下面的简单程序表现如预期。您可以尝试使用这个更简单的示例进行测试:
#include <stdio.h>
int main()
{
printf("result: %i\n", 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 ..
答案 1 :(得分:-3)
您没有正确使用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