sudo -i gibt einen Fehler zurück


11

Wenn ich versuche, mit root zu root zu wechseln, sudo -ierhalte ich die Fehlermeldung /var/tmp/sclDvf3Vx: line 8: -i: command not found... Funktioniert jedoch, su -die ich weiterhin verwenden werde. Ich bin auf keinen Fall ein Linux-Systemadministrator, daher ist die Umgebung für mich immer noch ziemlich neblig. Ich denke meine Fragen sind:

  1. Warum wird der Fehler ausgelöst?
  2. Was ist der Unterschied zwischen den beiden Befehlen?
  3. Warum würden Sie eins über das andere verwenden?

Aktualisieren:

Ich verwende die CentOS-Version: CentOS Release 6.6 (Final)

Hier ist die Ausgabe einiger Befehle, die ich ausführen soll, in den Kommentaren unten.

  • type sudo :: sudo is /opt/centos/devtoolset-1.1/root/usr/bin/sudo
  • sudo -V :: /var/tmp/sclIU7gkA: line 8: -V: command not found
  • grep'^root:' /etc/passwd :: root:x:0:0:root:/root:/bin/bash

Aktualisieren:

Dies wurde vor einiger Zeit zu ~ / .bashrc meines Nicht-Root-Benutzers hinzugefügt, da ich C ++ 11-Unterstützung benötigte. Wenn ich es auskommentiere, re-ssh in, kann ich sudo -i ohne Fehler ausführen.

if [ "$(gcc -dumpversion)" != "4.7.2" ]; then 
  scl enable devtoolset-1.1 bash
fi

Sind Sie sicher, dass das -wirklich ein (ASCII) ist -?
— Steeldriver

1
Hat jemand eine aliasfür Ihren sudoBefehl erstellt?
— garethTheRed

2
Ok, Sie haben also einen lokalen Befehl namens, sudoder nicht der normale sudo-Befehl ist. Da es die Optionen von sudo nicht versteht, ist es eindeutig keine Standardsache. Verwenden Sie /usr/bin/sudoentweder Ihre lokalen Administratoren oder fragen Sie sie (die Ihnen das wirklich hätten sagen sollen, als sie Ihnen Sudo-Befugnisse verliehen haben).
— Gilles 'SO - hör auf böse zu sein'

4
Ich stimme dafür, diese Frage als nicht zum Thema gehörend zu schließen, da es sich um ein unbekanntes, wahrscheinlich selbst entwickeltes Programm handelt, bei dem das Internet nicht helfen kann.
— Gilles 'SO - hör auf böse zu sein'

3
Ich glaube nicht, dass dies einheimisch ist, es ist CentOS 'Version des RH Developer Toolset : people.centos.org/tru/devtools-1.1 . Vermutlich weiß jemand im Internet davon.
— Michael Homer

Antworten:


6

Aus den Kommentaren und Ihren weiteren Untersuchungen geht hervor, dass Ihr devtoolset das ändert PATH. Leider schließt dies einen scheinbar alten oder kaputten Sudo-Befehl ein.

Es lohnt sich zu versuchen, das devtoolset-Include in Ihrem .bashrcBeispiel so zu ändern und sich dann erneut anzumelden :

if [ "$(gcc -dumpversion)" != "4.7.2" ]; then 
  scl enable devtoolset-1.1 bash
  PATH=/usr/bin:$PATH    # We need a working sudo
fi

2

Anstatt den kaputten Sudo-Wrapper der SCL zu umgehen, habe ich ihn einfach deaktiviert.

echo >> /opt/rh/devtoolset-2/root/usr/bin/sudo
chmod -x /opt/rh/devtoolset-2/root/usr/bin/sudo

Durch Hinzufügen einer neuen Zeile am Ende der Datei wird sichergestellt, dass sie nicht durch nachfolgende Yum-Updates überschrieben wird. Dann mache ich sie einfach nicht ausführbar.

Ich habe das Dev-Toolset installiert, um moderne Versionen von gcc und c ++ auf RHEL 6 zu erhalten, und hatte keine Probleme beim Kompilieren von Code ohne das gefälschte Sudo im Mix.


1

Ich hatte ähnliche Probleme mit sudo -EFlag, nachdem ich devtoolset-4 verwendet hatte. -EIn diesem Fall sollten Sie kein Flag hinzufügen , da es im /opt/rh/devtoolset-4/root/usr/bin/sudoWrapper-Skript hinzugefügt wird. Hier ist der Inhalt davon:

#! /bin/sh
# TODO: parse & pass-through sudo options from $@
sudo_options="-E"

for arg in "$@"
do
   case "$arg" in
    *\'*)
      arg= ;;
   esac
   cmd_options="$cmd_options '$arg'" 
done
exec /usr/bin/sudo $sudo_options LD_LIBRARY_PATH=$LD_LIBRARY_PATH PATH=$PATH scl enable devtoolset-4 "$cmd_options"
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.