UID / GID更改通知

时间:2011-03-14 07:06:26

标签: c linux uid

我的应用程序创建了一个基本的ACL,并将其传达给内核模块。 ACL包含UID / GID列表。对这些ID的检查是自定义的,并且取决于系统已经提供的内容。

现在,如果root / user更改了UID / GID,则需要刷新ACL。每当UID / GID发生变化时,是否有办法在应用程序中获取通知,例如通过usermod命令?目前该平台是Linux,但我们也可以将其移植到其他平台(AIX / Solaris)

4 个答案:

答案 0 :(得分:1)

在Linux上,inotify执行您想要的操作。在其他系统上,请尝试FAM

答案 1 :(得分:1)

我认为无法可靠地检测UID /用户名映射中的更改,尤其是当您跨平台时。用户数据库可以驻留在NIS,NIS +或现在的LDAP中。他们可能正在将他们的UNIX / Linux系统与运行Active Directory的Windows Server集成,或者他们可能正在使用像Hesoid这样更模糊的东西。我知道无法从这些不同的数据库中收到任何自动反馈。但是,任何关于UNIX管理的好书都会告诉你不要改变这些映射,或者至少,如果你必须,不要重新使用UID。不要忘记,文件系统是否使用标准POSIX权限或POSIX ACL还将存储在管理员决定更改用户的UID时不会获得更新的UID。内核和文件系统都将特定UID视为特定用户,无论其用户名如何。我真的不认为您需要为管理员更改用户的UID而烦恼,这可能对每个人都太容易出错。

另外,快速浏览一下Windows上的NTFS会发现它还存储了一个名为SID的UID的等价物,它是一个用于表示用户的长号,Windows不提供或期望您更改映射该SID对特定用户名的影响。 SID是NT内核在内部使用的,而不是用户名。如果我打开文件上的“安全”选项卡,我可能会看到数字,直到Windows能够查询Active Directory控制器并为这些数字提供方便的用户名。最终,它是SID,而不是唯一标识用户的用户名。

答案 2 :(得分:0)

一种可能的方式(由Frédéric的回复触发)是我可以在/ etc / passwd上设置inotify /(对旧内核进行dnotify gasp!)操作,因为该文件将始终更改至少本地用户权限的任何更改。麻烦的是如何在NIS环境中执行此操作。

答案 3 :(得分:0)

在典型的Unix安全模型中,您应该只关心GID / UID的数值,而不是人类可读字符串和数值之间的映射。由于情况似乎如此,您是否仔细考虑过您要完成的工作?也许最好传递名称或名称/ id元组,而不仅仅是id?