sudo su 이후에 LS_COLORS를 유지하는 방법

sudo su 이후에 LS_COLORS를 유지하는 방법

내 컴퓨터에 사용자 이름을 만들고 해당 사용자 이름을 sudoers 파일에 추가하여 루트 액세스 권한을 얻었습니다.

.bashrc파일에는 PS1의 색상과 ls 명령의 색상을 변경하라는 스크립트도 포함되어 있습니다.

export PS1="\[\e[1;32m\][\u@\h \W]\$\[\e[0m\] "
export LS_COLORS="di=1:fi=0:ln=31:pi=5:so=5:bd=5:cd=5:or=31:mi=0:ex=35:*.rpm=90"

스크립트가 끝나면 명령을 사용하여 sudo su로그인 시 직접 루트 권한을 얻을 수도 있습니다.

문제는 PS1이 지속되고 이후에 색상이 변경되지만 sudo suls 명령은 기본 명령으로 유지된다는 것입니다. 이 문제를 어떻게 해결할 수 있나요?

답변1

sudo -l현재 유효한 옵션을 확인하려면 일반 사용자로 실행하세요 .

  • 출력에는 env_reset? 그렇다면 탐색하는 동안 안전하고 필요한 환경 변수 중 일부만 보존됩니다 sudo. 파일에서 env_check및/또는 env_keep키워드를 사용하여 sudoers통과할 수 있는 항목을 지정할 수 있습니다 sudo.

  • 출력에는 always_set_home? 그렇다면 $HOME환경 변수는 대상 사용자의 홈 디렉터리를 가리킵니다 /root. 따라서 결과 쉘은 개인 쉘 대신 실행되며 마찬가지로 모든 프로그램은 /root/.bashrc개인 홈 디렉토리 대신 디렉토리에서 사용자별 구성 파일을 찾습니다./root/

자신의 sudo -s루트 대신 루트를 사용 하면 작동할 가능성이 높습니다(또는 엄격한 PAM 모듈 등을 갖춘 이상한 배포판이 있습니다). 이 경우 sudoers 파일을 편집하고 다음 줄 중 하나를 추가합니다(옵션 이름 앞의 느낌표는 "no"를 의미함)..bashrcalways_set_homevisudo

  • Defaults !always_set_home모든 사용자에 대한 옵션을 설정 해제합니다.
  • Defaults>root !always_set_home원래 사용자에 관계없이 루트로의 모든 전환에 대해 설정을 해제합니다.
  • Defaults:johndoe !always_set_homejohndoe원래 사용자 만 포함하여 변환하려면 설정을 해제하세요 .

Defaults순서가 중요합니다. 마지막 설정이 우선하므로 파일에 기존 줄이 있으면 sudoers그 뒤에 사용자 정의 설정을 추가해야 합니다.


su이후에 연결 하면 sudo일반적으로 구성할 수 없는 자체 규칙이 적용됩니다. 동작(및 가용성)은 Linux 배포판과 버전에 따라 su -p다릅니다 .su -m

sudo su일반 사용자에서 루트로 전환한 다음 다시 루트에서 루트로 전환하여 세심하게 조정된 개인 환경 설정을 거의 효과 없이 깨뜨릴 가능성을 최대화한다는 의미입니다. 선호도와 Linux 배포판 선택에 따라 sudo -s파일에서 일부 옵션을 조정하거나 직접 Defaults동일한 목표를 달성 할 수 있습니다.sudoers

sudo su -, 반면에쓸모없는즉, "대상 사용자(예: 루트)가 직접 로그인한 것처럼 환경을 명시적으로 원합니다. 버전이 있는 경우 개인 환경의 흔적을 남기고 싶지 않습니다. sudo" 금세기에 출시된 이 sudo -i제품을 사용하면 이 목표를 달성할 수 있습니다.

2010년대에는 근육 기억을 사용하거나 sudo su, sudo su -오래된 조언을 따르거나, 정말 오래된 시스템을 다루었습니다. 아마도 이 두 명령을 잊어버려야 할 것입니다.

답변2

sudo su -p일부 예외를 제외하고 호출 사용자의 환경은 보존됩니다. 다음에서는 예외가 있을 수 있습니다.su매뉴얼 페이지, 그러나 관련 부분은 다음과 같습니다.

   -m, -p, --preserve-environment
          Preserve the entire environment, i.e. it does not set HOME,
          SHELL, USER nor LOGNAME.  This option is ignored if the option
          --login is specified.

관련 정보