使用C API修改文件许可权
问题描述:
我有一个从文件中读取其配置的服务器组件。配置文件也由管理组件读取和写入。这些组件是独立的程序,它们将在不同的帐户下运行。我想将配置文件上的ACL更改为:使用C API修改文件许可权
application: read
administration: read and write
由于应用程序打开侦听套接字,因此从应用程序中删除写入很重要。也就是说,它的风险很高,我想尽可能地包含它。
经过一番搜索,它看起来像ioctl
是用来做什么的C. ioctl_list
提供的控制代码,但它不是明显给我一个名单如何将两个用户添加到配置文件在不同的权限。 die.net的在线手册页未深入讨论权限或提供示例代码。例如,单词“perm”(“许可”的根)在讨论中仅出现一次。
在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
拥有。 (负责此操作的代码应该在管理组件中,而不是服务器本身。) - 当服务器启动后,在完成所有需要做的事情之后(如绑定低编号的端口),它将使用
setgroups
,setgid
和setuid
(在该命令中!)更改为用户nlserver
,组nlserver
,并清除补充组列表。只有在完成后才打开配置文件。
'man 2 chmod'顺便说一句:我不明白与听套接字的问题。 BTW2:这是UNIX的基本内容,甚至不是先进的。也许你应该先做一些阅读。 – wildplasser
ACL使用linux中的acl API集。请参阅页码。 330 - 在'The Linux Programming Interface'M Kerrisk中。此页面包含API调用的代码,超链接到解释。 [Linux ACL](http://man7.org/tlpi/code/online/dist/acl/acl_update.c.html) –
感谢wildplasser。我不确定你不明白,对不起。顺便说一下,'chmod'只需要一个路径和一个模式,而不是用户/组的高级属性(是的,我看着'chattr')。 – jww