C UID/GID更改通知

C UID/GID更改通知,c,linux,uid,C,Linux,Uid,我的应用程序创建了一个基本的ACL,并将其与内核模块通信。ACL包含UID/GID的列表。对这些ID的检查是自定义的,并且是在系统已经提供的基础上进行的 现在,如果root/用户更改UID/GID,则需要刷新ACL。当UID/GID发生更改时(例如通过usermod命令),是否有方法在应用程序中获取通知?现在平台是Linux,但我们也可以将其移植到其他平台(AIX/Solaris)在Linux上,做您想要的。在其他系统上,请尝试。一种可能的方法(从Frédéric的回复中触发)是,我可以在/et

我的应用程序创建了一个基本的ACL,并将其与内核模块通信。ACL包含UID/GID的列表。对这些ID的检查是自定义的,并且是在系统已经提供的基础上进行的


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

在Linux上,做您想要的。在其他系统上,请尝试。

一种可能的方法(从Frédéric的回复中触发)是,我可以在/etc/passwd上设置inotify/(dnotify gasp!对于较旧的内核)操作,因为该文件至少会因本地用户权限的任何更改而更改。问题在于如何在NIS环境中做到这一点

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


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

在典型的Unix安全模型中,您应该只关注GID/UID的数值,而不是人类可读字符串和数值之间的映射。似乎是这样,你有没有仔细考虑过你想要实现的目标?也许传递名称或名称/id元组会更好,而不仅仅是id?

请CMIIW,但我认为inotify只会在文件/目录的UID/GID发生更改时发送通知。我希望在有人使用
usermod
或类似命令时收到此通知。i、 e.即使在对文件系统进行任何更改之前。@ghostkadost,您是对的,inotify and co.只会在文件属性更改时通知您。您似乎希望在授予用户的权限更改时收到通知。我建议你们把这个要求写进你们的问题中,这样更多的答案将围绕这个主题(我没有答案,我不知道是否可能)。谢谢你们的回复。我做了一些小修改。希望我的意图现在更清楚一点。