Führen Sie den Befehl aus, während Sie ihn glauben lassen, dass „sudo“ nicht existiert

Führen Sie den Befehl aus, während Sie ihn glauben lassen, dass „sudo“ nicht existiert

Ich verwende ein Programm ( yay, in Archlinux), das verwendet, sudoum Berechtigungen zu erhöhen. Wenn es jedoch nicht findet sudo, wechselt es zu su, was ich auch möchte, da mein Benutzer kein Sudoer ist, ich aber installiert habe sudo(weil es ein anderes Programm gibt, das sudoinstalliert werden muss, selbst wenn es als Root ausgeführt wird, ich weiß, dass das albern ist).

Nun stellt sich die Frage, wie ich dieses Programm ( yay) ausführen und gleichzeitig glauben machen kann sudo, dass es nicht existiert?

Beachten Sie, dass yayes sich um einen Paketmanager (AUR-Helfer) handelt, der auch Pakete aus der Quelle erstellt und installiert. Aus Sicherheitsgründen können Sie diese Builds nicht als Root durchführen, was aber fair genug ist.

Beachten Sie auch, dass ich bereits ein Problem eröffnet habeHierim yayRepo, aber während das behoben wird, wäre ich für eine alternative Lösung dankbar.

Antwort1

Die einzige Problemumgehung, die mir einfällt, ohne yaydas Programm selbst zu ändern, wäre ein Wrapper-Skript, das Sie als Root ausführen und das sudovor dem Start vorübergehend entfernt wird yay:

#!/bin/sh

su -c "mv /sbin/sudo /sbin/sudo.old" && yay "$@"
su -c "mv /sbin/sudo.old /sbin/sudo"

Allerdings werden Sie dann zweimal nach dem Root-Passwort gefragt. Eine andere Möglichkeit besteht darin, das Skript einfach als Root auszuführen und dann im Skript suzu einem anderen Benutzer zu wechseln:

#!/bin/sh

normalUser="$1"
shift

mv /sbin/sudo /sbin/sudo.old &&
su -c "yay $@" $normalUser
mv /sbin/sudo.old /sbin/sudo

Sie würden dies dann wie folgt ausführen:

su -c "/path/to/yay.wrapper.sh adrin $yayArguments" 

Dies sollte in Ihrem Fall sicher sein, da Sie es nicht wirklich verwenden sudo. Ich würde jedoch trotzdem eine Kopie von erstellen, /sbin/sudodamit Sie es leicht zurückbekommen, wenn etwas schief geht, nur für den Fall.

Antwort2

Der einfachste Weg, dieses Problem zu umgehen, besteht darin, diese --sudo=suOption zu verwenden.

tl;dr- laufen, yay --sudo=su -Syuum den gewünschten Effekt zu erzielen.

Unten finden Sie eine Erklärung, warum yay --sudo=sunicht das erwartete Ergebnis erzielt wurde.


Das Problem liegt an der Art und Weise, wie yayCLI-Argumente verarbeitet werden. Aus den Dokumenten:

If no arguments are provided 'yay -Syu' will be performed.

If no operation is selected -Y will be assumed.

Wenn keine Argumente angegeben werden, yay -Syuwird es ausgeführt (vollständige Systemaktualisierung), --sudo=suzählt aber als Argument, sodass yay die -YOperation auswählt (Liste der Pakete, die der Abfrage entsprechen, die in diesem Fall leer ist, weshalb der Befehl sofort beendet wird).

Hier ist der dafür verantwortliche Codeabschnitt:https://github.com/Jguer/yay/blob/next/pkg/settings/parser/parser.go#L618

verwandte Informationen