我的应用程序创建了一个基本的ACL,并将其传递给一个内核模块。ACL包含UID/GID列表。对这些ID的检查是自定义的,并且是在系统已经提供的基础上进行的。
现在,如果root/用户更改了UID/GID,则需要刷新ACL。有没有办法在应用程序中获得通知,当UID/GID发生变化时,例如通过usermod命令?现在平台是Linux,但我们也可以将其移植到其他平台(AIX/Solaris)
发布于 2011-04-02 15:15:18
我要说的是,没有办法可靠地检测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,而不是用户名。
发布于 2011-03-14 15:10:15
在Linux上,inotify可以做你想做的事情。在其他系统上,尝试使用FAM。
发布于 2011-03-15 20:07:47
一种可能的方式(从Frédéric的回复触发)是我可能设置一个inotify/(dnotify喘气!对于较旧的内核)操作/etc/passwd,因为该文件至少在本地用户权限发生任何更改时都会更改。问题是如何在NIS环境中做到这一点。
https://stackoverflow.com/questions/5295712
复制相似问题