APT a traves de cron

15 envíos / 0 nuevos
Último envío
#1 Mié, 23/12/2020 - 12:48
Vctrsnts
Imagen de Vctrsnts
Desconectado/a
se unió: 15/03/16

APT a traves de cron

Estado: 
[SOLUCIONADO]

Buenas,

Antes de nada perdon si no es el hilo correcto, pero como lo principal es APT, pues ...

Mi intención es que a traves de cron hacer un aptitude update, porque tengo un plugin que me muestra los paquetes que se tendrian que actualizar ( la decisión la tomo yo, pero me muestra el numero ).

Entonces, lo que hago es lo siguiente :

sudo crontab -e
@hourly aptitude update

En principio, no tiene nada de especial y todo funciona bien, pero cuando reinicio el portatil, el cron del root esta vació ( sudo crontab -l. Lo que habia puesto antes se ha perdido y no se como hacer de que se mantenga.

Alguien lo hace? Como lo hace, o se os ocurre alguna idea??

Gracias por vuestra ayuda

Mié, 23/12/2020 - 13:25
caliban
Imagen de caliban
Conectado
moderador
se unió: 14/01/16

editas crontab de tu usuario y el comando a ejecutar cada hora lo ejecutas con sudo
*/1 * * * * DISPLAY=:0 sudo aptitude update > /dev/null
Otra opcion es que ejecute un pequeño script para actualizar el listado y te lo muestre
01 * * * * /home/usuario/scripts/apupdate2
Y el script que tengo yo
---------------------------------------------------------------------------
#! /bin/bash
sudo aptitude update &> /dev/null
sleep 60
NUM=`sudo aptitude search ~U | wc -l `

DISPLAY=:0.0 /usr/bin/notify-send " hay $NUM actualizaciones " -t 3540000
----------------------------------------------------------------------------------------------
Donde :
---------------------------------------------
sudo aptitude update &> /dev/null
-----------------------------------------------
es el que actualiza el listado (fijate que el usuario tiene privilegios para ejecutarlo mediante sudo)
Y la sentencia :
-------------------------------------------------
NUM=`sudo aptitude search ~U | wc -l `
------------------------------------------------
Guarda el numero de actualizaciones en la variable NUM,
Luego simplemente vos elegis el modo en que vas a mostrar dicho numero ( notify-send, es un ejemplo de pop-up, bien lo podes mostrar con
conky , dzen, o lo que mejor que puedas)
entonces no usas el crontab de root, si no el de tu usuario y lo habilitas mediante sudo .
Edito:Un detalle, a mi usuario le asignado permiso para poder ejecutar aptitude sin contraseña

Mié, 23/12/2020 - 14:34
Vctrsnts
Imagen de Vctrsnts
Desconectado/a
se unió: 15/03/16

Muchas gracias.

Es que tengo i3block junto con un plugin ( si se le puede llamar asi ) que ejecuta un script y me da el nº de programas ha actualizar y para que funcione, se tiene que ejecutar el aptitude update

La solución que me das esta bien, pero me preocupa que al usuario no le haga falta pedir el password. Lo comento por seguridad...

Le echare un vistazo a tu script.

De nuevo gracias por la ayuda...

Mié, 23/12/2020 - 14:51
caliban
Imagen de caliban
Conectado
moderador
se unió: 14/01/16

El usuario no tiene que poner el pass SOLO para aptitude , lo he configurado editando el archivo sudoers,
En todo caso si insistis en editar el crontab de root ,hacelo identificandote como root para editar el correspindiente crontab con
----------
su -
_________________

Mié, 23/12/2020 - 15:13 (Responder a #4)
Vctrsnts
Imagen de Vctrsnts
Desconectado/a
se unió: 15/03/16

Buenas,

Muchas gracias por la ayuda y los consejos.

caliban wrote:

El usuario no tiene que poner el pass SOLO para aptitude , lo he configurado editando el archivo sudoers,

Esto como lo haces??

Además tenia un error de funcionamiento en mi caso. Nunca me guardaba los CRONS ( ni root ni usuario ) porque tenia /var/spool/ que es donde se guarda ( entiendo ) los crons en un sistema tmpfs y asi es imposible que funcione ( tengo un SDD ) y por eso lo hice.

Ahora lo he puesto que este dentro del sistema ext4 y espero que ahora si me funciona.

Hare una prueba a ver que tal va todo.

De nuevo, gracias por tu ayuda.

Muchas gracias

Mié, 23/12/2020 - 15:27
caliban
Imagen de caliban
Conectado
moderador
se unió: 14/01/16

Tenes que editar el archivo suoders , y agregar una entrada similar a esta :
-------------------------------------------
usuario host=NOPASSWD:/usr/bin/aptitude
----------------------------------------------------------
Sudoers tiene una buena cantidad de opciones y posibildades sobre quien o que grupo puede hacer que con privilegios de root
Cuidado ! al editar sudoers, lo mejor es hacer previamente una copia de seguridad del mismo y luego editar .
(por ejemplo cp /etc/sudoers /etc/sudoers.copia )
https://www.linuxtotal.com.mx/index.php?cont=info_admon_014

Mié, 23/12/2020 - 15:30 (Responder a #6)
Vctrsnts
Imagen de Vctrsnts
Desconectado/a
se unió: 15/03/16

caliban wrote:

Tenes que editar el archivo suoders , y agregar una entrada similar a esta :
-------------------------------------------
usuario host=NOPASSWD:/usr/bin/aptitude
----------------------------------------------------------
Sudoers tiene una buena cantidad de opciones y posibildades sobre quien o que grupo puede hacer que con privilegios de root
Cuidado ! al editar sudoers, lo mejor es hacer previamente una copia de seguridad del mismo y luego editar .
(por ejemplo cp /etc/sudoers /etc/sudoers.copia )
https://www.linuxtotal.com.mx/index.php?cont=info_admon_014

Gracias.

Supongo que esto no lo puedes hacer con tu usuario de trabajo normal, porque sino, no puede hacer nada más a parte del aptitude

Le echare un vistazo.

De nuevo, gracias por todo...

Mié, 23/12/2020 - 15:40 (Responder a #7)
caliban
Imagen de caliban
Conectado
moderador
se unió: 14/01/16

Vctrsnts wrote:

Supongo que esto no lo puedes hacer con tu usuario de trabajo normal, porque sino, no puede hacer nada más a parte del aptitude

Le echare un vistazo.

De nuevo, gracias por todo...


¿Que cosa no podes hacer como usuario normal ? ¿editar sudoers ? pues no , claro .

Mié, 23/12/2020 - 15:52 (Responder a #8)
Vctrsnts
Imagen de Vctrsnts
Desconectado/a
se unió: 15/03/16

caliban wrote:

Vctrsnts wrote:

Supongo que esto no lo puedes hacer con tu usuario de trabajo normal, porque sino, no puede hacer nada más a parte del aptitude

Le echare un vistazo.

De nuevo, gracias por todo...

¿Que cosa no podes hacer como usuario normal ? ¿editar sudoers ? pues no , claro .

Perdona, pero creo que no me he explicado bien, que si pones

usuario host=NOPASSWD:/usr/bin/aptitude entiendo que usuario solo podra ejecutar aptitude. Y que si este es el usuario normal de trabajo, la lias.

Lo digo, porque he hecho la prueba con

%sudo% .... NOPASSWD:/usr/bin/aptitude y mi usuario normal de trabajo ha dejado de hacer todo el resto de cosas ( ni un simple sudo cp ). Todo el rato me decia que el usuario no tenia permiso para hacer eso... Ni tampoco me dejaba modificar el sudoer para solucionar el problema He tenido que iniciar con Linux Mint Live para poder modificar el fichero tal como lo tenia antes.

A esto me refiero.

De nuevo, perdon si no me he explicado bien...

Mié, 23/12/2020 - 16:10
caliban
Imagen de caliban
Conectado
moderador
se unió: 14/01/16

Em, supongo que vos al estilo ubuntu tenes habilitado el uso de sudo para todo lo que corresponda a root .
Cuando en sudoers le das ciertos privilegios a cierto usuario ,sera este y solo este el que pueda ejecutar con sudo dichos privilegios,
en este caso solo aptitude y sin necesidad de ingresar el pass.
Yo solo uso el usuario registrado y root para cuando tengo que hacer tareas de root, excepto en estas aplicaciones donde por practicidad
le permito a mi usuario ejecutar esto o aquello .(cosas muy puntuales )
No tengo habilitado el uso de sudo al estilo ubuntu.

Mié, 23/12/2020 - 19:16 (Responder a #10)
Vctrsnts
Imagen de Vctrsnts
Desconectado/a
se unió: 15/03/16

Gracias por aclararme las dudas.

De nuevo, gracias por todo...

Vie, 25/12/2020 - 08:27
Panko
Imagen de Panko
Conectado
moderador
se unió: 18/02/16

Por aclararlo un poco
USUARIO ALL=NOPASSWD: /usr/bin/aptitude
esto lo que hace es que mientras el usuario pueda utilizar sudo, no pida la contraseña para ejecutarlo como root SOLO para ese comando, para los demás seguirá pidiendola.
Si quieres "acotarlo" un poco más y que no pueda realizar cualquier acción como instalar o desinstalar o actualizar el sistema, basta con colocar /usr/bin/aptitude update y solo podrá ejecutar aptitude update sin tener que meter la contraseña, es decir, podrás ejecutar sudo aptitude update sin contraseña pero necesitarás ponerla para ejecutar sudo aptitude safe-upgrade, por ejemplo.

El caso que dices que has tenido de que solo pudiera ejecutar aptitude como sudo y ninguna otra cosa más tiene que deberse a que de alguna manera no has editado el archivo correctamente. No hay que modificar la linea que ya exista, ya que esa es la que da el permiso para sudo, si no que tienes que añadir una nueva:

# User privilege specification
root ALL=(ALL) ALL

# Allow members of group sudo to execute any command
%sudo ALL=(ALL) ALL

fulano ALL=NOPASSWD: /usr/bin/aptitude update

de forma que las lineas del archivo quedarían como acabo de poner arriba y el usuario "fulano" pueda ejecutar sudo /usr/bin/aptitude update sin la contraseña, pero ninguno más sin ella.

  No hay bar que por bien no venga....
Vie, 25/12/2020 - 18:46 (Responder a #12)
Vctrsnts
Imagen de Vctrsnts
Desconectado/a
se unió: 15/03/16

Panko wrote:

Por aclararlo un poco
USUARIO ALL=NOPASSWD: /usr/bin/aptitude
esto lo que hace es que mientras el usuario pueda utilizar sudo, no pida la contraseña para ejecutarlo como root SOLO para ese comando, para los demás seguirá pidiendola.
Si quieres "acotarlo" un poco más y que no pueda realizar cualquier acción como instalar o desinstalar o actualizar el sistema, basta con colocar /usr/bin/aptitude update y solo podrá ejecutar aptitude update sin tener que meter la contraseña, es decir, podrás ejecutar sudo aptitude update sin contraseña pero necesitarás ponerla para ejecutar sudo aptitude safe-upgrade, por ejemplo.

El caso que dices que has tenido de que solo pudiera ejecutar aptitude como sudo y ninguna otra cosa más tiene que deberse a que de alguna manera no has editado el archivo correctamente. No hay que modificar la linea que ya exista, ya que esa es la que da el permiso para sudo, si no que tienes que añadir una nueva:

# User privilege specification
root ALL=(ALL) ALL

# Allow members of group sudo to execute any command
%sudo ALL=(ALL) ALL

fulano ALL=NOPASSWD: /usr/bin/aptitude update

de forma que las lineas del archivo quedarían como acabo de poner arriba y el usuario "fulano" pueda ejecutar sudo /usr/bin/aptitude update sin la contraseña, pero ninguno más sin ella.

De nuevo, gracias

Ha sido esto ultimo, porque he modificado el sudo en vez de añadir una nueva linea. Hay es donde tenia el problema.

De nuevo, gracias por todo...

Dom, 27/12/2020 - 17:32
Berbellon
Imagen de Berbellon
Desconectado/a
colaborador
se unió: 04/05/16

AntiX proporciona este script (/usr/local/bin/yad-updater)...


#!/bin/bash

TEXTDOMAINDIR=/usr/share/locale
TEXTDOMAIN=yad-updater

touch ~/.loggy
log="/tmp/$(date +%s)"

### This 2 lines of code check if there's internet connectivity
# adapted from https://unix.stackexchange.com/questions/190513/shell-scripting-proper-way-to-check-for-internet-connectivity
if nc -zw1 google.com 443; then
echo $"Internet connection detected"

### Check if user is Root, if not, pop up window asking for password, to run updater. If Canceled, exits.
# adapted from https://stackoverflow.com/questions/42875809/checking-sudo-in-bash-script-with-if-statements
if [[ "$EUID" = 0 ]]; then
echo $"already root"
else
gksudo "antiX updater"
if sudo true; then
echo $"You are Root or running the script in sudo mode"
else
echo $"You entered the wrong password or you cancelled"
exit 1
fi
fi

env LANGUAGE=en sudo apt update 2> "${log}" |
while read -r line; do echo "# ${line}"; echo " ${line}" > ~/.loggy ; done |
yad --progress --pulsate --center --no-buttons --auto-close --progress-text=$"Waiting for a Network connection..." --width=500 --height=100 --title="antiX - Updater"
string=$(cat ~/.loggy)
for reqsubstr in 'up to date';do
if [ -z "${string##*$reqsubstr*}" ] ;then
yad --center --width=250 --text-align=center --text="\n $string " --title='antiX - Update' --button="OK":1 ; exit 0
else
x-terminal-emulator -T " antiX - Updater" -e /bin/bash -c "sudo apt dist-upgrade -V && sleep 0.1 && yad --center --width=250 --text-align=center --text=$"Finished" --button='OK':1 --title='antiX - Updater'"
fi
done

### This 2 lines of code end the part of the script that checks for internet connectivity
else yad --center --width=250 --text-align=center --text=$"No Internet connection detected!" --title='antiX - Updater' --button='OK':1

fi

Trabaja junto a /usr/bin/apt-notifier.py

Dom, 27/12/2020 - 17:38
Berbellon
Imagen de Berbellon
Desconectado/a
colaborador
se unió: 04/05/16

Pero este último lo sustituí con, package-update-indicator (2.0-1), desde los repositorios. La razón, si hay actualizaciones críticas (de seguridad), muestra el número de ellas ... Otra, las notificaciones se visualizan con dunst (otro(s)).

PD: Debian Stable.
PD2: >_ nano /etc/sudoers.d/README