스크립트는 실행될 때 작동합니다.doas ./backup_cron_root.sh
#!/usr/bin/bash
/usr/bin/crontab -l> "/tmp/cron.$(whoami).$(hostname)" && /bin/date>>"/tmp/cron.$(whoami).$(hostname)" &&
/usr/bin/doas -u joanna /usr/bin/cp -f "/tmp/cron.$(whoami).$(hostname)" "/home/joanna/pCloudDrive/backups" &&
/usr/bin/rm "/tmp/cron.$(whoami).$(hostname)"
./backup_cron_root.sh
스크립트 이름은 어디에 있습니까? 동일한 스크립트가 cronjob으로 예약되면 소유자가 생성되지만 doas crontab -e
어떤 이유로 에 성공적으로 복사하지 못합니다 . 이유는 무엇입니까? 이 스크립트가 수동으로 실행될 때처럼 crontab에서 성공하지 못하는 이유는 무엇입니까?* * * * * /home/joanna/backup_cron_root.sh >/tmp/cronjob.log 2>&1
/tmp/cron.root.joanna-ONE-AMD-M4
root
/home/joanna/pCloudDrive/backups
내 콘텐츠 /etc/doas.conf
는
permit joanna as root
permit root as joanna
내 꼬리는 다음과 같습니다 grep CRON /var/log/syslog
.
Feb 26 17:17:01 joanna-ONE-AMD-M4 CRON[747796]: (root) CMD ( cd / && run-parts --report /etc/cron.hourly)
Feb 26 17:17:01 joanna-ONE-AMD-M4 CRON[747797]: (root) CMD (/home/joanna/backup_cron_root.sh)
Feb 26 17:17:01 joanna-ONE-AMD-M4 CRON[747792]: (CRON) info (No MTA installed, discarding output)
Feb 26 17:17:01 joanna-ONE-AMD-M4 CRON[747791]: (CRON) info (No MTA installed, discarding output)
Feb 26 17:17:01 joanna-ONE-AMD-M4 CRON[747794]: (CRON) info (No MTA installed, discarding output)
Feb 26 17:17:01 joanna-ONE-AMD-M4 CRON[747793]: (CRON) info (No MTA installed, discarding output)
Feb 26 17:17:22 joanna-ONE-AMD-M4 CRON[747795]: (CRON) info (No MTA installed, discarding output)
Feb 26 17:18:01 joanna-ONE-AMD-M4 CRON[751555]: (root) CMD (/home/joanna/backup_cron_root.sh)
Feb 26 17:18:01 joanna-ONE-AMD-M4 CRON[751551]: (CRON) info (No MTA installed, discarding output)
Feb 26 17:18:01 joanna-ONE-AMD-M4 CRON[751550]: (CRON) info (No MTA installed, discarding output)
Feb 26 17:18:01 joanna-ONE-AMD-M4 CRON[751553]: (CRON) info (No MTA installed, discarding output)
Feb 26 17:18:01 joanna-ONE-AMD-M4 CRON[751552]: (CRON) info (No MTA installed, discarding output)
Feb 26 17:18:22 joanna-ONE-AMD-M4 CRON[751554]: (CRON) info (No MTA installed, discarding output)
내용 /tmp/cronjob.log
은
doas: Authentication failed
답변1
joanna
문제는 구성에서 루트 사용자가 비밀번호 없이 사용자로 전환하는 것을 허용하지 않는 것 같습니다 doas
.
nopass
파일 의 옵션을 사용하여 이 작업을 수행 할 수 있습니다 doas.conf
.
permit nopass root
( doas
루트 사용자가 다른 사용자의 변경 사항을 사용하는 것을 방지하는 것은 의미가 없으므로 해당 as joanna
비트를 제거했습니다.)
su
대신 다음을 사용하도록 선택할 수도 있습니다 doas
.
su joanna -c 'cp "$1" ~/pCloudDrive/backups/" sh "$tmpfile"
또는 루트로 파일을 복사한 다음 소유권을 변경합니다 chown
.
스크립트가 약간 단순화될 수도 있습니다.
#!/bin/sh
tmpfile=/tmp/crontab.$(whoami).$(hostname)
{ crontab -l; date; } >"$tmpfile"
doas -u joanna cp "$tmpfile" ~joanna/pCloudDrive/backups/
rm -f "$tmpfile"
절대 경로 이름의 남용을 제거했습니다. 이 스크립트가 cron에서 실행되었지만 거기에서 실행 /usr/bin
되지 /bin
않으면 설정에 문제가 있는 것입니다.$PATH
또한 출력 파일 이름을 변수에 할당했는데, 이는 매번 이를 참조할 필요가 없음을 의미합니다 whoami
.hostname
각 명령의 조건부 실행을 제거하고 대신 스크립트가 임시 디렉터리를 계속 정리하도록 선택했습니다.