
Ich verwende ein Programm ( yay
, in Archlinux), das verwendet, sudo
um 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 sudo
installiert 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 yay
es 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 yay
Repo, 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 yay
das Programm selbst zu ändern, wäre ein Wrapper-Skript, das Sie als Root ausführen und das sudo
vor 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 su
zu 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/sudo
damit 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=su
Option zu verwenden.
tl;dr- laufen, yay --sudo=su -Syu
um den gewünschten Effekt zu erzielen.
Unten finden Sie eine Erklärung, warum yay --sudo=su
nicht das erwartete Ergebnis erzielt wurde.
Das Problem liegt an der Art und Weise, wie yay
CLI-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 -Syu
wird es ausgeführt (vollständige Systemaktualisierung), --sudo=su
zählt aber als Argument, sodass yay die -Y
Operation 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