透過 ldap 使用 sudoers 時出現奇怪的路徑

透過 ldap 使用 sudoers 時出現奇怪的路徑

我有一個有效的 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:"

相關內容