프로세스가 특정 그룹으로 실행될 때 Linux 권한은 어떻게 작동합니까?

프로세스가 특정 그룹으로 실행될 때 Linux 권한은 어떻게 작동합니까?

이것은 내가 많은 정보를 찾을 수 없는 것이므로 도움을 주시면 대단히 감사하겠습니다.

나의 이해는 이것이다. 다음 파일을 가져옵니다.

-rw-r-----  1 root        adm   69524 May 21 17:31 debug.1

사용자는 phil이 파일에 액세스할 수 없습니다:

phil@server:/var/log$ head -n 1 debug.1
cat: debug.1: Permission denied

그룹 phil에 추가 하면 다음이 가능합니다.adm

root@server:~# adduser phil adm
Adding user `phil' to group `adm' ...
Adding user phil to group adm
Done.
phil@server:/var/log$ head -n 1 debug.1
May 21 11:23:15 server kernel: [    0.000000] DMI: QEMU Standard PC (i440FX + PIIX, 1996), BIOS rel-1.7.5.1-0-g8936dbb-20141113_115728-nilsson.home.kraxel.org 04/01/2014

그러나 명시적으로 설정된 상태에서 프로세스가 시작되면 파일을 읽을 수 없습니다 user:group. phil:phil프로세스는 다음과 같이 시작됩니다.

nice -n 19 chroot --userspec phil:phil / sh -c "process"

프로세스가 다음으로 시작되는 경우 phil:adm:

nice -n 19 chroot --userspec phil:adm / sh -c "process"

그래서 질문은 실제로 다음과 같습니다.

프로세스가 해당 사용자의 보조 그룹이 소유한 파일에 액세스하지 못하도록 방지하는 특정 사용자/그룹 조합으로 프로세스를 실행하는 데 있어 특별한 점은 무엇이며, 이 문제를 해결할 수 있는 방법이 있습니까?

답변1

프로세스는 uid 및 gid를 사용하여 실행됩니다. 둘 다 권한이 할당되어 있습니다. 사용자 및 그룹에 대한 사용자 지정을 사용하여 chroot를 호출할 수 있지만 사용자는 실제로 그룹에 속하지 않습니다. 그런 다음 사용자 uid와 지정된 그룹 gid를 사용하여 프로세스가 실행됩니다.

예를 살펴보겠습니다. 이름이 사용자 user이고 그 사람이 그룹에 속해 있습니다 student.

root@host:~$ id user
uid=10298(user) gid=20002(student) groups=20002(student)

다음과 같은 파일이 있습니다.

root@host:~$ ls -l file
-rw-r----- 1 root root 9 Mai 29 13:39 file

그는 읽을 수 없습니다:

user@host:~$ cat file
cat: file: Permission denied 

이제 cat사용자 및 그룹의 컨텍스트에서 프로세스를 실행할 수 있습니다. 이제 cat 프로세스에는 필요한 권한이 있습니다.userroot

root@host:~$ chroot --userspec user:root / sh -c "cat file"
file contents

위에서 말한 내용을 보는 것은 흥미 롭습니다 id.

root@host:~$ chroot --userspec user:root / sh -c "id"
uid=10298(user) gid=0(root) groups=20002(student),0(root)

예, 하지만 사용자는 user그룹( root)에 속해 있지 않습니다. id정보는 어디서 얻나요? 매개변수 없이 호출하면 id시스템 호출이 사용되며,getuid(),getgid()그리고getgroups(). 따라서 자체 프로세스 컨텍스트 id가 인쇄됩니다. 우리는 이 컨텍스트를 변경했습니다 --userspec.

인수를 사용하여 호출하면 id사용자의 그룹 할당만 결정됩니다.

root@host:~$ chroot --userspec user:root / sh -c "id user"
uid=10298(user) gid=20002(student) groups=20002(student)

귀하의 질문에 대해:

