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の多くのスクリプト部分の 1 つであるものを使用します。ldapscriptsこの動作は、このパッケージのどのスクリプトでも再現できます。

次の 2 行の bash スクリプトを検討してください。

#!/bin/bash
ldapid

これは、シェルから実行すると正常に機能します。cron ジョブになるとすぐに、エラー メッセージCould not guess userがスローされます。

以前にも同様の問題がありました。次の bash スクリプトを検討してください。

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

最初の ldapid は常に機能しましたが、2 番目の 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 が 1 行前に定義されている場合です。$user を harcoded に置き換えても役に立ちusernameません。

パラメーターとして暗黙的または明示的に渡された入力は、エラーで 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)

主にロギングに使用されていることがわかったからです(ただし、チェックはあまり厳密ではありませんでした)。

その割り当ては、以前の投稿で示したフラグメントの 1 行上にありました。そのスクリプトでは環境変数が無視されるため、上記の投稿の解決策は機能しません。

そのパッケージには、アクションを実行できないことが原因で発生する ldapaddgroup などのスクリプトに関する問題が 1 つあります。私の問題は、実際にはldapscriptsパッケージがデフォルトでlibnss-ldapとlibpam-ldapの設定を使用することでした(libnss-ldap * d *とlibpam-krb5をインストールしたため、私の場合はそうではありませんでした)。そのため、/etc/ldapscripts/ldapscripts.conf の手動構成を実行しましたが、これまでに試したすべてのスクリプトが機能しています

この助けを願っています。

于 2013-08-09T15:20:05.403 に答える
0

スクリプトは、通常シェルによって提供される ${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

または次のように

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