crontab의 모든 명령이 "Permission denied"로 실패합니다


10

업데이트 :이 문제는 결정적으로 답변되지 않습니다. 나는 다른 배포판으로 옮겼으며 그 이후 로이 문제를 관찰하지 못했습니다. 당시에 사용 가능한 통찰력있는 답변으로 문제를 해결할 수 없었지만 연료 효율 (YMMV)이 다를 수 있습니다.


crontab -e그리고 crontab -l잘 작동 :

$ crontab -l | grep -v '^#'
* * * * * /usr/bin/env
* * * * * echo 'Hello from crontab'

그러나 매분마다 다음과 같은 두 가지 메시지가 표시됩니다 /var/log/syslog.

Mon DD hh:mm:01 username CRON[PID]: Permission denied

따라서 crontab을 읽고 있지만 어떻게 든 아무것도 실행할 수 없습니다 (물론 동일한 사용자로 로그인 할 때 명령을 확인했습니다). 왜 그런지 알아?

/etc/cron.allow그리고 /etc/cron.deny존재하지 않습니다.

crontab은 setuid 그룹으로 설정됩니다.

$ stat --format '%A %U %G' /usr/bin/crontab
-rwxr-sr-x root crontab

crontabs 디렉토리에 올바른 권한이있는 것 같습니다.

$ stat --format '%A %U %G' /var/spool/cron/crontabs
drwx-wx--T root crontab

crontab 자체는 내 소유입니다 (놀랍게도 편집 할 수 있기 때문에).

$ sudo stat --format '%A %U %G' /var/spool/cron/crontabs/$USER
-rw------- username crontab

나는 그룹 의 회원이 아닙니다crontab .

이 줄은 /var/log/auth.log1 분마다 나타납니다 (@Alaa 덕분에).

Mon DD hh:mm:01 username CRON[1752]: pam_unix(cron:session): session opened for user username by (uid=0)
Mon DD hh:mm:01 username CRON[1752]: PAM bad jump in stack

아마도 PAM이 고장 났을까요? pam-auth-update(감사 @coteyr)는이 모든 것을 나열하며 모두 활성화되어 있습니다.

  • 유닉스 인증
  • 그놈 키링 데몬-로그인 키링 관리
  • eCryptfs 키 / 마운트 관리
  • ConsoleKit 세션 관리
  • 상속 가능한 기능 관리

안전하게 비활성화 할 수 있습니까? 암호화 된 파일 시스템을 사용하지 않습니다.

데비안 버그 항목을 기반으로 running을 시도한 debconf-show libpam-runtime결과 다음과 같은 오류 메시지가 나타납니다.

debconf: DbDriver "passwords" warning: could not open /var/cache/debconf/passwords.dat: Permission denied

내용 /etc/pam.d/cron:

# The PAM configuration file for the cron daemon

@include common-auth

# Read environment variables from pam_env's default files, /etc/environment
# and /etc/security/pam_env.conf.
session       required   pam_env.so

# In addition, read system locale information
session       required   pam_env.so envfile=/etc/default/locale

@include common-account
@include common-session-noninteractive 

# Sets up user limits, please define limits for cron tasks
# through /etc/security/limits.conf
session    required   pam_limits.so

session [success=1 default=ignore] pam_succeed_if.so service in cron quiet use_uid

언급 된 파일 ( /etc/environment, pam_env.so, /etc/default/locale, pam_limits.so, pam_succeed_if.so) 내 모든 사용자가 읽을 수 있습니다.

동일한 사용자 crontab, no /etc/cron.{allow,deny}, 위와 동일한 권한이 있고 crontab그룹 의 구성원이 아닌 Ubuntu 13.04를 사용하는 다른 호스트에서는 정상적으로 작동합니다 (명령은 기록하지만 출력은 안 됨 /var/log/syslog).


첫 번째 crontab 줄을 변경하여 :

* * * * * /usr/bin/env >/tmp/env.log 2>&1

