
Solo estoy intentando agregar un mensaje de confirmación a algunos comandos de Linux como chmod
y chown
.
Intenté buscar esto en Google pero no encuentro mucha información sobre el tema.
Mientras buscaba, descubrí que existe una solución para rm
usar la -i
opción, aunque se puede sobrescribir con-f
Sin embargo, existe safe-rm
un paquete que puede instalar en su servidor que incluye en la lista negra ciertos directorios importantes, lo cual es una solución bastante buena, pero lamentablemente no existe un paquete similar para chmod
y chown
.
Entonces, mi solución ideal sería dónde chmod
tener chown
mensajes de confirmación y también ciertos directorios están en la lista negra para evitar ser chmod y chown.
¡Cualquier respuesta muy apreciada!
Respuesta1
los comandoschown (1)ychmod (1)No tengo esta opción de forma nativa. Si desea agregar esa funcionalidad, entonces puede:
- Hay que cambiar la fuente y volver a compilar.
- O escribe un envoltorio.
La primera opción es la más limpia. El segundo más fácil. Si te quedas atascado al escribir eso, entonces necesitas una nueva pregunta que probablemente se ajuste mejor a [SO], pero brevemente:
1) mueva chmod a otro lugar. p.ejmv /bin/chmod /bin/chmold.therealthing
2) Cree un script ejecutable llamado chmod que haga lo que quiere (y que llame al chmod real).
Algo no probado de una persona que no usa scripts de Shell (también conocido como yo :)
#!/usr/bin/env bash
echo "/bin/chmod (Shell script) called with these arguments:"
echo $@
read -p "Are you sure you want to do this? (y/n) " RESPONSE
if [ "$RESPONSE" = "y" ]; then
exec /bin/chmod.therealthing $@
else
echo "OK, aborting."
fi
Si desea un control más granular, el script rápidamente se vuelve más complejo. Aún así, si desea poder analizar la entrada y ejecutar un chmod para cada archivo (después de verificar una sintaxis válida).
Respuesta2
Una solución en bash sería utilizar alias y funciones de shell. Puedes ponerlos en /etc/bashrc o ~/.bashrc si solo los quieres para usuarios específicos. Aquí hay algunas definiciones de funciones y alias que podría usar para hacer algo como lo que solicitó.
DANGERLIST=/etc/dangerous.paths
_dangerouspath() {
file=$(readlink -e "$1")
[ -z "${file}" ] && return 1
while read pattern
do
[[ "${file}" =~ ^${pattern}$ ]] && return 0
done < ${DANGERLIST}
return 1
}
_checkpaths() {
shift
while [ -n "$1" ]
do
[[ "X$1" =~ ^X[^-].* ]] && _dangerouspath $1 && return 0
shift
done
return 1
}
_saferun() {
p="$1"
shift
if _checkpaths $*
then
read -p "Are you sure you want to do this? (y/n) " r && [ "$r" = "y" ] && $p $*
else
$p $*
fi
}
alias chown="_saferun /bin/chown"
alias chgrp="_saferun /bin/chgrp"
alias chmod="_saferun /bin/chmod"
Necesitaría crear una lista de rutas que desea proteger en "$DANGERLIST" (/etc/dangerous.paths) que sería algo así como
/
/home
/etc.*
/usr/bin.*
/bin.*