[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]
Re: ssh-Schlüsselpaar auf Dateizugiff in ein spezifisches Directory beschränken
[Thread Prev] | [Thread Next]
- Subject: Re: ssh-Schlüsselpaar auf Dateizugiff in ein spezifisches Directory beschränken
- From: Marc Haber <mh+uugrn@xxxxxxxxxxxx>
- Date: Sat, 7 Sep 2024 15:08:05 +0200
- To: UUGRN Mailingliste <uugrn@xxxxxxxxx>
On Sat, Sep 07, 2024 at 02:37:41PM +0200, Michael Lestinsky wrote:
> hat hier evtl. jemand eine Idee, wie man ein ssh-Schlüsselpaar in seiner
> ssh/authorized_keys soweit beschränken kann, dass damit nur noch
> Dateiaustausch (wahlweise rsync oder sshfs, ich kann mich da anpassen) aus
> einem ganz bestimmten Verzeichnis möglich ist?
>
> Eine Einschränkung wäre, dass der sshd auf Debian Buster läuft und folglich
> Versionsstand 7.9 hat und ich dort nur normale Userrechte besitze.
Du kannst einen Schlüssel in der authorized_keys auf ein bestimmtes
Kommando festnageln.
Ich mache das gerne so:
from="(liste von IP-Adressen, optional)",command="/path/to/ssh-forced-command some-key-ID"
Die Dokumentation dazu findet sich in man sshd. Interessant ist, dass
das dem ssh-Client mitgegebene Kommando in $SSH_ORIGINAL_COMMAND
hinterlegt wird und somit ausgewertet werden kann. Das command wird mit
einer shell ausgeführt, kann also Parameter aus authorized_keys
erhalten.
Hier ein Script das ich dazu gerne verwende:
/path/to/ssh-forced-command:
#!/bin/bash
KEY="$1"
PATH="/usr/sbin:/usr/bin:/sbin:/bin"
me=$(basename "$0")
logger -t "$0" "called with [$KEY] $SSH_ORIGINAL_COMMAND"
FQDN="$(hostname --fqdn)"
cmd()
{
logger -p user.info -t "$me $KEY" -- "$@"
"$@"
}
execute-all() {
KEY="$KEY execute-all"
case "$SSH_ORIGINAL_COMMAND" in
*) cmd "$SSH_ORIGINAL_COMMAND";;
esac
}
illegal-command() {
echo "$me@$(hostname): illegal command $SSH_ORIGINAL_COMMAND"
logger -p user.err -t "$me $KEY" -- "ignoring illegal command $SSH_ORIGINAL_COMMAND"
exit 1
}
mh-hostmaster-torres-ppl() {
if echo "$SSH_ORIGINAL_COMMAND" | grep -E --quiet "^${FQDN} rsync --server -v?log?D?t?pre\.iLs?f?x?C?I?v?u? --delete . /etc/bind/?"; then
cmd rsync --server -loDpre.iLsf --delete . /etc/bind/
elif [ "$SSH_ORIGINAL_COMMAND" = "mkbinddirs" ]; then
cmd /etc/bind/scripts/mkbinddirs
elif [ "$SSH_ORIGINAL_COMMAND" = "rndc reload" ]; then
cmd /usr/sbin/rndc reload
else
illegal-command
fi
}
case $KEY in
mh-hostmaster-torres-ppl) mh-hostmaster-torres-ppl ;;
*) echo "$me@$(hostname): illegal key $KEY presented"
logger -p user.err -t "$me" -- "ignoring illegal key $KEY"
exit 1
;;
esac
Hier sieht man also, dass ssh user@host rsync (mit auf die Regexp
passenden Parametern) das genannte hartcodierte rsync-Kommando auslöst
(das u.a. den Zugriff auf /etc/bind beschränkt) und die beiden Kommandos
mkbinddirs und rndc reload die entsprechenden Aktionen auslösen. Alles
andere führt zu einer Ausgabe am Client und einer geloggten Fehlermeldung.
Die Funktion "execute-all" kann man in der Findungsphase einem Key
zuweisen, da ist dann alles erlaubt und wird geloggt, so dass man die
dazu passende Regexp bauen kann, wenn man das so komplex machen
Und jetzt wo ich das alles niedergeschrieben habe und dachte, daraus
könnte man eigentlich einen Blogartikel machen, fällt mir auf, dass ich
darüber 2017 bereits gebloggt HABE. Hrmph.
https://blog.zugschlus.de/archives/982-Login-als-technischer-User-mit-ssh-forced-commands.html
Grüße
Marc
--
-----------------------------------------------------------------------------
Marc Haber | "I don't trust Computers. They | Mailadresse im Header
Leimen, Germany | lose things." Winona Ryder | Fon: *49 6224 1600402
Nordisch by Nature | How to make an American Quilt | Fax: *49 6224 1600421
--
Unix User Group Rhein-Neckar e.V.: https://www.uugrn.org
Archiv und An-/Abmeldung: https://mail2.uugrn.org
Social Media: https://social.uugrn.org
| Re: ssh-Schlüsselpaar auf Dateizugiff in ein spezifisches Directory beschränken | Michael Lestinsky <michael@xxxxxxxxxxxx> |
| ssh-Schlüsselpaar auf Dateizugiff in ein spezifisches Directory beschränken | Michael Lestinsky <michael@xxxxxxxxxxxx> |