/ tmp가 월드 쓰기 가능한지 확인하십시오.

$ sudo -u nobody touch /tmp/test
$ ls /tmp/test
/tmp/test
$ ls -ld /tmp
drwxrwxrwt 15 root root 12288 May 27 10:18 /tmp

crontab 명령이 전혀 실행되지 않는 것을 확인했습니다 . Permission denied메시지는 여전히에 표시 /var/log/syslog되지만 /tmp/env.log생성되지는 않습니다.


무작위 /etc/pam.d설정 목록을 기반으로 다음과 같은 불일치가 발견되었습니다.

$ grep '^[^#]' /etc/pam.d/sshd 
@include common-auth
account    required     pam_nologin.so
@include common-account
@include common-session
session    optional     pam_motd.so # [1]
session    optional     pam_mail.so standard noenv # [1]
session    required     pam_limits.so
session    required     pam_env.so # [1]
session    required     pam_env.so user_readenv=1 envfile=/etc/default/locale
@include common-password
$ grep '^[^#]' /etc/pam.d/common-session
session [default=1]         pam_permit.so
session requisite           pam_deny.so
session required            pam_permit.so
session optional            pam_umask.so
session required    pam_unix.so 
session optional    pam_ecryptfs.so unwrap
session optional            pam_ck_connector.so nox11
$ grep '^[^#]' /etc/pam.d/common-account
account [success=1 new_authtok_reqd=done default=ignore]    pam_unix.so 
account requisite           pam_deny.so
account required            pam_permit.so
$ grep '^[^#]' /etc/pam.d/common-session-noninteractive 
session [default=1]         pam_permit.so
session requisite           pam_deny.so
session required            pam_permit.so
session optional            pam_umask.so
session required    pam_unix.so 
session optional    pam_ecryptfs.so unwrap

설치된 PAM 패키지 :

$ dpkg --get-selections | grep --invert-match deinstall | cut --fields 1 | grep pam
libpam-cap
libpam-ck-connector
libpam-gnome-keyring
libpam-modules
libpam-modules-bin
libpam-runtime
libpam0g
python-pam

나는 이것을 다시 설치하려고 시도했지만 도움이되지 않았다.

$ sudo apt-get install --reinstall $(dpkg --get-selections | grep --invert-match deinstall | cut --fields 1 | grep pam)

충족되지 않은 종속성으로 인해 제거하고 다시 설치할 수 없습니다.


cron으로 로그인하여 명령을 실행하려고 했습니까?
NotFromBrooklyn

@ l0b0, crontabs 폴더 내에서 crontab 파일 자체의 권한은 /var/spool/cron/crontabs/username어떻습니까?
Alaa Ali

1
흠. /var/log/auth.logCRON에 대해 무엇을 말합니까?
Alaa Ali

@NotFromBrooklyn- id cron>id: cron: No such user
l0b0

1
@ssoto 어떻게 알 수 있습니까? 나는 오전 지역 그게 당신이 무슨 뜻인지, 사용자.
l0b0

답변:


2

PAM bad jump in stack 큰 단서입니다.

귀하의 /etc/pam.d/cron끝에 하나 개의 추가 라인의 추가와 함께 주식 버전과 다릅니다

session [success=1 default=ignore] pam_succeed_if.so service in cron quiet use_uid

success=1비트는 "이 모듈이 성공하면, 다음 규칙을 건너"를 의미한다. 이것이 PAM 구성의 마지막 줄이므로 다음 규칙 만 없습니다.


나는 같은 줄을 가지고 있었고 (interwebs의 어딘가에서 가져 와야 만했다) 주석 처리하고 모든 것이 다시 작동하기 시작했다.
Mike

1

PAM 구성이 잘못되었습니다. 지문 스캐너, LDAP 계정, USB 키 또는 정렬과 같은 "외부"인증 방법을 사용한 경우에 일반적입니다. 기본적으로 cron은 지문 스캐너를 사용할 수 없으므로 사용자로 로그인 할 수 없습니다.

