下面这个简单的脚本用于检查gpg-agent缓存中的有效密码。当密码短语有效时,它将打印正常,但如果密码短语无效,它将打印一条警告消息。
#!/bin/bash
# checkgpg
KEY_ID=2B705B8B6FA943B1
test=$(echo "1234" | gpg -q --batch --status-fd 1 --sign --local-user "$KEY_ID" --passphrase-fd 0 > /dev/null)
RET_VAL=$?
if [ $RET_VAL -eq 0 ]; then
echo "OK, passphrase cached in gpg-agent is valid!"
else
echo "Warning, passphrase cached in gpg-agent is invalid!"
fi当我运行上面的脚本时,它还将运行一个新的gpg-agent进程,用于存储缓存的密码短语。所以在本例中,它是PID 3309
上面的脚本没有问题。
接下来,我设置了几个通过cronjob运行的bash脚本。因此,当每个脚本通过cronjob运行时,我突然可以看到一个随机的gpg-agent进程在运行不同的PID (现在我得到了2个gpg-agent):
[root@earth chkrootkit]# pidof gpg-agent
392612 3309其中,PID代理是在cronjob进程期间运行的新随机gpg- 392612。
我不介意它正在运行,但这里最大的问题是,当新的随机gpg-agent进程正在运行时,当我重新运行上面的bash脚本来检查gpg-agent中的有效密码短语时,我会得到以下错误:
[root@earth]# ./checkgpg
gpg: signing failed: Inappropriate ioctl for device
gpg: signing failed: Inappropriate ioctl for device
Warning, passphrase cached in gpg-agent is invalid!如果cronjob脚本已经运行完毕,那么我可以再次看到有效的密码:
[root@earth chkrootkit]# ./testgpg
OK, passphrase cached in gpg-agent is valid!所以这个错误是由随机的gpg-agent引起的,这个gpg-agent一直在运行,直到它自己终止,然后缓存的密码短语将再次变得有效。这就是为什么运行bash脚本也可以运行这个gpg-agent进程的原因。
因此,这就是导致新的随机gpg- one example of my cronjob scripts运行的代理(仅当我通过cronjob运行它时)。如果我通过终端运行它,它不会导致随机创建的gpg-agent )。我认为这对于演示这段代码并不重要,因为cronjob的所有脚本都生成了相同的问题:
#!/bin/bash
PATH=/bin:/usr/bin:/sbin:/usr/sbin
export PATH
echo "======================================"
echo "[chkrootkit | info]: Chkrootkit is checking system..."
#Global variables
MYHOSTNAME=`/bin/hostname`
MYEMAIL="webmaster@sofibox.com"
CHKROOTKIT_LOG_PATH="/usr/local/maxicron/chkrootkit/log"
REPORT_FILE="/usr/local/maxicron/chkrootkit/log/chkrootkit-file.log"
REPORT_FILE_GREP="/usr/local/maxicron/chkrootkit/log/chkrootkit-file-grep.log"
MAIL_BIN="/usr/local/bin/mail"
WARNING_STATUS="N/A"
mkdir -p $CHKROOTKIT_LOG_PATH
sudo touch $REPORT_FILE
sudo chown root:adm $REPORT_FILE
sudo chmod 640 $REPORT_FILE
cat /dev/null > $REPORT_FILE
sudo touch $REPORT_FILE_GREP
sudo chown root:adm $REPORT_FILE_GREP
sudo chmod 640 $REPORT_FILE_GREP
cat /dev/null > $REPORT_FILE_GREP
echo "[chkrootkit | info]: Please wait..."
echo "Chkrootkit checked on `date`" >> $REPORT_FILE
/usr/local/chkrootkit/chkrootkit >> $REPORT_FILE
echo "Rootkit scan return: $?"
echo "" >> $REPORT_FILE
echo "==================SCAN COMPLETED=================" >> $REPORT_FILE
echo "" >> $REPORT_FILE
echo "================= WARNING NOTICE ================" >> $REPORT_FILE
if (grep -e "Warning" -e "INFECTED" -e "were found" $REPORT_FILE >> $REPORT_FILE_GREP) then
WARNING_STATUS="WARNING"
cat $REPORT_FILE_GREP >> $REPORT_FILE
echo "[chkrootkit | info]: You may Check chkrootkit update manually" >> $REPORT_FILE
echo "================== END OF NOTICE ================" >> $REPORT_FILE
$MAIL_BIN -s "[chkrootkit | $WARNING_STATUS] Check Rootkit Scan Report @ $MYHOSTNAME" $MYEMAIL < $REPORT_FILE
else
WARNING_STATUS="OK"
echo "" >> $REPORT_FILE
echo "NO WARNING FOUND" >> $REPORT_FILE
echo "" >> $REPORT_FILE
fi
$MAIL_BIN -s "[chkrootkit | $WARNING_STATUS] Check Rootkit Scan Report @ $MYHOSTNAME" $MYEMAIL < $REPORT_FILE
echo "[chkrootkit | info]: Scan Status: $WARNING_STATUS"
echo "[chkrootkit | info]: Done checking system. Email notification is set to $MYEMAIL"
echo "======================================"上述脚本的crontab如下所示:
26 18 * root /root/testgpg > /dev/null
所以,在18:26这个时候,我创建了一个新的随机gpg-agent。我看不出代码有任何问题,也没有任何与gpg相关的内容。当我通过cronjob像这样运行上面的脚本时,为什么会运行一个新的gpg-agent进程?这也会发生在其他脚本中,比如备份脚本等。有没有办法调试它?它是从哪里来的?我花了几个星期来找出这个错误背后的原因,现在我只想知道原因和如何防止这种情况发生。
发布于 2020-10-12 18:59:08
最后,我可以重现这个问题。当我在cronjob上运行这个脚本时:
!#/bin/bash
#testscript.sh
sudo sleep 60 这将导致gpg密码短语无效60秒,并且第二个随机gpg-agent进程将运行60秒。
但是如果我在cronjob中运行这个脚本(不使用sudo),我看不到任何问题:
!#/bin/bash
#testscript.sh
sleep 60 不仅如此,如果我在cronjob中以sudo身份运行整个脚本,也是一个问题:
14 23 * * * root sudo /root/testscript.sh > /dev/null请注意,如果我以sudo身份直接从终端运行该脚本,如下所示:
sudo testscript.sh那么它就不会创建新的进程。只有在cronjob中使用sudo时才会发生这种情况。
因此,简而言之,创建随机gpg-agent进程的原因是因为在sudo作业中使用了cronjob命令。我仍然不确定为什么在使用sudo命令时gpg-agent进程会重新生成。
这绝对是一个神秘的bug,我认为这是一个与编程相关的错误,但没关系,我终于可以通过在我的每个脚本中不使用sudo命令来防止这个错误。解决了。
https://stackoverflow.com/questions/64123311
复制相似问题