sudo su -

agnusdei·2025년 11월 10일

CTF

목록 보기
168/185

쉘(Shell)의 종류와 su의 작동 방식

리눅스 시스템에서 쉘(Shell)은 사용자가 운영체제와 상호작용할 수 있도록 해주는 프로그램입니다. 쉘은 크게 두 가지 방식으로 실행됩니다.


1. 비-로그인 쉘 (Non-Login Shell) : su

su 명령어 뒤에 아무것도 붙이지 않고 su만 사용할 경우, 기본적으로 비-로그인 쉘로 동작합니다.

  • 동작 방식: 현재 실행 중인 쉘 내부에서 대상 사용자(root)로 신분만 전환합니다.
  • 환경 설정 로드:
    • $HOME 디렉토리는 전환하지 않고 현재 사용자의 디렉토리에 남아있을 수 있습니다.
    • root 계정이 로그인할 때 필요한 시스템 환경 설정 파일 (예: /etc/profile)이나 root 계정 고유의 사용자 설정 파일 (예: ~/.bash_profile, ~/.bashrc)로드하지 않습니다.
  • 결과: 사용자 신분은 root이지만, 쉘 환경 자체는 여전히 이전 사용자(ubuntu)의 설정을 많이 물려받게 되어 root의 표준 환경이 갖춰지지 않습니다.
  • 문제 발생 예시: 시스템 전체에 설치된 중요한 실행 파일의 경로가 $PATH 환경 변수에 포함되지 않아, root 권한으로 실행해야 하는 스크립트가 "명령어를 찾을 수 없다"는 오류를 낼 수 있습니다.

예시: ubuntu 사용자가 suroot가 되었을 때, echo $HOME을 해보면 여전히 /home/ubuntu가 출력될 수도 있습니다.


2. 로그인 쉘 (Login Shell) : su - 또는 sudo su -

su 명령어 뒤에 하이픈(-)을 붙여 su -를 사용하면, 대상 사용자(root)로 로그인 쉘을 실행하도록 지시합니다.

  • 동작 방식: 대상 사용자가 처음부터 새로 로그인한 것과 완전히 동일하게 쉘을 초기화합니다.
  • 환경 설정 로드:
    • $HOME 디렉토리가 대상 사용자(root)의 홈 디렉토리인 /root완벽하게 변경됩니다.
    • 시스템 전체 설정 파일대상 사용자(root) 고유의 모든 설정 파일을 순서대로 로드하여 환경 변수($PATH, $HOME 등)를 완벽하게 초기화하고 설정합니다.
  • 결과: 현재 사용자의 지저분하거나 불완전한 환경 변수로부터 완전히 독립된, 표준적인 root 환경이 보장됩니다.
  • 안정적인 설치: Dokploy(독플로이)와 같은 시스템 관리 및 소프트웨어 설치 스크립트는 이러한 표준화된 환경을 기대하고 작성되므로, su -를 통해 실행할 때 가장 오류 없이 안정적으로 작동할 수 있습니다.

결론적으로, 시스템 관리나 설치 작업을 할 때는 완벽한 환경을 보장하는 로그인 쉘(su -) 방식을 사용하는 것이 업계 표준이며 가장 안전한 방법입니다.

profile
DevSecOps, Pentest, Cloud(OpenStack), Develop, Data Engineering, AI-Agent

0개의 댓글