我有一個有效的 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 PATH
,PATH
包含引號本身。這似乎對應於一個有趣的長路徑,其中目錄名稱包含冒號——不是你想要的...
您的答案似乎規避了這個問題,可能是因為末尾的冒號具有附加一些預設路徑的特殊含義。嘗試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:"