Verwenden Sie eine Wrapper-Binärdatei
Für diesen speziellen Anwendungsfall (siehe den wichtigen Hinweis unten) besteht eine Möglichkeit darin, einen Benutzer (z. B. support-ssh
) speziell für diese ausgehenden SSH-Verbindungen zu erstellen und dann eine kleine Wrapper-Binärdatei zu installieren, die ausgeführt wird /usr/bin/ssh
.
- Kopieren Sie die
ssh
Binärdatei selbst nicht + chmod , da Sie nicht daran denken, sie jedes Mal neu zu kopieren, wenn Sie Sicherheitsupdates anwenden.
- Und verwenden Sie es nicht
root
als privilegierter Benutzer, da Gründe, denen ich vertraue, offensichtlich sind.
Dies ist eine funktional äquivalente Alternative zur Verwendung sudo
, um die Berechtigungen auf die des support-ssh
Kontos mit den folgenden Kompromissen zu erhöhen :
- Dies ist kleiner und schlanker als
sudo
, sodass das Risiko von Konfigurationsfehlern geringer ist als beabsichtigt.
- Es liegt in Ihrer Verantwortung, es richtig zu codieren - tun Sie dies nur, wenn Sie äußerst vorsichtig sind und (im Idealfall) Erfahrung mit sicherheitskritischer Codierung haben.
- Es kann spezifischer angepasst werden als
sudo
(aber je mehr Code Sie schreiben, desto mehr müssen Sie auf Sicherheit prüfen).
Die Wrapper-Binärdatei sollte HOME
auf das support-ssh
Home-Verzeichnis des Benutzers eingestellt sein, damit ssh
der entsprechende ssh_config
und private Schlüssel abgerufen wird. Dem aufrufenden Benutzer sollte jedoch nicht gestattet werden, ~support-ssh/.ssh/
dessen Inhalt zu lesen .
Der Wrapper kann so einfach sein wie:
#include <stdio.h>
#include <stdlib.h>
#include <unistd.h>
int main(int argc, char **argv)
{
setenv("HOME", "/home/support-ssh", 1);
/* allow only a single, non-option argument */
if (argc!=2 || *argv[1]=='-') {
fprintf(stderr, "Usage: %s <hostname>", argv[0]);
exit(EXIT_FAILURE);
}
execv("/usr/bin/ssh", argv);
return EXIT_FAILURE;
}
Möglicherweise möchten Sie restriktiver sein und überprüfen, ob sich das Argument argv[1]
in einer Reihe zulässiger Hostnamen befindet. Oder weniger restriktiv und erlauben (eine Teilmenge von) Optionsargumenten. Vielleicht möchten Sie auf Umgebungsvariablen vollständig ersetzen (aber tigeren halten wie TERM
, LC_*
usw.); Beachten Sie, dass LD_LIBRARY_PATH
und LD_PRELOAD
sind besonders gefährlich.
scp
Bei Bedarf kann ein ähnliches Wrapper-Programm bereitgestellt werden.
Ein Hinweis zur Anwendbarkeit
Diese Antwort befasst sich mit den besonderen Umständen der Frage, unter denen die Benutzer vertraglich verpflichtet sind, Verfahren einzuhalten, und es gibt Sanktionen (z. B. Entlassung) für Verstöße gegen diese. Es wird davon ausgegangen, dass Sie verhindern möchten, dass die Mitarbeiter zufällig private Schlüssel kopieren, anstatt zu verhindern, dass ein entschlossener Angreifer unbefugten Zugriff erhält.
Ich bin der Ansicht, dass Sicherheit sowohl durch technische als auch durch nichttechnische Abwehrmaßnahmen erreicht wird und dass das hier oder durch Verwendung erzielte Gleichgewicht sudo
für die dargestellte Situation angemessen ist.