소유자 / 루트와 RUID / EUID의 차이점


24

나는 질문에서 언급 된 개념에 대해 비교적 익숙하지 않으며 다른 출처에서 읽은 개념을 더 혼란스럽게 만듭니다. 이것이 내가 지금까지 이해 한 것입니다.

파일에 대한 권한이 주어지면 다음과 같습니다.

-rwsr-xr-- 1 user1 users 190 Oct 12 14:23 file.bin

user2그룹에 속한 사용자 users가 실행을 시도 한다고 가정합니다 file.bin. setuid 비트가 설정되지 않은 경우 이는의 RUID와 EUID가 file.bin모두 UID와 같습니다 user2. 그러나 setuid 비트가 설정되었으므로 RUID는 이제 UID와 같고 user2EUID는 파일 소유자의 UID입니다 user1.

내 질문은 :

  1. 파일 소유자와의 차이점은 무엇입니까 root? 않습니다 root소유자와 동일한 권한을 가지고? 또는에 대한 권한 목록에 별도의 항목이 필요 root합니까?
  2. RUID와 EUID의 차이점은 무엇입니까?
    • 내가 이해하는 것처럼 RUID와 EUID는 프로세스에만 적용됩니다. 이 경우 왜 사용자 ID의 가치가 있습니까?
    • RUID가 프로세스를 작성하는 사용자이고 EUID가 현재 프로세스를 실행중인 사용자 인 경우이 질문 의 첫 번째 답변의 첫 번째 문장이 의미가 없습니다.
    • setuid 비트의 기능을 올바르게 이해 했습니까?

답변:


35

답은 다음과 같습니다.

  1. root항상이 전체 파일 및 디렉토리에 대한 액세스를. 파일의 소유자도 보통 가지고 있지만 항상 그런 것은 아닙니다. 예를 들면 다음과 같습니다.

    -r-xr----- 1 user1 users 199 Oct 14 18:42 otherfile.bin
    

    user1는 IS 소유자 ; 그러나 읽기실행 만 가능 하지만 파일에 root대한 모든 액세스 권한 ( rwx ) 은 여전히 ​​있습니다 .

  2. RUID는 실제 사용자 ID 이며 거의 변경되지 않습니다. user2시스템에 로그인 하면 실제 ID가로 설정된 쉘이 시작됩니다 user2. 쉘에서 시작하는 모든 프로세스는 실제 ID user2를 실제 ID 로 상속합니다 .

    EUID는 유효 사용자 ID 이며 setuid 비트를 설정 한 사용자가 실행하는 프로세스 (사용자가 아닌)에 따라 변경됩니다 .

    경우 user2가 실행 file.bin의 RUID가 될 것입니다 user2및있을 것입니다 시작 프로세스의 EUID user1.

의 경우를 사용합시다 passwd:

-rwsr-xr-x 1 root root 45396 may 25  2012 /usr/bin/passwd
  • user2원하는 암호를 변경 , 그들은 실행 /usr/bin/passwd.

  • RUID는 유지 user2되지만 해당 프로세스의 EUID는입니다 root.

  • user2내부적 으로 RUID를 확인 하기 때문에 자신의 비밀번호 passwd 변경 하는 데 사용할 수 있으며 그렇지 않은 경우 해당 조치는 실제 사용자 비밀번호로 제한됩니다.passwdroot

  • 그것은 EUID가 될 것으로 neccesary의 root의 경우 passwd공정이 필요하기 때문에에 쓰기/etc/passwd및 / 또는 /etc/shadow.


고맙습니다! 이제 모든 것이 더 분명합니다. 그래도 질문이 하나 더 있습니다. EUID는 사용자가 setuid 비트가 설정된 프로세스를 실행할 때만 변경됩니까? 아니면 다른 상황에서도 변할 수 있습니까? 그렇다면 그 상황은 무엇입니까?
user1956190

1
setuid비트 세트 가있는 프로세스를 실행하는 것 외에 다른 방법은 없다고 생각 합니다.
jcbermu

3
"setuid"프로그램에서 실행중인 프로세스 (즉, 유효 UID ≠ 실제 UID가있는 프로세스)는 EUID를 다시 RUID로 설정할 수 있습니다. 경우에 따라 초기 값 (예 : 프로그램 파일의 소유자)과 RUID간에 EUID를 전환 할 수 있습니다. 또한 RUID를 EUID와 동일하게 설정할 수 있습니다. … (계속)
Scott

2
(계속)… 권한있는 프로세스 (EUID = 0 인 aka root)는 EUID 및 RUID를 임의의 값으로 설정할 수 있습니다 (예 login: su, 및 sudo프로그램). 일반적으로 권한있는 프로세스가 UID를 0이 아닌 값으로 변경하면 더 이상 권한이 없어 root다시 사용할 수 없게 됩니다. setuid (2) , seteuid (2)setreuid (2) 매뉴얼 페이지를 참조하십시오 .
Scott

1
(계속)… 그것은 하나의 문제를 해결하기위한 핵으로 소개되었으며, 그 후에 더 광범위한 방식으로 해결되었습니다. 이러한 가지 치기가 Linux를 사용하는 프로그램을 중단한다는 사실을 제외하고는 Linux에서 제거되었을 수 있습니다. 마이클 케 리스크의 저자 인터페이스 프로그래밍 리눅스는 , 자신의 버전 말한다 인 setfsuid (2) 매뉴얼 페이지 , " setfsuid()요즘 불필요한이며, 새로운 애플리케이션에 피해야한다."
스콧
당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.