Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- #!/bin/bash
- #angeldp
- #pesa2.sh
- # El script, al ejecutarse, comprobará los directorios personales de los usuarios
- # del sistema. Mira cuánto ocupan; y si sobrepasan los 200MB, lo informa
- # preguntando si se desea impedir el acceso a ese usuario.
- clear
- # Solo funciona con root o sudo así que lo compruebo
- if [ "$USER" != "root" ]
- then
- echo "Debe ejecutar este script con privilegios de administrador. Use sudo."
- exit
- fi
- # Obtengo la lista de directorios
- HOMES=`cut -d: -f6 /etc/passwd`
- # Hago un bucle que recorre todos los perfiles de usuario
- # asignando a PERFIL en cada iteración la ruta a cada directorio home
- for PERFIL in $HOMES
- do
- # Si el perfil existe (puede ser que el directorio no se haya creado)
- if [ -d "$PERFIL" ]
- then
- # Obtengo su tamaño en kB y en unidades más legibles
- kbPERFIL=`du -s "$PERFIL" 2> /dev/null | cut -f1`
- humanPERFIL=`du -sh "$PERFIL" 2> /dev/null | cut -f1`
- else
- # Si no existe, pongo su tamaño a cero.
- kbPERFIL=0
- humanPERFIL=0
- fi
- # Si el perfil ocupa más de 200MB (200000KBytes)
- if [ $kbPERFIL -gt 200000 ]
- then
- # Obtengo el nombre del propietario y pregunto si quiere bloquear su acceso
- perfilUSER=`grep :${PERFIL}: /etc/passwd | cut -d: -f1`
- echo "El usuario $perfilUSER ha superado el límite máximo de 200MB en su carpeta $PERFIL"
- echo "Actualmente está usando $humanPERFIL"
- echo "¿Quiere que le bloqueemos el acceso? s/n "
- read -s -n1 OPCION
- # Si responde que sí le bloqueo, si no paso al siguiente usuario.
- if [ "$OPCION" = "s" -o "$OPCION" = "S" ]
- then
- # Para bloquear el acceso cojo la línea del passwd sin el campo de la shell
- # agrego a esa línea la shell /bin/false y la vuelvo a meter en el passwd
- # En LINEA se va a guardar la línea donde aparece el usuario (empieza por $perfilUSER)
- # si su shell (los campos del 1 al 6) Ej:
- # user1:x:1001:1001:Usuario:/home/user1
- LINEA=`more /etc/passwd | grep ^${perfilUSER}: | cut -d: -f1-6`
- # Luego añado dos puntos y /bin/false a eso, quedando:
- # user1:x:1001:1001:Usuario:/home/user1:/bin/false
- LINEA="${LINEA}:/bin/false"
- # Con grep -v obtengo todas las líneas de /etc/passwd menos la del usuario
- # es decir, el mismo archivo, pero sin la línea del usuario y lo guardo
- # en un archivo temporal:
- more /etc/passwd | grep -v ^${perfilUSER}: > miPasswd
- # Añado la línea al fichero temporal:
- echo $LINEA >> miPasswd
- # Muevo el fichero a su lugar
- mv miPasswd /etc/passwd
- # El read lo único que hace es pausar el programa
- read -n1 -s -p "Usuario $perfilUSER bloqueado, pulse cualquier tecla para continuar" TECLA
- echo -e "\n"
- fi
- # Si el perfil no supera el límite, pero existe (es mayor que cero)
- elif [ $kbPERFIL -le 200000 -a $kbPERFIL -gt 0 ]
- then
- # Obtengo el nombre del propietario y le informo de lo que ocupa
- perfilUSER=`grep :${PERFIL}: /etc/passwd | cut -d: -f1`
- echo "El usuario $perfilUSER lleva consumidos $humanPERFIL de espacio"
- read -n1 -s -p "Pulse cualquier tecla para continuar" TECLA
- echo -e "\n"
- # Si el perfil no existe, también informo
- else
- # Obtengo el nombre del propietario y le informo de que no existe su perfil
- perfilUSER=`grep :${PERFIL}: /etc/passwd | cut -d: -f1`
- echo "La carpeta $PERFIL de $perfilUSER no existe"
- read -n1 -s -p "Pulse cualquier tecla para continuar" TECLA
- echo -e "\n"
- fi
- done
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement