【问题标题】:Program deleting file of other user程序删除其他用户的文件
【发布时间】:2023-03-07 06:42:01
【问题描述】:

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

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

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

我之前在 unix.stackexchange.com 上问过这个问题。他们派我来这里。

这是我的代码:

无效删除文件() {

    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

【问题讨论】:

  • 包含目录的所有权是什么?如果模式 775 位于某个 OTHER 组中而不是文件/用户所在的组中,那么它并没有多大帮助。
  • 执行程序的权限是什么?
  • 我以为删除文件的函数是unlink
  • 对不起,我不明白你到底是什么意思。文件所在的目录由 user2 和组“user2”拥有。您可以在我已经在问题中发布的 ls -lah 的输出中看到这一点。还是我误会了你?

标签: c++ linux file file-permissions


【解决方案1】:

尝试运行rmstrace 作为user1 的命令:

strace your_program
strace rm File1.txt File2.txt

您应该看到,您的程序和 rm 的不同之处。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2018-08-12
    • 2019-05-10
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多