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
sshBinärdatei selbst nicht + chmod , da Sie nicht daran denken, sie jedes Mal neu zu kopieren, wenn Sie Sicherheitsupdates anwenden.
- Und verwenden Sie es nicht
rootals 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-sshKontos 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 HOMEauf das support-sshHome-Verzeichnis des Benutzers eingestellt sein, damit sshder entsprechende ssh_configund 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_PATHund LD_PRELOADsind besonders gefährlich.
scpBei 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 sudofür die dargestellte Situation angemessen ist.