Sudo kann keine symbollisch verknüpften ausführbaren Dateien im Pfad sehen

677
StudentsTea

Auf CentOS 7 habe ich einige ausführbare Dateien in installiert /opt/app-version/bin/executable. Diese ausführbaren Dateien haben die folgenden Berechtigungen:

rwxrwxr-x. 500 500

Das Eigentum an jedem Verzeichnis in dem Pfad /opt/app-version/bin/ist 500 500--except /opt, das ist root root.

Meine erste Frage: Was ist das für ein 500 500Geschäft? Wenn ich die ausführbaren Dateien installiert habe sudo, sollten Eigentümer und Gruppe nicht sein root?

Ich habe den folgenden Befehl als root ausgeführt, um symbolische Links zu den ausführbaren Dateien in zu erstellen /usr/local/bin/:

ln /opt/app-version/bin/executable /usr/local/bin/executable --symbolic

Ich kann executableals normaler Benutzer von der Befehlszeile aus arbeiten, aber nicht als normaler Benutzer sudo.

Laufen sudo executablekehrt zurück sh: executable: command not found.

Laufen sudo echo $PATHzeigt, dass /usr/local/bin/in ist $PATHfür sudo - Umgebungen. (Oder geht es? Werden mir die Inhalte $PATHfür die Superuser-Umgebung oder $PATHfür die Umgebung des angerufenen Benutzers sudoangezeigt? Erstellt CentOS eine neue Umgebung für die Ausführung von Befehlen sudo, oder führt der Befehl nur in der Umgebung des Aufrufers aus? )

Beim Ausführen wird sudo ls -la /usr/local/bin/executableeine Auflistung für executablein /usr/local/bin/mit Eigentum zurückgegeben lrwxrwxrwx. 1 root root. (Erstellt ln --symbolicwirklich global bearbeitbare Links standardmäßig? Ist das nicht eine schreckliche Idee?) Nach meinem Verständnis sudo sollten diese Shows ausgeführt werden können executable.

Was vermisse ich?

0

1 Antwort auf die Frage

0
AFH

Wenn Sie sich zuerst das 500 500ansehen, wird tarder Besitzer und die Gruppe (unter anderem) aus dem Archiv wiederhergestellt, auf dem System, auf dem das Archiv erstellt wurde: Ich vermute, dass das Installationsprogramm dies tut und ob der wiederhergestellte Benutzer oder die wiederhergestellte Gruppe dies nicht tut Wenn Ihr System vorhanden ist, wird der numerische Wert angezeigt.

Wenn PATHich mir jetzt das anschaue, habe ich dies auf Ubuntu reproduziert, und es scheint, als würde sich das sudoändernPATH : In Ihrem Befehl wurde sudo echo $PATHdie PATHVariable vor dem Aufruf in der ursprünglichen Shell erweitert sudo. Es gibt eine Datei /etc/sudoersmit einem Eintrag "defaults secure_path="...", und dies scheint, was verwendet wird.

Wenn Sie verwenden, erhalten sudo sh -c 'echo $PATH'Sie eine bessere Vorstellung von der PATHVerwendung. Beachten Sie, dass ich absichtlich shanstelle von bashverwendet habe, um einige der Initialisierungsdateien zu umgehen, was die Dinge ändern kann, obwohl shes natürlich einige eigene Dateien gibt .

Auf Ubuntu enthält die secure_pathZeile zwar /user/local/bin, aber CentOS kann sich unterscheiden (beide sind von Debian abgeleitet, können aber laut man sudoersSELinux einige Einträge überschreiben). Soweit ich sehen kann, haben Sie mindestens vier Möglichkeiten: -

  • Ändern Sie secure_pathden Eintrag so, dass er / usr / local / bin enthält.
  • Fügen Sie den Link in eines der in definierten Verzeichnisse ein secure_path.
  • Verwenden Sie su -c " "statt sudo .
  • Verwenden Sie sudo -sdiese Option, um ein Stammverzeichnis bashmit derselben PATHInitialisierung wie die ursprüngliche Shell zu erhalten. Rufen Sie dann Ihre ausführbare Datei auf und beenden Sie sie anschließend.

Ich habe hier auch viele Diskussionen und andere mögliche Lösungen gefunden .

Es gibt keine privaten Nachrichtenfunktionen in StackExchange, von denen ich weiß, dass ich sie hier schreibe: Nachdem ich gerade Ihr Benutzerprofil durchgelesen hatte, dachte ich, dass Leute wie Sie wahrscheinlich nicht oft genug erfahren werden, wie viele Leute Ich schätze es sehr, Sie in beruflichen Zusammenhängen zu treffen. Hut ab für deine Erfahrung und Unterstützung! Wenn ich statt in LA in Großbritannien wäre, würde die erste Runde auf mich zutreffen. Gruß! ( Und danke ) StudentsTea vor 8 Jahren 0