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.