수퍼 유저가 위반할 수있는 액세스 권한은 무엇입니까?


23

Fr. Br. George는 강의 중 하나 (러시아어)에서 수퍼 유저가 위반할 수없는 액세스 권한이 있다고 말했습니다. 그것은 수퍼 유저가 무언가를하는 것을 금지 할 수있는 접근 권한이 있다는 것입니다.

인터넷에서이 정보를 찾을 수 없었으며 이들이 무엇인지 궁금합니다. 이것은 아마도 시스템의 핵심 실행과 관련이 있습니까? 어쩌면 그는 일부 시스템 프로세스를 멈출 수 없습니까? 아니면 리얼 모드에서 프로세스를 실행할 수 없습니까?

이 질문은 SELinux와 관련이 없습니다 (George는 질문 직전에 그것에 대해 이야기했습니다).


2
"권한"또는 "권한"은 특정 사용자 계정에 부여 될 수있는 권한을 부여 할 수있는 권한입니다. UNIX 및 Linux (SELinux와 같은 강화 된 버전 제외)에서 root는 모든 권한을 갖 습니다 . 에 부여 할 수있는 권한이 root없으므로에서 제거 할 수있는 권한이 없습니다 root.
MSalters

1
@MSalters, 용서? 여전히 프로세스 기능을 취소하면서 UID 0을 유지할 수 있습니다.
Charles Duffy

... set SECBIT_NOROOT이고 uid 0이되면 더 이상 하나의 기능이 자동으로 부여되지 않습니다.
Charles Duffy

너무 많은 답변-이것을 ​​커뮤니티 위키로 바꾸는 것이 합리적입니까? 아니면 누군가가 요약 답변을 작성해야합니까?
Simon Richter

1
@SimonRichter 나는 또한 그의 강의에서 그가 무엇을 의미하는지 말하기 위해 George로 갈 것입니다.
Kolyunya

답변:


24

접근이 거부되었습니다 :

root직접 네트워크 액세스가 거부 될 수 있습니다. 이것은 인터넷에 연결된 호스트에서 유용합니다.로 로그인 smith한 다음에 로그인해야합니다 sudo.

루트가 할 수없는 것들 :

이것은 권한 부족이 아닙니다. 루트가 할 수없는 것을 볼 수 없지만 일부 기술적 문제는 "금지"된 것으로 나타날 수 있습니다.

나는 루트인데 왜 일반 사용자가 할 수 있지만이 파일을 만들거나 삭제할 수 없습니까?

NFS / samba 공유에 있고 특정 ( access=) 권한이 부여 되지 않았습니다 . 일반 사용자는 관습법을 준수하지 않습니다. (아래의 로컬 대 원격 루트 참조)

나는 루트인데 왜이 프로세스를 죽일 수 없습니까?

보류중인 I / O가 있고 물리적 드라이브 / 원격 LUN의 연결이 끊어졌으며 재부팅으로 만 프로세스를 종료 할 수 있습니다.

나는 루트입니다. 어떻게 archemar의 비밀번호를 얻습니까?

당신은 할 수있는 su - archemar암호는 단방향 해시를 사용하여 저장하기 때문에, 모든 권리, 또는 이전을 모르고 변경 archemar의 암호,하지만 당신은 (짧은 키 로거)를 읽을 수 없습니다.

로컬 대 원격 루트

  • 스테이션 / PC에서 루트 권한을 갖고 회사 / 대학 / 대학 / 제공자 NFS 공유를 사용할 수 있습니다.
  • 다음으로 NFS를 내보내는 컴퓨터에서 루트가 아닌 로그인 만 가능합니다.

지금

cp /bin/bash /nfs/home/me/bash
chown root /nfs/home/me/bash
chmod u+s /nfs/home/me/bash

NFS 서버에 로그온하고 실행 ./bash하면 회사 / 대학 서버의 루트입니다.


사례 1은 기본적으로 오류 root입니다. 다른 시스템에서는 반드시 로컬 일 필요 는 없기 때문 입니다. 사례 2와 3은 특권이 아닙니다 (아무에게도 부여 할 수 없음). +1, 첫 문장이 올바른 것 같습니다.
MSalters

기술적 root으로 로컬 컴퓨터에서는 로컬 사용자와 동일한 권한으로 원하는 것을 수행 할 수 su - username있습니다. 나는 그들이 왜 그렇게 root네트워크 공유를 쓸 수 없게 만들 었는지 확신하지 못한다 . 오히려 무의미 해 보인다.
Tom Hunt

4
" root그가 액세스 할 수없는 경우에도 암호를 만들 수 있습니까 ?"라는 오래된 질문입니다.
corsiKa

