sudo -i renvoie une erreur

11

Lorsque j'essaie de passer en root en utilisant sudo -ij'obtiens l'erreur /var/tmp/sclDvf3Vx: line 8: -i: command not found... Cependant, su -fonctionne que je continuerai à utiliser. Je ne suis en aucun cas un administrateur système Linux, donc l'environnement est encore assez brumeux pour moi. Je suppose que mes questions sont:

  1. Pourquoi l'erreur est-elle lancée?
  2. Quelle est la différence entre les deux commandes?
  3. Pourquoi voudriez-vous utiliser l'un sur l'autre?

Mise à jour:

J'utilise la version CentOS: CentOS version 6.6 (Final)

Voici la sortie de certaines commandes qu'on m'a demandé d'exécuter, dans les commentaires ci-dessous.

  • 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

Mise à jour:

Cela a été ajouté au ~ / .bashrc de mon utilisateur non root il y a quelque temps parce que j'avais besoin du support C ++ 11. Lorsque je le commente, le ressaisit, je peux exécuter sudo -i très bien sans aucune erreur.

if [ "$(gcc -dumpversion)" != "4.7.2" ]; then 
  scl enable devtoolset-1.1 bash
fi
th3v0id
la source
Êtes-vous sûr que -c'est vraiment un (ASCII) -?
steeldriver
1
Quelqu'un at-il créé un aliaspour votre sudocommande?
garethTheRed
2
Ok, vous avez donc une commande locale appelée sudoqui n'est pas la commande sudo normale. Étant donné qu'il ne comprend pas les options de sudo, ce n'est clairement pas quelque chose de standard. Utilisez /usr/bin/sudoou demandez à vos administrateurs locaux (qui auraient vraiment dû vous en parler lorsqu'ils vous ont donné des pouvoirs sudo).
Gilles 'SO- arrête d'être méchant'
4
Je vote pour clore cette question comme hors sujet car elle concerne un programme inconnu, probablement local, auquel Internet ne peut pas aider.
Gilles 'SO- arrête d'être méchant'
3
Je ne pense pas que ce soit du tout fait maison, c'est la version CentOS de RH Developer Toolset : people.centos.org/tru/devtools-1.1 . Vraisemblablement, quelqu'un sur Internet le sait.
Michael Homer

Réponses:

6

D'après les commentaires et vos investigations, il semble que votre devtoolset modifie le PATH. Malheureusement, cela inclut ce qui semble être une commande sudo ancienne ou cassée.

Il vaudrait la peine d'essayer de modifier le devtoolset inclure dans votre .bashrccomme ceci, puis de vous reconnecter:

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

Plutôt que de contourner le sudo wrapper cassé du SCL, je l'ai juste désactivé.

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

L'ajout d'une nouvelle ligne à la fin du fichier garantit qu'il ne sera pas écrasé par les mises à jour Yum suivantes, puis je le rendrai non exécutable.

J'ai installé le jeu d'outils de développement pour obtenir des versions modernes de gcc et c ++ sur RHEL 6, et je n'ai eu aucun problème à compiler du code sans le faux sudo dans le mix.

miken32
la source
1

J'ai eu des problèmes similaires avec sudo -Eflag après avoir utilisé devtoolset-4. Vous ne devez pas ajouter d' -Eindicateur dans ce cas, car il est ajouté dans le /opt/rh/devtoolset-4/root/usr/bin/sudoscript wrapper, en voici le contenu:

#! /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"
Vadim Kotov
la source