通过 ldap 使用 sudoers 时出现奇怪的 PATH

通过 ldap 使用 sudoers 时出现奇怪的 PATH

我有一个可用的 LDAP 身份验证环境。LDAP 服务器在 ubuntu 12.04 机器上,而客户端都是 centos 6.4 机器。最近我按照这篇文章在 LDAP 中配置了 sudoershttp://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

但是,当使用完整路径在 /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    

我读过了路径中的 sudo 问题通过 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"

答案1

我今天遇到了同样的问题,我相信解决方案只是从选项中删除双引号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 PATHPATH包含引号本身。这似乎对应于一条有趣的长路径,其中目录名称包含冒号 --- 这不是您想要的...

您的答案似乎绕过了这个问题,可能是因为末尾的冒号具有附加一些默认路径的特殊含义。尝试sudo printenv PATH看看发生了什么——在我的情况下它不起作用。

使用我上面建议的 LDIF,您将获得正确的结果PATH

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

答案2

我自己找到了解决方案,尽管我不知道确切的原因。

这很简单,在 LDAP 条目中的 secure_path 末尾添加“:”即可解决所有问题。

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

相关内容