5
@TomHunt root는 NFS 공유에 대한 액세스 권한 을 부여하지 않는 이유 중 하나는 원격 서버에서 "suid root"바이너리가 생성되는 것을 방지하기위한 것입니다. 이는 서버에 대한 완전한 원격 액세스에 활용 될 수 있습니다.
Mark

1
무중단 대기에서 프로세스를 종료하는 것은 나에게 맞는 것처럼 보이지 않습니다 . 그것은 당신 이 할 수없는 일입니다. 전체 파일 시스템에 쓰는 것과 같습니다.
Blacklight Shining

11

일반적인 경우에 이것은 올바르지 않습니다. 수퍼 유저는 시스템이 제공하는 모든 기능에 대한 권한 / 권한을 갖습니다 (1). 이 규칙이 세분화되는 곳은 SELinux를 믹스에 넣을 때입니다. SELinux를 사용하면 루트의 권한까지 제한하여 특정 작업을 허용하지 않을 수 있습니다. 그러나 허용되지 않는 특정 작업은 로컬 시스템의 SELinux 구성에 따라 크게 달라 지므로 SELinux를 사용하더라도이 질문은 일반적인 의미에서 대답 할 수 없습니다.

(1)-시스템이 주어진 기능을 제공하지 않으면 (예 : 실시간 커널 기능이없는 경우) "루트가이 기능에 액세스 할 수 없습니다"라는 문장을 거짓으로 간주합니다. 잘못된 가정 (즉, 해당 기능을 해당 시스템의 모든 사용자가 사용할 수 있음)


1
답변 주셔서 감사합니다, 존! 그러나 그는이 질문이 SELinux와 관련이 없다고 명시 적으로 언급했습니다.
Kolyunya

그런 다음 추가 세부 정보를 제외하고 루트가 특정 기능에 액세스 할 수 없다는 진술을 거짓으로 고려해야합니다. (OS가 BIOS에서 잠기거나 BIOS 보안으로 비슷한 경우는 고려하지 않습니다.)
John

루트가 SELinux 구성을 제어하는 ​​복잡한 문제도 있습니다. 내가 (루트로서) 액션에서 차단되면 SELinux를 수정하여 액션을 허용 한 다음 나중에 다시 변경할 수 있습니다. 로그 트레일이 저장된 위치에 따라 벗어날 수 있습니다.
doneal24

2
반드시 사실 일 필요는 없습니다. CAP_NET_ADMIN을 제거하고 uid 0으로 설정해도 프로세스에서 네트워크 구성을 변경할 수 없습니다. (CAP_SYS_ADMIN 및 제어 능력 등).
Charles Duffy

5

한편으로 사용자가 할 수 없는 일이 있습니다.

  • 하드 링크 디렉토리 (파일 시스템 제한 때문에)
  • 이미 레코딩 된 CD-ROM에 쓰기 (물리적으로 인해)

그러나 그들은 특권이 아닙니다. 왜냐하면 그들은 부여 할 수 없기 때문에 누구에게도 가능하지 않습니다.

그런 다음 전체 시스템 또는 그 일부에 대해 켜거나 끌 수있는 제한이 있습니다.
예를 들어, OS X에는 코드가 Apple에 의해 서명 된 경우에만 코드를 실행할 수있는 옵션이 있습니다.

나는 수퍼 유저가 할 수 없다면 어떤 사용자도 그것을 가질 수 없기 때문에 이것을 실제 권한으로 간주하지 않습니다. 전역으로 만 비활성화 할 수 있습니다.

편집 :
실행 비트가없는 파일에 대한 아이디어는 말 그대로 아무도 할 수 없으며 아무도 그 권한을 부여 할 수 없으므로이 범주에 속합니다.
루트 또는 사용자 그룹 루트가 아닌 다른 사용자 또는 그룹에게 해당 파일을 실행할 수있는 권한을 부여하더라도 루트는 여전히 해당 파일을 실행할 수 있습니다 (OS X 10.10, 10.11 및 Ubuntu 15.04 서버에서 테스트 됨).

이러한 경우를 제외하고는 루트가 할 수없는 일은 거의 없습니다.
그러나 커널 모드 (사용자 모드와 반대) 라는 것이 있습니다.

내가 아는 한, 정상적인 시스템에서는 커널, 커널 확장 및 드라이버 만 커널 모드에서 실행되며 다른 모든 것 (루트로 로그인 한 쉘 포함)은 사용자 모드에서 실행됩니다.
따라서 "루트가 충분하지 않다"고 주장 할 수 있습니다. 그러나 대부분의 시스템에서 루트 사용자는 커널 모듈을로드 할 수 있습니다. 커널 모듈은 커널 모드에서 실행되어 루트에 커널 모드에서 코드를 효과적으로 실행하는 방법을 제공합니다.

