Ldap

通過 ldap 使用 sudoers 時出現奇怪的 PATH

  • July 13, 2015

我有一個有效的 LDAP 身份驗證環境。LDAP 伺服器在 ubuntu 12.04 機器上,而客戶端都是 centos 6.4 機器。最近我按照這篇文章http://www.malaya-digital.org/configure-ldap-for-sudo-support-in-ubuntu-server-11-04-64-bit/在 LDAP 中配置 sudoers

一切正常,除了使用 sudo 執行命令時 PATH 很奇怪。

這是 sudo 的路徑

# 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"

我今天遇到了同樣的問題,我相信解決方案只是從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

引用自:https://serverfault.com/questions/563691