이것은 내가 많은 정보를 찾을 수 없었으므로 도움을 주시면 감사하겠습니다.
내 이해는 따라서입니다. 다음 파일을 가져 가십시오.
-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"
따라서 문제는 실제로 다음과 같습니다.
프로세스가 해당 사용자의 보충 그룹이 소유 한 파일에 액세스 할 수 없도록하는 특정 사용자 / 그룹 콤보로 프로세스를 실행하는 데있어 특별한 점은 무엇입니까?
답변
프로세스는 UID와 함께 실행됩니다. 모두 권한이 할당되어 있습니다. 사용자 및 그룹의 userspec을 사용하여 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
사용자 user
와 그룹 의 맥락 에서 프로세스를 실행할 수 있습니다 root
. 이제 cat 프로세스에 필요한 권한이 있습니다.
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를 컨텍스트로 “취합니다”. “테이크 (takes)”는 커널이하는 것을 의미합니다. 그렇지 않으면 보안 문제가됩니다.
따라서 실제로는 사용자가 아니며 파일을 읽을 권한이 없으며 프로세스 권한 ( cat
)입니다. 그러나 프로세스는 호출하는 사용자의 uid / gid로 실행됩니다.
따라서 프로세스를 uid 및 해당 그룹의 그룹과 함께 실행하기 위해 특정 그룹에 있지 않아도됩니다.
답변
사용 --userspec
에 대한 옵션 chroot
을 실행할 때 지정 사용자와 하나의 그룹은 사용합니다 chroot
. 보충 그룹을 정의하려면 --groups
옵션도 사용해야합니다 .
기본적으로 프로세스를 실행하는 사용자의 기본 및 보조 그룹을 상속하지만 사용하여 --userspec
당신에게있는 거 이야기를 chmod
하나의 그룹을 사용하여 지정된 것을 오버라이드 (override) 할 수 있습니다.
Linux 사용 권한에 대한 자세한 설명서는 credentials(7)
맨 페이지 에서 제공됩니다 .
답변
Linux에 로그인하면 phil 로 로그인 할 수 있는지 확인한 후 로그인 프로세스 ¹ 는 phil의 uid와 그 그룹이 속한 프로세스를 쉘로 시작하는 프로세스로 설정합니다. UID, GID 및 보조 그룹은 프로세스의 속성입니다.
그 이후에 시작된 이후의 프로그램은 해당 셸의 자손이며 단순히 해당 자격 증명의 복사본을받습니다. * 이것은 사용자의 권한을 변경해도 실행중인 프로세스에 영향을 미치지 않는 이유를 설명합니다. 그러나 다음에 로그인하면 변경 사항이 적용됩니다.
* setuid 또는 setgid 비트가 설정된 프로그램은 예외이며 유효 사용자 ID 가 다릅니다 . 예를 들어 su (1)에서 사용 되므로에 root
의해 실행될 때도 권한으로 실행될 수 있습니다 phil
.
추가 한 후 phil
받는 adm
그룹, 그는 실행할 수 su phil
및 su
루트 레벨 그는 실제로 필 암호를 제공하는지 확인하고 필이 속한 GID UID 및 보조 단체와 쉘로 그를 땅으로 -running됩니다. 그리고 이것은 사용자를 그룹에 추가 한 후에 이루어 지므로 해당 셸은 이미 adm
그룹에 있습니다.
다른 사용자로 실행 하기에 가장 적합한 chroot (1) 프로그램을 고려하지는 않지만 확실히 작업을 완료합니다. 이 매개 변수 --userspec phil:phil
는의 uid phil
와 gid와 함께 실행됩니다 phil
. 제공 할 추가 그룹이 설정되지 않았습니다 --groups
. 따라서 어린이 프로세스는 adm
그룹에 없습니다 .
필처럼 프로세스를 실행하는보다 일반적인 방법은 다음과 같습니다 su phil -c "process"
. 로 su
로드 UID, 사용자 데이터베이스 정보와 GID 및 보충 그룹은 process
사용자가 현재 가지고있는 동일한 자격 증명을해야합니다.
¹ login (1) , sshd, su, gdb 또는 기타 프로그램 일 수 있습니다. 또한 pam 모듈을 통해 관리되고있을 것입니다.