그러나 (임의로) 불가능한 시스템은 (iOS와 같은) 적어도 보안 전체를 악용하지 않는 시스템이 있습니다. 이것은 대부분 코드 서명 적용과 같은 보안 강화 때문입니다.
예를 들어, iDevices 프로세서 에는 AES 암호화 키가 내장되어 있으며 커널 모드에서만 액세스 할 수 있습니다. 커널 모듈 은이 모듈에 액세스 할 수 있지만 커널이 커널 모듈을 승인하려면 해당 커널 모듈의 코드도 Apple에서 서명해야합니다.

OS X의 경우 버전 10.11 (El Capitan)부터는 "루트리스 모드"(루트가 존재하기 때문에 이름이 오도 될 수 있음)가 있으며 설치 프로그램이 여전히 할 수있는 루트를 효과적으로 금지합니다.
에서 인용 AskDifferent에이 우수 답변 :

루트에서도 제한 사항은 다음과 같습니다.

  • / System, / bin, / sbin 또는 / usr (/ usr / local 제외)에서는 아무것도 수정할 수 없습니다. 또는 내장 앱 및 유틸리티 중 하나. 설치 프로그램 및 소프트웨어 업데이트 만 이러한 영역을 수정할 수 있으며 Apple 서명 패키지를 설치할 때만 해당 영역을 수정할 수 있습니다.

1
실제로, 실행 비트를 설정하지 않고 실행 파일을 실행할 수 있습니다 gcc -o hello hello.c && chmod 400 hello && /lib64/ld-linux-x86-64.so.2 ./hello. 예상 Hello, World!출력 제공
doneal24

@ DougO'Neal 그러나 /lib64/ld-linux-x86-64.so.2실제 실행 파일이 ./hello아니라 단지 그것에 대한 논쟁입니까? ... 또는 사용 bash는 스크립트를 실행처럼 PHP 인터프리터에 PHP 코드를 포함하는 텍스트 파일을 전달하는 등 그 때문에 bash ./my_script...
Siguza

1
@ DougO'Neal 이전에는 작동했지만 최근 버전의 glibc에서는 비활성화되어 있습니다 (noexec 마운트의 간단한 우회를 막기 위해).
duskwuff

@duskwuff glibc의 최신 버전은 무엇입니까? 이것은 여전히 ​​우분투 14.04에서 작동합니다.
doneal24

1
Apple은 ln에 추가하지 않았지만 ln에서 사용하는 시스템 클래스 (예 : link)를 참조하십시오. stackoverflow.com/a/4707231/151019 Time Machine의 작동 방식
user151019

4

언급 한 "시스템 코어 실행"은 root로드 가능한 커널 모듈 등을 통해 제어 할 수 있습니다. 물론 이것은 커널 모듈 로딩이 커널에 의해 지원된다고 가정하며, 심지어 불가능한 행동도 수행 할 수 없습니다 root.

시스템 프로세스에서도 마찬가지입니다. root프로세스를 종료 할 수는 있지만 커널 무결성을 손상시키지 않고 커널 모드에서 실행중인 프로세스를 중지하는 것은 불가능하므로 이러한 프로세스를 즉시 중지하는 것은 불가능합니다. 참고 root단순히 영향을주지 않습니다 자신을 죽이고, 그 프로세스를 죽일 거부되지 않습니다.

마지막으로 실제 모드 : Linux 커널은 그것을 지원하지 않으므로 다시는 아무도 불가능한 일을 할 수 없습니다 root.

@Siguza는 x허가 없이 파일을 실행하는 것을 언급했으며 , 이는 root사용자에게 가능합니다 .

/lib/ld-linux.so.2 /path/to/executable

...하지만 uid-0 프로세스는 /proc/kmem기능 취소를 통해 새 커널 모듈을로드하는 기능 (또는 핫 패치 )을 잃을 수 있습니다 .
Charles Duffy

4

예를 들어 변경 불가능한 파일을 수정할 수 있습니다. 파일 속성 i을 설정하여 chattr루트에서도 파일을 변경할 수 없습니다. 예를 들면 다음과 같습니다.

# whoami
root
# touch god
# chattr +i god
# rm god
rm: cannot remove ‘god’: Operation not permitted
# touch god
touch: cannot touch ‘god’: Permission denied

파일은 ls -l출력 에서 일반 쓰기 가능 파일로 나타납니다 .

# ls -l god
-rw-r--r-- 1 root root 0 Oct 26 19:27 god

i속성 을 보려면 다음 을 사용해야합니다 lsattr.

# lsattr god
----i----------- god

