创buildLDAP帐户时使用的用户名无效

我试图build立一个系统,访问者可以在表单中input任何用户名来创build一个新用户,最后它build立在LDAP目录上,我也计划把它映射成一个UNIX帐户(在Ubuntu Linux上),使系统查找LDAP上的系统帐户。 这样做很好,但我觉得应该避免使用许多用户名,其中一个显而易见的是“root”,其他所有用户名都是守护进程。

你如何解决这个问题? 你是否通过检查/ etc / passwd来构成不允许的用户名列表? 我在想,如果在内部,用户名可以作为“ldap_”或其他名称前缀,它将避免任何命名冲突,但是当LDAP条目名称是“joe”但系统帐户看起来像“ldap_joe” 。 甚至不知道如何实现。

那么表单validation就是你的前线防御,不应该被忽视。

除此之外,我可能还会将所有当前的uid导入到ldap ..因此,任何尝试重新创build它们的人都会产生命名冲突。

这就是说,是我在你的鞋,我会继续前进,并分配一个前缀或自动生成用户帐户名(firstname.lastname,姓$我等…)。 我不喜欢任何人创build任何用户名的想法..这只是一个稍后头痛的秘诀。

例如,如果有人创build了我的软件包pipe理员(或我自己)后来决定应用到服务帐户的用户“www”,那么我们将会产生冲突,并可能产生安全隐患。 为什么冒这个险?

我宁愿保持谨慎,也不要为没有想到的事情做计划,然后再在屁股上咬。

这就是说,这一切都取决于你的情况和要求。

最简单的方法就是进行表单validation,换句话说,脚本检查是否有这些系统用户名被input到表单中。 如果input的用户名位于不允许名称的“列表”(可能使用/ etc / passwd中的帐户作为模板),请反馈错误消息,指出无法为foo原因创build该帐户。

其次在表单validation(前端)。 最容易的。

按层排列的其他选项:

  1. 中间层(滚动您自己的) – 创build一个select列表作为数组,并在写入LDAP之前查找错误的名称作为validation。 如果你愿意,你也可以在数据库中有一个select列表。 将其存储在数据库或文件中将从代码中挑选列表进行外部化,这使得在运行时更易于更改。
  2. Middle Ruby – 我不知道你在用什么语言,但是在写入LDAP之前,你可以创build一个没有ActiveRecord的validation来validationstring。 还有其他方法可以做到这一点。 只要创build一个validation类,在string不符合validation规则时检查得分是否为非零,从而增加得分。
  3. 后端 – 在LDAP中预先创build用户,并在名称冲突时抛出exception。 使用过期的密码lockingLDAP帐户。 确保在/ etc / passwd根目录之前没有使用LDAP根目录(例如,在PAM中,您先命令它为passwd,默认为iirc)。