일반적인 Linux 유틸리티에서 특정 CAP_SETUID에 대해 임의의 UID로 변경할 수 있습니까?

일반적인 Linux 유틸리티에서 특정 CAP_SETUID에 대해 임의의 UID로 변경할 수 있습니까?

사용자 네임스페이스 기능을 테스트할 때 UID를 임의의 값으로 변경해야 하는 경우가 있습니다.

현재 나는 다음과 같은 작업을 수행합니다.

useradd -u <uid> testuser
su testuser
userdel testuser

임의의 UID를 허용하지 않고 ?에 있는 유효한 사용자 이름 만 허용 su하므로 먼저 사용자를 추가해야 합니다 .su/etc/passwd

임의의 UID를 변경할 수 있는 일반적인 Linux 유틸리티가 있습니까 CAP_SETUID?

참고: 작은 애플리케이션을 컴파일할 수 있다는 것을 알고 있지만 setuid(2)사용자 네임스페이스 기능을 테스트하려고 할 때마다 이를 컨테이너 등으로 전송하는 것은 번거롭습니다.

답변1

정확히 무엇을 달성하고 싶은지 명확하지 않습니다. 귀하의 질문에 따르면 귀하는 다음과 같을 수 있습니다.

  • 매번 해당 사용자를 생성하는 오버헤드 없이 테스트를 위해 다른 사용자로 작업을 수행해 보세요.
  • 존재하지 않는 사용자로 프로세스를 실행하려고 했습니다( /etc/passwd더 정확하게는 의 항목과 일치하지 않음 getent passwd).
  • 테스트하려는 동작CAP_SETUID

처음 두 개 중 하나인 경우 비트 세트를 사용하여 실행 파일을 만들고 실행 가능한 사용자 및 그룹을 임의의 숫자로 설정할 수 setuid있습니다 setgid. 자신만의 실행 파일을 컴파일할 필요도 없으며 기존 실행 파일을 복사하기만 하면 됩니다.

루트 사용자로서:

mkdir test_dir
# Secure the directory to prevent tampering by other users
chmod go-rx test_dir 
cd test_dir

cp $(which bash) .

# arbitrary user 1997  group 1998
chown 1997:1998 ./bash
chmod ug+s ./bash
chmod go+rx ./bash

# Run touch as an arbitrary user
./bash -p -c `touch /tmp/test_file`

# Check the result
ls -lh /tmp/test_file
-rw-r----- 1 1997 1998 0 Jan 11 08:22 /tmp/test_file

또한 스크립팅 프로그래밍 언어인 Python은 다양한 플랫폼에서 사용할 수 있습니다. setuid 및 setgid를 호출한 후 무언가를 실행하기 위해 매우 짧은 Python 스크립트를 작성할 수 있습니다.

예를 들어 uid.py:

import os
import sys
import subprocess

# Set uid and gid
os.setuid(int(sys.argv[1]))
os.setgid(int(sys.argv[2]))

# Run the given command, passing in remaining arguments.
subprocess.run(*sys.argv[3:])

그런 다음 CAP_SETUIDPython을 사용하면 다음을 수행할 수 있습니다.

python setuid.py 1997 1998 touch /tmp/test_file

touch이는 uid 1997 및 gid 1998을 사용하여 실행하는 것과 동일한 효과를 갖습니다.

Python 스크립트는 파일로 생성할 필요가 없으며 인라인으로 전달할 수 있습니다. https://stackoverflow.com/a/16938013/453851

답변2

UID특정 항목 으로 변경할 수 있는 일반적인 Linux 유틸리티가 있습니까 CAP_SETUID?

아니요, 그렇지 않습니다.

작은 애플리케이션을 컴파일할 수 있다는 것을 알고 있지만 setuid(2)사용자 네임스페이스 기능을 테스트하려고 할 때마다 이를 컨테이너로 전송하는 것은 번거롭습니다.

Bash에서 테스트 프레임워크를 수행할 계획이라면,모든 것이것은 아무리 말해도 "성가신" 일입니다.

관련 정보