권한 설정

권한 설정

지정된 숫자 uid, gid 및 그룹을 사용하여 셸을 시작하려면 어떤 명령(배포 저장소에서 사용 가능)을 사용해야 합니까? 일반적으로 su루트에서 다른 사용자로 변경하는 데 사용되지만 외부 파일 시스템, 네임스페이스 및 Docker 컨테이너를 사용할 때 존재하지 않을 수 있는 이름으로 그룹을 찾으려고 시도합니다.

나는 nsswitch나 nsswitch 가 필요 없이 setgroups(2), setgid(2), setuid(2)및 , 만 수행하는 간단한 애플리케이션이기를 원합니다 . 이러한 프로그램을 C로 구현하는 것은 쉽지만 이 사용 사례에서는 표준 및 배포 가능한 프로그램을 사용할 수 있습니까?execve(2)/etc/passwd

답변1

대안으로:

권한 설정

cd /; setpriv --reuid=1000 --regid=1000 --init-groups --reset-env bash

깨끗하고 단순하다

답변2

chroot

chroot --userspec=1000:1000 --groups=1001,1002 / /bin/bash

Chroot에는 옵션이 --userspec있으며 --groups일반적으로 배포판에서 사용할 수 있습니다. 대상 디렉토리를 설정하면 /chroot nil의 주요 목적이 렌더링되지만 uid/gid/groups 재정의 효과는 그대로 유지됩니다.

답변3

Perl이 있고 UID와 GID에만 관심이 있다면 이 작업은 비교적 간단합니다.

# perl -e '$( = 456; $) = "456 1111 2222"; $< = $> = 123; exec("id")'
uid=123 gid=456 groups=456,1111,2222

$($)실제적이고 유효한 GID와 실제적이고 유효한 UID(순서대로) 입니다 $<. 여러 숫자를 나타내는 문자열을 허용할 수 있으며 보조 그룹도 설정됩니다. (이 목록을 지우려면 예를 들어 마스터 GID를 두 번 설정하십시오.)$>$)$) = "456 456"

또는 English:

# perl -MEnglish -e '$GID = 456; $EGID = "456 1111 2222"; $EUID = $UID = 123; exec("id")'
uid=123 gid=456 groups=456,1111,2222

를 사용할 수도 있으며 POSIX::set[gu]uid(), 물론 $!특수변수를 수정한 후 오류가 있는지 확인해야 합니다. 그룹이나 UID를 변경할 수 있는 권한이 없으면 위 작업이 자동으로 실패합니다.

관련 정보