chattr매뉴얼 페이지i속성 에 대해 다음과 같이 말합니다 .

`i '속성을 가진 파일은 수정할 수 없습니다 : 파일을 삭제하거나 이름을 바꿀 수 없으며,이 파일에 대한 링크를 만들 수 없으며 파일에 데이터를 쓸 수 없습니다. 수퍼 유저 또는 CAP_LINUX_IMMUTABLE 기능을 가진 프로세스 만이 속성을 설정하거나 지울 수 있습니다.

루트는 불변성을 쉽게 취소 할 수 있습니다.

# chattr -i god
# rm -v god
removed ‘god’

리눅스 커널은 제대로 BSD의 구현하지 않는 보안 레벨의 당신에 대한 수확 체감 제공 시설 (더 이상)을 불변 하고 APPEND에만 속성. securelevel을 사용하면 시스템이 다중 사용자 실행 레벨에 있으면이 비트를 재설정 할 수 없으므로 관리자는 로컬 콘솔을 종료하고 로컬 콘솔을 사용해야 네트워크 공격자가 중지됩니다.
Simon Richter

2

FreeBSD에서는 gmirror이미 마운트 된 파티션에서 root로도 사용할 수 없습니다 :

gmirror label -v -b prefer gm0s1 ad4s1
gmirror : ad4s1에 메타 데이터를 저장할 수 없음 : 작업이 허용되지 않습니다.

할 수 있으려면 sysctl( kern.geom.debugflags=16) 를 설정 해야합니다.

root권한이있는 사용자이지만 이러한 권한은 커널에 의해 부여됩니다. 따라서 커널은보다 많은 권한을 가지고 root있습니다.


1

루트 사용자 자신과의 협업을 가정하면 root( allow_other또는 allow_root옵션을 사용하여) FUSE 마운트에 액세스하지 못하게 할 수 있지만 이는 FUSE가 이런 방식으로 작동하도록 설계 되었기 때문입니다. FUSE는 가상 계층에 상주하므로 가능한 한 투명하고 얇아서 다른 계층에 권한을 위임하는 일반적인 블록 장치 모듈과 달리 논리를 기반으로 좋아하는 모든 오류를 반환 할 수 있습니다.

파일 시스템을 읽기 전용으로 설정하지 않는 한 루트 사용자가 옵션을 비활성화하거나 FUSE 모듈을 옵션을 자동으로 버리는 모듈로 바꾸는 것을 막을 수는 없습니다. 그러나 이것은 단지 "파수꾼을 보는 사람"상황으로 이어집니다. 시스템이 거짓말을하지 않는지 어떻게 확인할 수 있습니까? 커널은 실제로 합법적 인 FUSE 모듈을 보여주는 chroot에 앉아있을 수도 있지만 커널은 실제로 악의적 인 버전을 실행하고 있습니다.


0

실행 파일이 아닌 파일을 실행할 수 없다는 것은 파일 권한에 따라 다르기 때문에 그다지 제한적인 것은 아닙니다. (실행 파일이 아닌 파일에 대해서는 /lib64/ld-linux-x86-64.so.2를 사용하여이 문제를 해결할 수 있지만 실행 파일이없는 마운트의 파일은 아닙니다)

또한 수퍼 유저가 프로세스를 종료 할 수 있지만 프로세스에서 파일을 사용중인 경우 파일 편집을 방해하는 필수 파일 잠금 문제도 있습니다.

한 시점에서, 수퍼 유저는 장치가 사용 중일 때 장치를 마운트 해제 할 수 없었지만 이제는 지연된 마운트를 사용하여 수행 할 수 있습니다.

다른 제한 사항은 다음과 같습니다.

불변 파일을 수정할 수 없으며 추가 전용 파일에만 추가 할 수 있습니다 (리눅스는 수퍼 유저가 실행 레벨에서 불변 및 제거 플래그 만 제거 할 수 있지만 그 목적을 부분적으로 무시합니다)

읽기 전용 마운트에 쓰거나 no-exec 마운트에서 아무것도 실행할 수 없음

바인딩 할 수없는 마운트를 바인딩 할 수 없습니다

블록 장치가 읽기 전용 인 경우 파일 시스템을 읽기 / 쓰기로 다시 마운트 할 수 없음

allow-other 또는 allow-root가 마운트되어 있지 않으면 다른 사용자가 소유 한 퓨즈 마운트에 아무것도 표시하지 않습니다

SELinux 설정을 위반할 수 없음

루트 자체에 영향을 미치는 시스템 자체에 고유 한 제한 사항 :

파일의 c 시간을 직접 설정할 수 없습니다 (또는 구현 된 경우 출생 시간)

비밀번호를 일반 텍스트로 볼 수 없습니다

당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.