Erlaube user1 "su - user2" ohne Passwort


51

Ich muss zulassen martin, dass Benutzer martin-testohne Kennwort zu Benutzer wechseln

su - martin-test

Ich denke, das kann in konfiguriert werden /etc/pam.d/su. In dieser Datei befinden sich bereits einige Zeilen, die nicht kommentiert werden können. Die Idee, Benutzer martinzu einer Gruppe hinzuzufügen, gefällt mir jedoch nicht wheel. Ich möchte nicht martinmehr Privilegien geben, als wechseln zu können martin-test. Ich möchte auch nicht verwenden sudo.

Was wäre der beste Weg, dies zu tun und gleichzeitig die Rechte des Benutzers martinminimal zu halten?


2
Dies ist einfacher mit sudoz sudo -u martin-test -i. Gibt es einen Grund, nach dem Sie speziell fragen su?
Jordan

Ich möchte nicht sudonur deswegen installieren (ich benutze es normalerweise nicht sudound es gefällt mir nicht besonders). Und ich denke, die Verwendung pamist sauberer und transparenter.
Martin Vegter

3
@MartinVegter Wie Sie aus der Antwort des Skripts ersehen können, ist es sehr hässlich, dies durch eine Art Pam-Mechanismus zu tun. Wirklich, genau dafür sudowar es gedacht. Abgesehen davon, dass Sie es normalerweise nicht verwenden, was sind die Einwände?
Patrick

1
Wenn eine saubere Lösung mit möglich ist pam, würde ich das vorziehen sudo. Wenn sudodie einzige Möglichkeit ist, ist das auch in Ordnung. Meine Einwände sudosind größtenteils ideologischer Natur: Mir gefällt die Idee nicht, dass Benutzer mit Administration arbeiten sudo foo. Wenn ich die Administration durchführen muss, melde ich mich als root an. Andernfalls melde ich mich als Benutzer an. Diese beiden unterschiedlichen Rollen sollten nicht gemischt werden. Außerdem habe ich bereits eine pamInfrastruktur installiert. Ich möchte kein anderes setuidProgramm installieren , das möglicherweise Sicherheitslücken enthält.
Martin Vegter

5
@MartinVegter Sie müssen keine sudo foospezifischen Befehle ausführen. Sudo hat sudo -seine Shell gestartet. sudo ist ein weit verbreitetes Dienstprogramm, das bedeutet, dass seine Sicherheit gründlich überprüft wurde, weit mehr als irgendein Pam-Trick. Ich würde auch argumentieren, dass das Abrufen einer Root-Shell für Aufgaben viel unsicherer ist als das Starten bestimmter Befehle. Wenn Sie eine Shell starten, führen Sie alles als root aus. Wenn eines dieser Dinge (wie ein einfaches ls) eine Sicherheitslücke aufweist, haben Sie gerade eine Sicherheitslücke geöffnet.
Patrick

Antworten:


61

Fügen Sie die folgenden Zeilen direkt unter der pam_rootok.soZeile in Ihrem ein /etc/pam.d/su:

auth  [success=ignore default=1] pam_succeed_if.so user = martin-test
auth  sufficient                 pam_succeed_if.so use_uid user = martin

Diese Zeilen führen Prüfungen mit dem pam_succeed_if.soModul durch. Weitere Informationen zu den authZeilen finden Sie auch in der Syntax der Linux-PAM-Konfigurationsdatei .

  • Die erste Zeile prüft, ob der Zielbenutzer ist martin-test. Wenn dies der Fall ist, passiert nichts ( success=ignore) und wir fahren in der nächsten Zeile fort, um den aktuellen Benutzer zu überprüfen . Ist dies nicht der Fall, wird die nächste Zeile übersprungen ( default=1) und die nachfolgenden Zeilen werden mit den üblichen Authentifizierungsschritten fortgesetzt.
  • Die zweite Zeile prüft, ob der aktuelle Benutzer ist martin. Wenn dies der Fall ist, betrachtet das System den Authentifizierungsprozess als erfolgreich und gibt ( sufficient) zurück. Ist dies nicht der Fall, passiert nichts und wir fahren in den folgenden Zeilen mit den üblichen Authentifizierungsschritten fort.

Sie können auch einschränken suzu einer Gruppe, hier die Gruppe allowedpeoplekann suohne Passwort:

auth sufficient pam_succeed_if.so use_uid user ingroup allowedpeople

1
Wenn Sie autorisieren möchten, ob sie zu einer bestimmten Gruppe gehören: auth enough pam_succeed_if.so user ingroup GROUP
shrimpwagon

@gnp Super Danke !! Wenn Sie mit nrpe an iCinga arbeiten, müssen Sie einen Befehl als anderer Benutzer ausführen !! Hat viel geholfen !!!!!! Vielen Dank!!!!!
Saravanakumar

@ GnP Bitte helfen Sie mir auf askubuntu.com/questions/821793/…
Nullpointer

Es wäre schön, Informationen darüber hinzuzufügen, wie die Änderungen ebenfalls angewendet werden.
Kyslik

@Kyslik was meinst du? Die Anweisungen zum Bearbeiten der erforderlichen Dateien finden Sie in der Antwort ...
GnP