프로세스가 해당 사용자의 보조 그룹이 소유한 파일에 액세스하지 못하도록 방지하는 특정 사용자/그룹 조합으로 프로세스를 실행하는 데 있어 특별한 점은 무엇이며, 이 문제를 해결할 수 있는 방법이 있습니까?

프로세스가 수행해야 하는 작업을 해결하는 데 필요한 보안 프로세스 컨텍스트를 설정할 수 있습니다.모든프로세스에는 실행되도록 설정된 uid 및 gid가 있습니다. 일반적으로 프로세스는 호출하는 사용자 uid 및 gid를 해당 컨텍스트로 "취합니다". "취한다"는 것은 커널이 이 작업을 수행한다는 것입니다. 그렇지 않으면 보안 문제가 됩니다.

따라서 실제로 파일을 읽을 수 있는 권한이 없는 것은 사용자가 아니라 프로세스( cat)의 권한입니다. 그러나 프로세스는 호출 사용자의 uid/gid로 실행됩니다.

따라서 uid와 그룹의 gid를 사용하여 프로세스를 실행하기 위해 특정 그룹에 속할 필요는 없습니다.

답변2

--userspecon 옵션을 사용하여 chrootrun 을 지정합니다 chroot. 보조 그룹을 정의하려면 --groups이 옵션도 사용해야 합니다.

기본적으로 프로세스는 프로세스를 실행하는 사용자의 기본 및 보조 그룹을 상속하지만 를 사용하면 이를 지정된 개별 그룹으로 재정의 --userspec하도록 지시할 수 있습니다 .chmod

Linux의 권한에 대한 자세한 문서는 다음에서 확인할 수 있습니다.credentials(7)맨페이지.

답변3

Linux에 로그인할 때 로그인 프로세스 1 - 확인 후 다음으로 로그인할 수 있습니다.- phil의 uid와 그것이 속한 그룹을 가져와 프로세스로 설정하고 쉘로 시작합니다.uid, gid 및 보충 그룹은 프로세스의 속성입니다.

이후에 시작된 모든 후속 프로그램은 해당 셸의 하위 프로그램이며 이러한 자격 증명의 복사본만 받습니다. *이는 사용자 권한을 변경해도 실행 중인 프로세스에 영향을 미치지 않는 이유를 설명합니다. 그러나 이러한 변경 사항은 다음에 로그인할 때 적용됩니다.

* setuid 또는 setgid 비트가 설정된 프로그램은 예외입니다.유효 사용자 ID. 이는 예를 들어 사용됩니다.수(1)root따라서 에 의해 실행되더라도 권한으로 실행될 수 있습니다 phil.

phil그룹 에 추가한 후 adm그는 실행할 수 su phil있고 su루트로 실행됩니다. 그가 phil의 비밀번호를 제공했는지 확인한 다음 phil이 속한 uid, gid 및 보충 그룹이 있는 쉘에 그를 놓습니다. 이 작업은 사용자를 그룹에 추가한 후에 수행되므로 쉘은 이미 그룹에 있습니다 adm.

나는 chroot(1)이 가장 적합한 프로그램이라고 생각하지 않습니다다른 사용자로 실행, 하지만 작업이 완료됩니다. 이 매개변수를 사용하면 uid 및 gid --userspec phil:phil로 실행됩니다 . 제공할 다른 그룹 세트가 없습니다 . 따라서 하위 프로세스는 그룹에 속하지 않습니다.philphil--groupsadm

프로세스를 실행하는 보다 일반적인 방법은 phil 입니다 su phil -c "process". su사용자 데이터베이스 정보에서 uid, gid 및 보충 그룹을 로드할 때 process사용자가 현재 가지고 있는 것과 동일한 자격 증명이 있습니다.

1 이것은 아마도로그인(1), sshd, su, gdb 또는 기타 프로그램. 또한 pam 모듈을 통해 관리할 수도 있습니다.

관련 정보