奇怪的path,当通过ldap使用sudoers

我有一个可用的LDAP身份validation环境。 LDAP服务器在Ubuntu 12.04机器上,而客户机都是Centos 6.4机器。 最近我在这篇文章中configuration了LDAP的sudoers。http ://www.malaya-digital.org/configure-ldap-for-sudo-support-in-ubuntu-server-11-04-64-bit/

一切正常,但使用sudo执行命令时,PATH很奇怪。

这是sudo的path

# sudo printenv PATH "/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin" 

似乎上面显示的PATH中列出的每个命令都可以执行,除了/ bin。 例如

 # sudo which node /usr/local/bin/node # sudo which zip /usr/bin/zip # sudo which ip /sbin/ip # sudo which ls which: no ls in ("/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin") #WTF?? # sudo ls / sudo: ls: command not found 

但是,使用完整path在/ bin中执行命令时,它将起作用。

 # sudo /bin/ls / bin boot dev etc home lib lib64 lost+found media mnt NFS opt proc root sbin selinux srv sys tmp usr var 

我已经阅读sudopath中的问题,并通过ldap对sudoers进行疑难解答 ,但是找不到什么错误的线索。

具有PATH设置的LDAP条目如下所示:

 dn: cn=defaults,ou=SUDOers,dc=example.dc=com objectClass: top objectClass: sudoRole cn: defaults description: Default sudoOption's go here sudoOrder: 1 sudoOption: env_reset sudoOption: secure_path="/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin" 

我今天来到了同样的问题,我相信解决方法只是从secure_path选项中删除双引号:

 dn: cn=defaults,ou=SUDOers,dc=example.dc=com objectClass: top objectClass: sudoRole cn: defaults description: Default sudoOption's go here sudoOrder: 1 sudoOption: env_reset sudoOption: secure_path=/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin 

通过用引号括起来,正如你可以在sudo printenv PATH的结果中看到的那样, PATH包含引号本身。 这似乎对应于一个有趣的长path,其中目录名称包含冒号—不是你想要的…

你的回答似乎可以绕开这个问题,可能是因为冒号末尾有附加一些默认path的特殊含义。 尝试sudo printenv PATH看看发生了什么事情 – 它不适用于我的情况。

通过上面我提出的LDIF,你得到的是正确的PATH

 $ sudo printenv PATH /usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin 

我自己find了解决办法,虽然我不知道确切的原因。

这很简单,在LDAP条目的secure_path末尾添加“:”修复了所有问题。

 secure_path="/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin:"