gpt4 book ai didi

c - 使用 C API 修改文件权限

转载 作者:太空宇宙 更新时间:2023-11-04 08:49:43 25 4
gpt4 key购买 nike

我有一个服务器组件,它从一个文件中读取它的配置。配置文件也由管理组件读取和写入。这些组件是独立的程序,它们将在不同的帐户下运行。我想将配置文件上的 ACL 更改为:

application: read
administration: read and write

从应用程序中删除写入很重要,因为应用程序打开了一个监听套接字。也就是说,它的风险很高,我想尽可能地遏制它。

经过一些搜索,它看起来像是在 C 中使用 ioctl 来完成它。ioctl_list 提供了一个控制代码列表,但我不清楚如何添加两个对配置文件具有不同权限的用户。联机手册页位于 die.net不深入讨论权限或提供示例代码。例如,单词“perm”(“permission”的词根)在讨论中只出现一次。

在 Windows 上,减少权限以支持最小特权被提出来,但它非常简单(Richter 在他的 Advanced Windows 编程系列中给出了很好的例子)。

如何使用 C API 更改 linux 文件的权限?使用什么控制代码?

提前致谢。

最佳答案

这不是通过 ioctl 完成的,而是通过专用系统调用完成的:chmod , chown , 和 chgrp对于基本用户/组/其他文件权限集,以及acl_*用于完整的 ACL。您可能还想了解 setuid , setgid , 和 setgroups系统调用,这是您在正在运行的应用程序中删除特权的方式。

您可以仅使用基本用户/组/其他权限来实现您的目标。按如下方式配置您的系统:

  • 服务器应用程序有一个专用的用户 ID 和组;假设它们都被命名为 nlserver(“nl”代表“noloader”)。
  • 管理组件也有专用的用户 ID 和组,比方说 nladmin
  • 配置文件设置为模式 0640(又名 -rw-r-----)并由用户 nladmin、组 nlserver< 所有。 (负责执行此操作的代码应该在管理组件中,而不是服务器本身。)
  • 当服务器启动时,在以 root 身份完成所有需要做的事情之后(例如绑定(bind)低编号端口),它使用 setgroupssetgidsetuid(按此顺序!)更改为用户 nlserver、组 nlserver,并清除补充组列表。只有这样做之后,它才会打开配置文件。

关于c - 使用 C API 修改文件权限,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/20109766/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com