Bestätigungsaufforderung für chmod, chown

Bestätigungsaufforderung für chmod, chown

Ich versuche nur, einigen Linux-Befehlen wie chmodund eine Bestätigungsaufforderung hinzuzufügen chown.

Ich habe versucht, dies zu googeln, kann aber nicht viele Informationen zu diesem Thema finden.

Bei der Suche habe ich herausgefunden, dass es eine Lösung für rmdie Verwendung der -iOption gibt, die jedoch überschrieben werden kann mit-f

Es gibt jedoch safe-rmein Paket, das Sie auf Ihrem Server installieren können, das bestimmte wichtige Verzeichnisse auf die schwarze Liste setzt, was eine recht gute Lösung ist, aber leider gibt es kein ähnliches Paket für chmodund chown.

Meine Ideallösung wäre also, dass es Bestätigungsaufforderungen chmodgibt chownund außerdem bestimmte Verzeichnisse auf die schwarze Liste gesetzt werden, damit sie nicht mit „chmod“ oder „chown“ geändert werden.

Ich bin für alle Antworten sehr dankbar!!!

Antwort1

Die Befehlechown (1)Undchmod (1)haben von Haus aus keine Option. Wenn Sie diese Funktionalität hinzufügen möchten, können Sie entweder:

  1. Muss die Quelle ändern und neu kompilieren.
  2. Oder schreiben Sie einen Wrapper.

Die erste Option ist die sauberste. Die zweite die einfachere. Wenn Sie beim Schreiben nicht weiterkommen, brauchen Sie eine neue Frage, die wahrscheinlich besser zu [SO] passt, aber kurz gesagt:

1) verschieben Sie chmod woanders hin. zBmv /bin/chmod /bin/chmold.therealthing

2) Erstellen Sie ein ausführbares Skript namens chmod, das das gewünschte tut (und das echte chmod aufruft).

Etwas Ungetestetes von einer Person, die kein Shell-Skript verwendet (also von mir:)

#!/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

Wenn Sie eine genauere Kontrolle wünschen, wird das Skript schnell komplexer. Trotzdem, wenn Sie möchten, können Sie die Eingabe analysieren und für jede Datei einen chmod ausführen (nachdem Sie auf eine gültige Syntax geprüft haben).

Antwort2

Eine Lösung in Bash wäre die Verwendung von Shell-Funktionen und Aliasen. Sie können sie in /etc/bashrc oder ~/.bashrc ablegen, wenn Sie sie nur für bestimmte Benutzer möchten. Hier sind einige Funktions- und Aliasdefinitionen, die Sie verwenden könnten, um etwas zu tun, das dem entspricht, was Sie gefragt haben.

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"

Sie müssen eine Liste der Pfade erstellen, die Sie in "$DANGERLIST" (/etc/dangerous.paths) schützen möchten. Diese Liste würde etwa so aussehen:

/
/home
/etc.*
/usr/bin.*
/bin.*

verwandte Informationen