Назад | Перейти на главную страницу

Странный ПУТЬ при использовании sudoers через ldap

У меня есть рабочая среда аутентификации LDAP. Сервер LDAP находится на машине ubuntu 12.04, а клиент - все машины centos 6.4. Недавно я настроил sudoers в LDAP, следуя этой статье http://www.malaya-digital.org/configure-ldap-for-sudo-support-in-ubuntu-server-11-04-64-bit/

Все работает нормально, за исключением того, что PATH странный при использовании sudo для выполнения команды.

Вот ПУТЬ 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 в пути и Устранение неполадок sudoers через ldap, но не поймешь, что не так.

Запись LDAP с настройкой 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"

Сегодня я столкнулся с той же проблемой, и я считаю, что решение - просто удалить двойные кавычки из 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

Я сам нашел решение, хотя не знаю, почему.

Это довольно просто, добавив ":" в конец secure_path в записи LDAP, проблема решена.

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