
Ich versuche nur, einigen Linux-Befehlen wie chmod
und 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 rm
die Verwendung der -i
Option gibt, die jedoch überschrieben werden kann mit-f
Es gibt jedoch safe-rm
ein 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 chmod
und chown
.
Meine Ideallösung wäre also, dass es Bestätigungsaufforderungen chmod
gibt chown
und 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:
- Muss die Quelle ändern und neu kompilieren.
- 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.*