通过cronjob运行gpg加密命令

时间:2015-04-27 09:57:13

标签: linux shell cron gnupg

我有一个脚本,它通过cronjob在sh脚本中执行gpg加密命令。 这是我的脚本的一部分

    do
    gpg --batch --no-tty --yes --recipient $Key  --output $Outputdir/${v}.pgp --encrypt  ${v}
    echo "$?"
    if  ["$?" -eq 0 ];
    then 
    mv $Inputdir/${v} $Readydir/
    echo "file moved"
    else
    echo "error in encryption"
    fi
    done
回声$?给出值为2。

尝试了bellow命令

    gpg --batch --home-dir dir --recipient $Key  --output $Outputdir/${v}.pgp --encrypt  ${v}

其中dir = / usr / bin / gpg

我的完整脚本

    #set -x
    PT=/gonm1_apps/xfb/ref/phoenix_drop
    Inputdir=`grep Inputdir  ${PT}/param.cfg | cut -d "=" -f2`
    Outputdir=`grep Outputdir ${PT}/param.cfg | cut -d "=" -f2`
    Key=`grep Key ${PT}/param.cfg | cut -d "=" -f2`
    Readydir=`grep Readydir ${PT}/param.cfg | cut -d "=" -f2`
    echo $USER
    if [ "$(ls -la $Inputdir | grep -E 'S*.DAT')" ]; then
     echo "Take action $Inputdir is not Empty"
     cd $Inputdir
   for v in `ls SID_090_*`
   do
    gpg --recipient $Key  --output $Outputdir/${v}.pgp --encrypt  ${v}
            echo "$?"
   if  ["$?" -eq 0 ];
   then
    mv $Inputdir/${v} $Readydir/
            echo "file moved"
    else
            echo "error in encryption"
   fi
   done
  cd ${PT}
  else
  echo "$Inputdir is Empty"
  fi

2 个答案:

答案 0 :(得分:1)

GnuPG管理个人密钥环和" GnuPG主目录"每个用户。从Web服务或cronjobs调用GnuPG时的commmon问题是以另一个用户身份执行它们。

这意味着其他用户的GnuPG会在错误的密钥环(主目录)中查找密钥,如果已修复,则根本不应具有对GnuPG主目录的访问权限(以root用户身份运行cron或web服务器时不是问题,但这不应该由于这个原因而不能完成。)

有多种方法可以缓解这个问题:

  • 在其他用户下运行Web服务器或cron作业。这可能是cron作业的可行解决方案,但很可能不适用于Web服务。 sudosu可能有助于将GnuPG作为其他用户运行。
  • 将所需(私人/公共)密钥导入其他用户的GnuPG主目录,例如切换到www-dataroot用户(或者在你的机器上调用的任何东西。)
  • 更改GnuPG的行为以使用其他用户的主目录。您可以使用--home-dir /home/[username]/.gnupg或更短{{1}来执行此操作如果你的shell解决了这个问题。最好不要这样做,因为GnuPG非常严格地验证访问权限,如果太放松,则拒绝工作。 GnuPG不喜欢权限,允许其他用户,但所有者完全访问GnuPG主目录。
  • 更改GnuPG的行为,使用一个完全无关的文件夹作为主目录,例如,您的应用程序正在某处存储数据。通常,最好的解决方案。确保正确设置所有者和访问权限。一个例子是选项--home-dir ~username/.gnupg

答案 1 :(得分:0)

如果

       the echo $USER prints as root when executed on cronjob and as 
       username when executed manually

然后您需要以用户身份登录并使用" crontab -e"等命令。为该用户添加cronjob以运行脚本