Mensaje de confirmación para chmod, chown

Mensaje de confirmación para chmod, chown

Solo estoy intentando agregar un mensaje de confirmación a algunos comandos de Linux como chmody chown.

Intenté buscar esto en Google pero no encuentro mucha información sobre el tema.

Mientras buscaba, descubrí que existe una solución para rmusar la -iopción, aunque se puede sobrescribir con-f

Sin embargo, existe safe-rmun 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 chmody chown.

Entonces, mi solución ideal sería dónde chmodtener chownmensajes 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:

  1. Hay que cambiar la fuente y volver a compilar.
  2. 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.*

información relacionada