/etc/pam.d/common-*특히 수동으로 무언가를 활성화하지 않은 경우 (예를 들어, 지문 스캐너 설정 스크립트가 무언가를 켠 경우) 문제를 일으키는 구성을 추적하는 것은 약간 어려울 수 있지만 제거해야합니다 .

나는 그 파일에 무엇이 있어야하는지 알려주는 데 도움이되지 않습니다. 설정에 따라 많은 것들이 다를 수 있습니다. 그러나 "유닉스 인증"만으로 왼쪽에서 "필수"인증 방법을 비활성화하는 것이 좋은 첫 단계 일 수 있습니다.

pam-auth-update루트 권한으로 실행 하고 다른 상자를 선택 취소 하여이 작업을 수행 할 수 있습니다 . 잘못 로그인하면 로그인 할 수없는 시스템이 남을 수 있으므로 매우주의하십시오. 한 번에 하나씩 비활성화하고 안전을 위해 재부팅 한 다음 테스트하십시오. "Unix 인증"을 비활성화하지 마십시오


지문 스캐너는 일반적으로 "필수"가 아닌 "선택적"이어야합니다. "필수"라고하면 지문이없는 것은 "로그인"할 수 없습니다. 이와 같은 구성 오류로 인해 이와 같은 문제가 발생할 수 있습니다. 그러나 일반적으로 지문 스캐너 (또는 USB 또는 LDAP 또는 SMB 등)로는 문제가 발생하지 않습니다.
coteyr

지문 스캐너 또는 USB 드라이브를 연결하지 않았습니다. 기본 콘텐츠가 무엇인지 확인할 수있는 곳을 알고 /etc/pam.d/common-*있습니까?
l0b0

sudo dpkg-reconfigure pam는 IS 가장 좋은 방법입니다. 그러나 sudo dpkg -i --force-confmiss파일을 삭제 한 후 사용할 수 있으며 (
CAREFUL)

/usr/sbin/dpkg-reconfigure: pam is not installed. 나는 또한 시도 sudo dpkg-reconfigure libpam-runtime했지만 도움이되지 않았다.
l0b0

1
패키지가 빠진 것 같지 않습니다. 엉망인 구성이라고 생각합니다. "PAM 잘못된 점프 스택"오류는 어떤 이유로 필요한 pam 모듈을 인증 할 수 없음을 의미합니다. 내가 말했듯이 이것은 일반적으로 사람들이 자신의 pam 파일을 고의로 또는 실수로 엉망으로 만들고 작동하지 않는 필수 모듈을 추가하여 발생합니다. 일부 예는 SMB 인증, LDAP 인증, 하드웨어 기반 인증 등입니다. 일부 패키지는 문제를 일으키는 파일을 추가했을 수 있습니다. 팸이 작동 중입니다. 로그인 할 수 있지만 크론이 작동하지 않기 때문에 작동하지 않습니다
coteyr

1

우리는 LDAP 사용자 (비 기계 사용자)에서 cron을 예약하려고 시도했으며 permission denied기본 echo명령이나 스크립트를 넣는 것에 대해서도 동일하게 가져 왔지만 crontab기계 사용자 (/ etc / passwd에 항목이 있음)에서 완전히 파일 작업을하고있었습니다. OP가 추가 한 자세한 문제 해결 의견을 통해 /var/log/auth.log다음 줄을 찾은 파일을 확인했습니다 .

pam_sss(cron:account): Access denied for user my_username: 6 (Permission denied)

약간의 Google 검색으로 저 에게 도움이 되는 답변으로 이동했습니다. 여기에도 세부 사항을 추가하십시오.

에서 /etc/sssd/sssd.conf도메인 아래에 이와 같은 항목을 추가했습니다 (마지막 줄 참조).

[domain/my.domain.com]
....
ad_gpo_map_interactive = +cron

그리고 방금 그랬고 sudo service sssd restart그것은 매력처럼 작동합니다.

당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.