AskOverflow.Dev

AskOverflow.Dev Logo AskOverflow.Dev Logo

AskOverflow.Dev Navigation

  • 主页
  • 系统&网络
  • Ubuntu
  • Unix
  • DBA
  • Computer
  • Coding
  • LangChain

Mobile menu

Close
  • 主页
  • 系统&网络
    • 最新
    • 热门
    • 标签
  • Ubuntu
    • 最新
    • 热门
    • 标签
  • Unix
    • 最新
    • 标签
  • DBA
    • 最新
    • 标签
  • Computer
    • 最新
    • 标签
  • Coding
    • 最新
    • 标签
主页 / server / 问题 / 545738
Accepted
Richard T
Richard T
Asked: 2013-10-14 16:00:19 +0800 CST2013-10-14 16:00:19 +0800 CST 2013-10-14 16:00:19 +0800 CST

升级 Fedora Core 后二进制可执行文件上的 SETUID / SETGID 停止工作

  • 772

我有一个 C 程序需要访问一个受保护的充满东西的目录。strong text这个想法是只有程序或管理员才能访问。

过去在 Linux 平台上,我相当成功地使用了文件系统的 SETUID 和 SETGID 位。该程序运行得很好,因为文件系统所说的任何 UID 和 GID 都是可执行文件的所有者,无论谁运行它。

或者,更确切地说,它曾经成功运行。

我不知道这个变化是什么时候发生的,因为我只倾向于在出现硬件故障时更新操作系统,所以我会同时获得两个更新......所以,鉴于很多版本都被跳过了,我,只有正确的现在,Fedora Core 17 上的开发系统不再支持这些位。由于 FC 19 是当前版本,我想最新版本只会变得更糟,而不是更好。

这是“ls -l”输出:

-rwsrwsr-x 1 cu cu 26403 Aug 28  2012 comp

在调查解决方案时,我发现 chmod 的手册页是这样说的:

其他限制可能会导致 MODE 或 RFILE 的 set-user-ID 和 set-group-ID 位被忽略。此行为取决于底层 chmod 系统调用的策略和功能。如有疑问,请检查底层系统行为。

好的,但我不知道如何按照建议检查该政策和功能!他们没有提供任何帮助,只能使用 info 命令 - 但我发现那里没有任何帮助,只有有关用于创建新文件的默认用户和组所有权的数据。

SELINUX 已关闭。

问题:

  1. 在现代做这种事情的“正确”方法是什么?

  2. 我如何检查政策 - 并更改它们?

感谢您的任何意见。

更多数据:

C 程序只有这一行分支以输出错误 - 摘录:

  line=malloc(large);
  if (!line) printf("virtual memory exhausted\n");
  if (line && FileExists(filename))
  {
     if (access(filename,R_OK)==0)
     {
        cfile=fopen(filename, "r");
setuid
  • 1 1 个回答
  • 629 Views

1 个回答

  • Voted
  1. Best Answer
    Matthew Ife
    2013-10-14T17:21:14+08:002013-10-14T17:21:14+08:00

    您的问题是使用access().

    该man 2 access页面说:

      The check is done using the calling process's real UID and GID,  rather
      than the effective IDs as is done when actually attempting an operation
      (e.g., open(2)) on the file.  This allows set-user-ID programs to  eas‐
      ily determine the invoking user's authority.
    

    当您使用 setuid 二进制文件运行时,您只会更改您的有效UID,而不是您的真实 UID。所以access()调用总是会失败。

    您应该删除access(). 在这种情况下,它是多余的,因为无论如何您都使用 fopen 打开文件,执行这样的访问检查然后对其执行读取也很匆忙。

    • 1

相关问题

  • 为windows设置uid

  • 为 NFS 映射 UID

  • 您如何以文件所有者而不是网络服务器用户的身份运行 PHP 脚本?

Sidebar

Stats

  • 问题 205573
  • 回答 270741
  • 最佳答案 135370
  • 用户 68524
  • 热门
  • 回答
  • Marko Smith

    新安装后 postgres 的默认超级用户用户名/密码是什么?

    • 5 个回答
  • Marko Smith

    SFTP 使用什么端口?

    • 6 个回答
  • Marko Smith

    命令行列出 Windows Active Directory 组中的用户?

    • 9 个回答
  • Marko Smith

    什么是 Pem 文件,它与其他 OpenSSL 生成的密钥文件格式有何不同?

    • 3 个回答
  • Marko Smith

    如何确定bash变量是否为空?

    • 15 个回答
  • Martin Hope
    Tom Feiner 如何按大小对 du -h 输出进行排序 2009-02-26 05:42:42 +0800 CST
  • Martin Hope
    Noah Goodrich 什么是 Pem 文件,它与其他 OpenSSL 生成的密钥文件格式有何不同? 2009-05-19 18:24:42 +0800 CST
  • Martin Hope
    Brent 如何确定bash变量是否为空? 2009-05-13 09:54:48 +0800 CST
  • Martin Hope
    cletus 您如何找到在 Windows 中打开文件的进程? 2009-05-01 16:47:16 +0800 CST

热门标签

linux nginx windows networking ubuntu domain-name-system amazon-web-services active-directory apache-2.4 ssh

Explore

  • 主页
  • 问题
    • 最新
    • 热门
  • 标签
  • 帮助

Footer

AskOverflow.Dev

关于我们

  • 关于我们
  • 联系我们

Legal Stuff

  • Privacy Policy

Language

  • Pt
  • Server
  • Unix

© 2023 AskOverflow.DEV All Rights Reserve