1

Prerequisite: ldapscripts package, Version: 2.0.1-1

uname output: Linux 3.2.0-4-amd64 #1 SMP Debian 3.2.41-2+deb7u2 x86_64 GNU/Linux

评论:这个问题使用ldapid哪个是ldapscripts包的许多脚本部分之一。可以使用此包中的任何脚本复制此行为。

考虑以下两行 bash 脚本:

#!/bin/bash
ldapid

从 shell 运行时,这工作正常。一旦它成为一个 cron 作业,Could not guess user就会抛出错误消息。

我之前遇到过类似的问题,请考虑以下 bash 脚本:

#!/bin/bash    
ldapid    
while read line    
do
  ldapid
done <"Some file"

第一个 ldapid 总是有效,但第二个抛出了同样的错误Could not guess user

这最终证明是文件描述符问题,并通过使用以下代码段解决:

while read line <&3
do
  ldapid
done 3< "Some file"

对于 cron,由于缺乏更好的理解,我不知道如何做类似的事情,任何帮助将不胜感激。提前谢谢了。

------------在 PiratStian 回复后编辑更多细节 -----

对不起,如果我早点说,只是想保持简单,以便可以轻松复制。表格

#!/bin/bash
/usr/sbin/ldap<script> $user 

是我相当长的剧本中的内容。确切的命令,就在我的脚本开头并且整个事情因错误而失败的地方cannot guess userdescription=$(ldapfinger "$user" |grep description |cut -d: -f2) $user 之前定义的一行。用硬编码替换 $userusername也无济于事。

似乎任何作为参数隐式或显式传递的输入在作为具有错误的 cron 作业运行时都会被忽略Cannot guess user。另一方面,当我手动运行相同的脚本时,一切都按预期工作。(请注意,这是在使用 ldapscripts 进行一些更新之前的工作脚本)。

冒着听起来很愚蠢的风险,我还尝试bash -c在脚本内部运行命令,并* * * * * root /path/to/script.sh<&0在 crontab 中使用相同的结果,Cannot guess user.

4

2 回答 2

1

我在 Debian Wheezy 下遇到了类似的问题(Linux earth 3.2.0-4-686-pae #1 SMP Debian 3.2.46-1 i686 GNU/Linux)

为了让 ldapscripts 正常工作,我对“/usr/share/ldapscripts/runtime”的内容进行了一些更改。而不是线:

   USER=$(logname 2>/dev/null)

我刚用过

   USER=$(whoami 2>/dev/null)

因为我发现它主要用于日志记录(但我在检查方面不是很严格)。

该分配仅比上一篇文章中显示的片段高出一行。上述帖子的解决方案不起作用,因为该脚本中忽略了环境变量。

该软件包还存在一个问题,涉及由于无法执行操作而导致的 ldapaddgroup 等脚本。我的问题实际上是 ldapscripts 包默认使用 libnss-ldap 和 libpam-ldap 的设置(在我的情况下这不是真的,因为我已经安装了 libnss-ldap* d * 和 libpam-krb5)。所以我已经执行了 /etc/ldapscripts/ldapscripts.conf 的手动配置,并且我尝试过的所有脚本都在工作

希望这有帮助。

于 2013-08-09T15:20:05.403 回答
0

可能是脚本依赖于 shell 通常提供的 ${USER} 变量吗?

检查 /usr/sbin/ldapid 你会发现:

 # Current user
  [ -z "$USER" ] && end_die 'Could not guess current user (no $USER variable set)'
  _USER="$USER"
else
  _USER="$2"

尝试类似:* * * * * USER=myuser ldapid

或者因为您是从脚本运行的:

#!/bin/bash
USER=$(/usr/bin/whoami)
/usr/sbin/ldapid

或以下(似乎 ldapid 接受用户作为第一个参数

#!/bin/bash
/usr/sbin/ldapid username
于 2013-08-02T13:08:33.320 回答