12

Wenn Sie keine Gruppen ändern oder verwenden möchten sudo, verwenden Sie ein Pam-Modul, das aufgerufen wird pam_exec, um externe Skripts in einer Pam-Phase auszuführen.

Fügen Sie /etc/pam.d/sunach der pam_rootok.soZeile eine Zeile ein :

auth       sufficient pam_exec.so quiet /path/to/script

/path/to/script hat die Berechtigungen 755 (rwxr-xr-x) und den folgenden Inhalt:

#!/bin/bash
if [ "$PAM_TYPE" == "auth" ] && \
[ "$PAM_USER" == "martin-test" ] && \
[ "$PAM_RUSER" == "martin" ]; then
  exit 0
else
  exit 1
fi

Dieses Skript existiert also mit Erfolg, wenn su:

  • wird im Rahmen der Authentifizierung aufgerufen,
  • der anrufende Benutzer ist martinund
  • der zu authentifizierende Benutzer ist martin-test.

Sehen:

martin@host:~$ su - martin-test
martin-test@host:~$ exit
martin@host:~$ su - otheruser
Password: ****
otheruser@host:~$ 

1
pam_access kann verwendet werden, um ähnliche Funktionen bereitzustellen, ohne auf ein Skript angewiesen zu sein. (Dies ist, was pam_access gemacht wurde, um zu tun)
jsbillings

1
@jsbillings Würdest du das (mit ein paar Details) nochmal beantworten?
Hauke ​​Laging

1
Wie müsste ich meine anpassen /etc/pam.d/su, um sie pam_accessfür meine Situation zu nutzen?
Martin Vegter

3
@jsbillings Kann das eigentlich pam_accessnicht. Wenn suder Pam-Stack durchlaufen wird, geschieht dies als der Benutzer, zu dem Sie wechseln, und nicht als der Benutzer, von dem Sie wechseln. Also , wenn Sie eine Regel wie hinzufügen + : martin : ALL, wird es ermöglichen , jemand Wechsel zu martin . Auch wenn Sie zu wechseln martin, martin-testlässt es trotzdem jeden zu. Sie müssen sowohl den Benutzer analysieren, von dem Sie kommen, als auch den Benutzer, zu dem Sie wechseln. Wirklich, das ist genau das, was sudofür ...
Patrick

0

Wenn Sie keinen Zugriff auf das Root-Konto haben, aber das Kennwort des Benutzers haben, den Sie zum Ausführen eines Befehls verwenden möchten, können Sie Folgendes tun.

  • Dies fragt Sie nach dem Passwort des Totos: su - toto -c whoami
  • Dies wird nicht: ssh toto @ localhost whoami

Installieren Sie einfach Ihren öffentlichen Schlüssel in authorized_keys von toto


Nachdenkliche Antwort. Der Befehl, den jemand ausführen möchte, ist jedoch bereits auf dem Computer vorhanden. Es hat also keinen Sinn, auf denselben Server zuzugreifen.
Raja Anbazhagan

-1

Meine einfache Lösung lautet:

sudo login -f martin-test

Wenn Sie sudo um jeden Preis vermeiden möchten, sollte es meiner Meinung nach möglich sein, dies in ein Skript einzufügen:

  1. im Besitz von root und mit root-Rechten (mit dem setuid- Flag)
  2. von jedermann ausführbar, auch ohne sudo.

Ich kann jedoch die chown rootund chmod +s ToTest.shBits nicht herausfinden , damit dies tatsächlich funktioniert:

#!/usr/bin/env bash
echo howdy, I am $(whoami)
sudo login -f martin-test

Ich laufe immer noch wie mein normaler Benutzer, wie das Echo mir sagt. Und es erfordert immer noch sudo Passwort. Wenn es als root laufen würde, könnte man das sudoin der letzten Zeile beseitigen ...


Das setuid-Flag in einem Shell-Skript (oder einem anderen Skript) funktioniert unter Linux aus guten Gründen nicht. Beachten Sie, dass das obige Skript mit einer funktionierenden suid-Flagge sofort eine Falle wäre: Es aktiviert die Bash-Funktion über "env" (ziemlich selbstzerstörerisch, denn wenn Sie annehmen, dass Sie nicht wissen, wo sich bashbefindet, warum nehmen Sie an, dass Sie wissen, wo envsich oder befindet ob es überhaupt existiert?). Aber am Ende wissen Sie nicht genau, was bashdas sein wird. Es könnte aus dem Verzeichnis des aufrufenden Benutzers stammen und eine Minute zuvor aus seinem Quellcode kompiliert worden sein. Sie sehen, wohin ich gehe? Oder der Benutzer könnte überschreiben whoami...
David Tonhofer

Mein Gehirn ist derzeit zu weit von diesen Themen entfernt, um sie vollständig zu erfassen, aber ich danke Ihnen für die detaillierten Erklärungen.
Frank Nocke
Durch die Nutzung unserer Website bestätigen Sie, dass Sie unsere Cookie-Richtlinie und Datenschutzrichtlinie gelesen und verstanden haben.
Licensed under cc by-sa 3.0 with attribution required.