我使用ldap进行远程用户身份validation,我基本上需要弄清楚如何:
一个。 从机器a通过nfs chroot机器b上的用户(如果没有安装更多的目录,似乎不可能)
要么 – – – –
湾 将用户添加到计算机a上的ldap数据库之后,强制脚本在用户login期间在计算机b上执行,这将在用户首次login时自动根据用户chroot进行操作。
我想我的第二个select可能是最好的select,并且正在考虑使用pam_exec.so来调用脚本。 但是,我对这种方法有一些担忧。 首先,我不确定将要运行的脚本是否具有执行chroot所需的root权限。 其次,我不确定pam_exec是否在login过程中足够早地成为一个有效的选项。 最后,我需要确保代码在pam.d / ssh和pam.d / su中都起作用,认为这是一个有效的解决scheme。
我的担心是否有效?看起来这是一个很好的解决scheme吗? 还是有更好的方法来解决这个问题。
首先,可以说, chroot可能不被认为是安全function 。 另一方面也有意见 。
可以说,你需要实现的是一个可重复的,可审计的方法,限制用户执行除严格允许的操作之外的能力。
如果你在LDAP中注册你的用户,你当然已经在任何连接到这个LDAP的计算机上部署了机制来执行LDAPauthentication,不pipe是通过sssd还是使用任何其他的PAM模块,它都与解决scheme的其他部分无关,并假定已经到位(在我的情况下,我使用的是freeIPA和sssd )。
为了实现这个场景,我现在做的是以下几点(注意这种限制要求满足几个条件,否则限制可以很容易的避开):
wheel组,唯一一个被授权使用su (通过PAM强制执行)。 通常情况下,存在一个非LDAP用户( sysadm ),以允许受信任的pipe理员在灾难恢复或LDAP不可用情况下执行操作。 用户被赋予一个安全的rbash ,只读PATH指向一个专用的~/bin ,这个~/bin/目录包含了所有允许的命令的链接,例如:
$ ll ~/bin total 0 lrwxrwxrwx. 1 root dawud 14 Sep 17 08:58 clear -> /usr/bin/clear* lrwxrwxrwx. 1 root dawud 7 Sep 17 08:58 df -> /bin/df* lrwxrwxrwx. 1 root dawud 10 Sep 17 08:58 egrep -> /bin/egrep* lrwxrwxrwx. 1 root dawud 8 Sep 17 08:58 env -> /bin/env* lrwxrwxrwx. 1 root dawud 10 Sep 17 08:58 fgrep -> /bin/fgrep* lrwxrwxrwx. 1 root dawud 9 Sep 17 08:58 grep -> /bin/grep* lrwxrwxrwx. 1 root dawud 10 Sep 17 08:58 rview -> /bin/rview* lrwxrwxrwx. 1 root dawud 13 Sep 17 08:58 rvim -> /usr/bin/rvim* lrwxrwxrwx. 1 root dawud 13 Sep 17 08:58 sudo -> /usr/bin/sudo* lrwxrwxrwx. 1 root dawud 17 Sep 17 08:58 sudoedit -> /usr/bin/sudoedit* lrwxrwxrwx. 1 root dawud 13 Sep 17 08:58 tail -> /usr/bin/tail* lrwxrwxrwx. 1 root dawud 11 Sep 17 08:58 wc -> /usr/bin/wc*
给用户一个受限制的只读环境(像LESSSECURE , TMOUT , HISTFILEvariables)。 这是为了避免shell像vim或vim这样的命令逃脱。
staff_u并被授予以其他用户身份通过sudo执行命令的权限。 为了防止用户绕开这些限制,需要仔细检查特定的sudorules ,并且还可以将其部署在现有的LDAP基础结构(这是freeIPAfunction之一)中。 用户的/home , /tmp和可能的/var/tmp通过/etc/security/namespace.conf被多重实例化:
/tmp /tmp/.inst/tmp.inst-$USER- tmpdir:create root /var/tmp /tmp/.inst/var-tmp.inst-$USER- tmpdir:create root $HOME $HOME/$USER.inst/ tmpdir:create root
目录的多实例化不是一个新function,现在已经有了相当长的时间。 作为参考,请参阅2006年的这篇文章 。 事实上,很多模块默认已经使用了pam_namespace ,但是/etc/security/namespace.conf中的默认configuration不支持多实例化。 而且,/ /etc/security/namespace.init应该使所有骨架文件只读为用户所有,并由root拥有。
这样,您可以select用户是否可以代表自己执行任何命令(通过私人~/bin目录中的链接,通过/etc/skel ,如上所述),代表其他用户(通过sudo )一个都没有。