Actualización: este problema no será respondido de manera concluyente; Me he mudado a otra distribución y no he observado este problema desde entonces. Nunca pude solucionarlo con las perspicaces respuestas disponibles en ese momento, pero su eficiencia de combustible puede variar (YMMV).
crontab -e
y crontab -l
funciona bien:
$ crontab -l | grep -v '^#'
* * * * * /usr/bin/env
* * * * * echo 'Hello from crontab'
Sin embargo, veo dos mensajes como este cada minuto en /var/log/syslog
:
Mon DD hh:mm:01 username CRON[PID]: Permission denied
Entonces, el crontab se está leyendo , pero de alguna manera no puede ejecutar nada (por supuesto, verifiqué los comandos cuando inicié sesión como el mismo usuario). ¿Alguna idea de por qué?
/etc/cron.allow
y /etc/cron.deny
no existen
crontab es set group setuid:
$ stat --format '%A %U %G' /usr/bin/crontab
-rwxr-sr-x root crontab
El directorio crontabs parece tener los permisos correctos:
$ stat --format '%A %U %G' /var/spool/cron/crontabs
drwx-wx--T root crontab
El crontab es propiedad mía (no es sorprendente, ya que puedo editarlo):
$ sudo stat --format '%A %U %G' /var/spool/cron/crontabs/$USER
-rw------- username crontab
Estoy no un miembro del crontab
grupo.
Estas líneas aparecen en /var/log/auth.log
cada minuto (gracias @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
Tal vez PAM está roto? pam-auth-update
(gracias @coteyr) enumera todos estos, y todos están habilitados:
- Autenticación Unix
- GNOME Keyring Daemon - Gestión de inicio de sesión de llavero
- Gestión de claves / monturas eCryptfs
- ConsoleKit Session Management
- Gestión de capacidades heredables
¿Puede alguno de ellos ser desactivado de forma segura? No estoy usando ningún sistema de archivos encriptado.
Basado en una entrada de error de Debian intenté ejecutar debconf-show libpam-runtime
, y recibí el siguiente mensaje de error:
debconf: DbDriver "passwords" warning: could not open /var/cache/debconf/passwords.dat: Permission denied
Los contenidos de /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
Los archivos mencionados ( /etc/environment
, pam_env.so
, /etc/default/locale
, pam_limits.so
, pam_succeed_if.so
) son leídos por mi usuario.
En otro host con Ubuntu 13.04, con el mismo crontab de usuario, no /etc/cron.{allow,deny}
, los mismos permisos que el anterior, y no es miembro del crontab
grupo, funciona bien (registra los comandos pero no la salida /var/log/syslog
).
Al cambiar la primera línea crontab:
* * * * * /usr/bin/env >/tmp/env.log 2>&1
y comprobando que / tmp se puede escribir en todo el mundo:
$ sudo -u nobody touch /tmp/test
$ ls /tmp/test
/tmp/test
$ ls -ld /tmp
drwxrwxrwt 15 root root 12288 May 27 10:18 /tmp
Verifiqué que los comandos crontab no se ejecutan en absoluto : los Permission denied
mensajes siguen apareciendo /var/log/syslog
, pero /tmp/env.log
no se crean.
Basado en una lista aleatoria de /etc/pam.d
configuraciones encontré las siguientes discrepancias:
$ 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
Paquetes PAM instalados:
$ 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
Intenté reinstalarlos, no ayudó:
$ sudo apt-get install --reinstall $(dpkg --get-selections | grep --invert-match deinstall | cut --fields 1 | grep pam)
No puedo purgar y luego reinstalarlos debido a dependencias insatisfechas.
/var/spool/cron/crontabs/username
?/var/log/auth.log
dice sobre CRON?id cron
->id: cron: No such user
Respuestas:
PAM bad jump in stack
Es una gran pista.Su
/etc/pam.d/cron
difiere de la versión estándar con la adición de una línea adicional al final:El
success=1
bit significa "si este módulo tiene éxito, omita la siguiente regla". Solo que no hay una regla siguiente, ya que esta es la última línea en su configuración de PAM.fuente
Su configuración PAM está fuera de orden. Esto es común si ha utilizado métodos de autenticación "externos" como escáneres de huellas digitales, cuentas LDAP, llaves USB o similares. Básicamente, cron no puede funcionar con un escáner de huellas digitales, por lo que no puede iniciar sesión como usted.
Debe eliminar la configuración ofensiva,
/etc/pam.d/common-*
aunque rastrearla puede ser un poco difícil, especialmente si no habilitó algo manualmente (por ejemplo, si un script de configuración del escáner de huellas digitales activó algo).No puedo evitar decirte qué debería estar en esos archivos. Muchas cosas pueden ser diferentes dependiendo de su configuración. Pero deshabilitar los métodos de autenticación "necesarios" hasta su izquierda con solo "Autenticación Unix" puede ser un buen primer paso.
Puede hacerlo ejecutándose
pam-auth-update
como root y desmarcando las otras casillas. Tenga mucho cuidado ya que esto puede dejarlo con un sistema en el que no puede iniciar sesión si se realiza incorrectamente. Inhabilítelos uno a la vez, reinicie por seguridad y pruebe. NUNCA DESACTIVE "Autenticación Unix"fuente
/etc/pam.d/common-*
?sudo dpkg-reconfigure pam
Es la mejor manera. Sin embargo, se puede utilizarsudo dpkg -i --force-confmiss
después de borrar el archivo (CUIDADO) y se va a poner una posterior consulta este enlace: superuser.com/questions/69045/.../usr/sbin/dpkg-reconfigure: pam is not installed
. También lo intentésudo dpkg-reconfigure libpam-runtime
, pero eso no ayudó.Intentábamos programar el cron de un usuario LDAP (no usuario de la máquina) y obtener lo mismo
permission denied
incluso para poner unecho
comando o script básicocrontab
, mientras trabajaba completamente el archivo de los usuarios de las máquinas (que tienen entradas en / etc / passwd). Tomando ayuda de los comentarios detallados de resolución de problemas agregados por OP, verificamos el archivo/var/log/auth.log
donde encontramos esta línea:Un poco de búsqueda en Google me llevó a esta respuesta que funcionó para nosotros. Añadiendo los detalles aquí también.
En
/etc/sssd/sssd.conf
, bajo nuestro dominio, agregamos una entrada (ver última línea) como esta.Y luego lo hizo
sudo service sssd restart
y funciona de maravilla.fuente