Pensamos en solucionarlo configurando sudo de modo que el usuario pudiera utilizar chown, pero no tuvimos que darle ni una vuelta para darnos cuenta de que era una opción demasiado peligrosa, ya que de esa manera, el usuario podría cambiar el propietario de cualquier fichero.
Ahora sí comenzamos a darle unas vueltas y finalmente escribimos un script. El script es muy sencillo, existe un array con la lista de usuarios a los que puede pertenecer el fichero o ficheros a modificar, es decir, si tengo el usuario "pepe", el usuario "manolo", y el usuario "perico" y sólo quiero poder ejecutar chown para ficheros que pertenecen a "pepe" y a "manolo", son estos dos usuarios los que tengo que incluir en el array.
La sintaxis es como la de chown, pero con el nombre del script, y si además está en sudoers será:
#sudo mchown usuario ficheroNo es que sea la octava maravilla del mundo, pero cumple su función .
El script en cuestión es éste:
#/bin/bash
##########################################################################
# Shellscript: mchown - cambia el propietario de un fichero o ficheros
# Date : 2010-9-9
# Categoria : Utilidades de ficheros
##########################################################################
PN=`basename "$0"` # Nombre del programa
VER='1.0'
Uso () {
echo >&2 "$PN Cambia los permisos de ficheros con usuarios determinados
en el directorio actual, $VER
Uso: $PN usuario [fichero...]
Se puede dar el nombre de ficheros determinados o utilizar *. No es recursivo.
"
exit 1
}
# Comprobamos si existen los tres usuarios en el sistema
USUARIOS=( usuario1 usuario2 usuario3 usuario4)
i=0
while [ $i -lt 4 ]; do
usr=`id -u ${USUARIOS[$i]} 2>/dev/null`
case $? in
0) USUID[$i]=$usr;
indice=$i
;;
*)
;;
esac
(( i=i+1 ))
done
[ $# -lt 1 ] && Uso
# Si nos dan PN, usuario y fichero continuamos
nuevoprop=$1
while [ $# -gt 1 ] ; do
for propiet in "${USUID[@]}"; # Iteramos sobre el array
do
fichero=`stat -c %u $2` # comprobamos el uid del fichero
if [ $fichero == $propiet ]; # Validamos el uid del fichero
then
chown $nuevoprop $2
unset fichero
fi
shift # movemos la posicion del parametro un lugar
done
done
3 comentarios:
yo tengo un caso similar y creo que seria de mucha utilidad si alguien pudiera hacer un script asi. resulta que en la empresa un servidor de correos linux se hecho a perder y ya teniamos respaldo de las carpetas home y todo, resulta que son mas de 600 usuarios los uqe hay en linux y cada carpeta tiene como propietario a root, teniendo esto cuando quieren mandar un correo desde outlook marca errores de permisos porque cada carpeta deberia tener de propietario a su propio usuario.
el comando deberia ser chown -R $usuario:users /home/$usuario
de tal manera que el script tuviera la peculiaridad de tomar el nombre de cada carpeta y ponerle el mismo propietario. ya que poner el propietario a mas de 600 carpetas es tedioso.
si alguien lo hizo o tiene la solucion agradeceria mucho su comentario.
Si eso lo ejecuta root es muy fácil de hacer, lo que pasa es que estoy escribiendo con el movil, pero si no lo tienes, luego te lo escribo
Mira, sería tan fácil como hacer algo así:
#!/bin/bash
for usuario in `ls /home/`; do
chown -R ${usuario}:users /home/${usuario}
done
Publicar un comentario