루트 액세스가 필요한 Linux 명령은 어떻게 결정됩니까?

루트 액세스가 필요한 Linux 명령은 어떻게 결정됩니까?

루트 액세스가 필요한 Linux 명령은 어떻게 결정됩니까? apt-get권한을 요구하는 것이 왜 바람직한지 이해합니다 root. 하지만 이 명령은 다른 명령과 어떻게 다릅니까? 이것은 실행 파일에 대한 소유권과 실행 권한의 문제입니까?

답변1

이는 대부분 도구 또는 프로그램 문제입니다.하다. 슈퍼유저가 아닌 사람은 자신이 소유하거나 액세스할 수 있는 파일, 해당 파일에 액세스하는 데 필요한 모든 도구만 만질 수 있다는 점을 기억하세요.모든 것해당 작업을 수행하려면 슈퍼유저 액세스가 필요합니다. 슈퍼유저 액세스가 필요할 수 있는 사항의 간단한 예는 다음과 같습니다(단, 이에 국한되지는 않음).

  • 1024보다 낮은 포트에서 수신 TCP 소켓을 엽니다.
  • 시스템 구성 변경(예: 모든 항목 /etc)
  • /lib전역적으로 액세스 가능한 새로운 라이브러리( 및 /usr/lib) 또는 바이너리( /bin, /usr/bin) 추가
  • 해당 파일을 터치하는 사용자의 소유가 아니며 충분한 권한 모드가 없는 파일을 터치합니다.
  • 다른 사용자의 파일 소유권 변경
  • 프로세스 우선순위 높이기(예 renice: )
  • 대부분의 서비스 시작 또는 중지
  • 커널 구성(예: 스왑성 조정)
  • 파일 시스템 할당량 조정
  • "전체" 디스크에 쓰기(대부분의 파일 시스템은 루트 사용자를 위해 일부 공간을 예약함)
  • 다른 사용자와 마찬가지로 작업 수행

답변2

Linux에서는 루트 권한이 "기능"으로 나누어졌으므로 이 문서를 확인하면 루트의 특수 권한 전체 목록을 얻을 수 있습니다.man 7 capabilities.

질문에 답하려면 명령에 이러한 권한 중 하나가 필요한 경우 루트로 실행해야 하며 비스크립트 실행 파일의 파일 메타데이터에 관련 기능이 설정되어 있지 않습니다(예: Python 스크립트에 해당 기능이 필요한 경우 함수는 shebang 줄에 지정된 Python 인터프리터에 있어야 합니다.

sudo루트 액세스가 필요한 일부 명령에는 실행 파일에 SUID 비트가 설정되어 있기 때문에 이와 같은 것이 필요하지 않습니다 . 이 비트를 사용하면 실행 액세스 권한이 있는 사람이 실행 파일을 실행할 때 실행 파일이 소유자(일반적으로 루트)로 실행됩니다. sudo사용자를 변경하는 것은 수행해야 하는 권한 있는 작업이기 때문에 그 자체를 예로 들 수 있습니다 .

편집: 귀하의 질문에서 명령을 실행하기 전에 명령에 루트 액세스가 필요한지 결정할 수 있다고 생각할 수도 있다는 것을 알았습니다. 그러나 실제로는 그렇지 않습니다. 프로그램에는 때로는 루트 권한이 필요할 수도 있고 때로는 필요하지 않을 수도 있으며, 이는 프로그램이 런타임 시 제공되는 데이터를 기반으로 내리는 결정일 수 있습니다. 예를 들어 인수 없이 이와 같이 호출 vim한 다음 일련의 키 입력 및 붙여넣기를 통해 쓰기 권한이 없는 파일에 무언가를 쓰거나 루트 권한이 필요한 다른 명령을 실행하도록 지시합니다. . 실행 전에는 명령에 루트 액세스가 필요하다는 내용이 전혀 없습니다. 이는 루트 액세스가 필요한 작업을 수행하려는 경우에만 확인할 수 있습니다.

어쨌든, 루트 권한이 있는 참조 매뉴얼 페이지의 몇 가지 예는 다음과 같습니다.

  • 프로세스 UID(setuid(2), setreuid(2), setresuid(2), setfsuid(2))에 대해 임의 작업을 수행합니다.
  • 파일 읽기, 쓰기 및 실행 권한 검사를 우회합니다. (DAC는 Discretionary Access Control의 약자입니다.)
  • 신호 전송에 대한 권한 확인을 우회합니다(kill(2) 참조). 여기에는 ioctl(2) KDSIGACCEPT 작업 사용이 포함됩니다.
  • 다양한 네트워크 관련 작업을 수행합니다.
    • 인터페이스 구성;
    • IP 방화벽, 위장 및 청구 관리;
    • 라우팅 테이블을 수정합니다.
  • 소켓을 인터넷 도메인 권한 포트(1024 미만의 포트 번호)에 바인딩합니다.
  • 커널 모듈 로드 및 언로드(init_module(2) 및 delete_module(2) 참조)
  • 시스템 시계를 설정합니다(settimeofday(2), stime(2), adjtimex(2)). 실시간(하드웨어) 시계를 설정합니다.
  • quotel(2), mount(2), umount(2), swapon(2), swapoff(2), sethostname(2) 및 setdomainname(2)을 포함한 일련의 시스템 관리 작업을 수행합니다.
  • 재부팅(2) 및 kexec_load(2)를 사용하십시오.
  • chroot(2)를 사용하십시오.
  • 프로세스의 nice 값(nice(2), setpriority(2))을 늘리고 모든 프로세스의 nice 값을 변경합니다.

답변3

권한을 순차적으로 나누는 것이 아니라 사용자의 신원을 기준으로 권한을 검증한다고 생각합니다. 파일과 사용자에게는 권한이 부여되며 명령은 분할되어서는 안 됩니다.

관련 정보