sudo -i가 오류를 반환합니다.

sudo -i가 오류를 반환합니다.

루트를 사용하여 전환하려고 하면 sudo -i오류가 발생 /var/tmp/sclDvf3Vx: line 8: -i: command not found하지만... su -계속 사용할 예정입니다. 저는 결코 Linux 시스템 관리자가 아니기 때문에 환경이 여전히 모호합니다. 내 질문은 다음과 같습니다.

  1. 오류가 발생하는 이유는 무엇입니까?
  2. 이 두 명령의 차이점은 무엇입니까?
  3. 왜 다른 것을 사용합니까?

고쳐 쓰다:

저는 CentOS 버전을 사용하고 있습니다: CentOS 버전 6.6(최종)

이것은 아래 설명에서 실행하도록 요청받은 일부 명령의 출력입니다.

  • 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

고쳐 쓰다:

C++11 지원이 필요했기 때문에 루트가 아닌 사용자의 ~/.bashrc에 얼마 전에 추가되었습니다. 주석 처리하고 ssh를 다시 실행하면 오류 없이 sudo -i를 실행할 수 있습니다.

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

답변1

의견과 추가 조사에 따르면 개발 도구 세트가 수정되고 있는 것으로 보입니다 PATH. 불행하게도 여기에는 오래되었거나 손상된 것으로 보이는 sudo 명령이 포함되어 있습니다.

.bashrc개발 도구 세트를 다음과 같이 수정하고 다시 로그인해 보는 것이 좋습니다 .

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

답변2

SCL의 손상된 sudo 래퍼를 해결하는 대신 비활성화했습니다.

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

파일 끝에 줄 바꿈을 추가하면 후속 Yum 업데이트로 덮어쓰지 않고 실행 불가능하게 됩니다.

RHEL 6에서 최신 버전의 gcc 및 C++를 얻기 위해 개발 도구 세트를 설치했으며 가짜 sudo를 혼합하지 않고 코드를 컴파일하는 데 문제가 없었습니다.

답변3

sudo -Edevtoolset-4를 사용한 후 비슷한 플래그 문제가 발생했습니다. 이 경우 -E플래그는 /opt/rh/devtoolset-4/root/usr/bin/sudo래퍼 스크립트에 추가 되므로 추가해서는 안 됩니다 . 해당 내용은 다음과 같습니다.

#! /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"

답변4

이는 RedHat에 보고되었습니다.BZ1319936devtoolset devtoolset-9-9.0-3.el7에서 수정되었습니다(RHEA-2019:4132).

관련 정보