실제로 로그인할 수 있는 시스템 계정을 만들지 않고도 사용자 이름을 사용자 ID에 연결하는 데 사용할 수 있는 표준화된 메커니즘이 Linux에 있습니까?
Windows 서버에 연결하고 사용자에게 UID를 제공하는 기능을 고려하면 이것이 가능해 보입니다. 일반적으로 더 높은 범위의 숫자에 있습니다.
나에게 필요한/원하는 것은 하위 ID로만 존재하는 그룹과 사용자에게 의미 있는 이름을 할당할 수 있는 것입니다(사용자 이름).
관련된 일을 함으로써 이 일을 할 수 있다고 생각합니다.국가안전보위부(5)그런데 빈손으로 왔습니다.
일부 배경
호스트 시스템에서는 일반적으로 64k UID(및 GID)가 사용되지만 0..2^32-1
범위는쓸 수 있는사용자 ID. 따라서 전체 범위 내의 하위 범위를 특정 사용자의 하위 ID로 할당할 수 있습니다. 예를 들어 범위가 루트 네임스페이스의 사용자 100000..2^32-1
에게 할당되었다고 말할 수 있습니다 .root
LXC의 경우(창사), 루트 네임스페이스가 있는 사용자를 사용합니다.주인100000..165535
및 하위 ID는 하위 네임스페이스에 매핑되므로 하위 네임스페이스 내 호스트의 UID 범위는 로 표시됩니다 0..65535
.
따라서 파일 소유자는root
~에하위 네임스페이스는 UID 100000이 소유한 것으로 나타납니다.호스트에서.
따라서 실제로 사용자 계정을 만들지 않고도 호스트 시스템에서 이 "가상" UID 100000에 의미 있는 이름을 할당할 수 있다면 매우 도움이 될 것입니다.
이것이 내가 찾고 있는 것입니다.
지금은 해결 방법으로 이 도우미 스크립트를 사용하고 있습니다. StackExchange 또는 공개 도메인/CC0 약관에 명시된 약관에 따라 자유롭게 사용하세요.
#!/usr/bin/env bash
LXCPATH=$(lxc-config lxc.lxcpath)
function create-group
{
local NAME=$1
local GUEST=$3
local GUESTCONF="/etc/lxc/guests/lxc.$GUEST.conf"
local BASEID=$(awk '$1 ~ /^lxc\.id_map$/ && $3 ~ /^g$/ {print $5}' "$GUESTCONF" || echo "0")
local ID=$(($2+$BASEID))
echo "groupadd -g $ID $NAME"
}
function create-user
{
local NAME=$1
local GUEST=$3
local GUESTCONF="/etc/lxc/guests/lxc.$GUEST.conf"
local BASEID=$(awk '$1 ~ /^lxc\.id_map$/ && $3 ~ /^u$/ {print $5}' "$GUESTCONF" || echo "0")
local ID=$(($2+$BASEID))
echo "useradd -M -N -u $ID -s /usr/sbin/nologin $NAME"
}
function create-entry
{
local GUEST=$1
local DATABASE=$2
local FUNCTION=$3
local entry; local NAME; local ID
for entry in $(awk -F : '{print $1 ":" $3}' "$DATABASE"); do
NAME=$GUEST.${entry%:*}
if getent ${DATABASE##*/} $NAME; then
echo "Entry $NAME (${DATABASE##*/}) already exists"
else
$FUNCTION $NAME ${entry#*:} $GUEST
fi
done
}
for guest in $(lxc-ls -1); do
create-entry $guest "$LXCPATH/$guest/rootfs/etc/group" create-group
create-entry $guest "$LXCPATH/$guest/rootfs/etc/passwd" create-user
done|sort -u|while read cmd; do
echo "$cmd"
$cmd
done
awk
( mawk
또는 gawk
), bash
, getent
, groupadd
, 가 필요합니다 useradd
. 이 줄을 주석 처리하면:
$cmd
실행할 모든 명령의 출력을 얻을 수 있습니다. 사용자 및 그룹 ID를 오름차순으로 추가합니다. 그러나 lxc.id_map
항목이 LXC 게스트 이름을 딴 파일에 있고 파일 이름이 스키마를 따른다고 가정합니다 /etc/lxc/guests/lxc.${guestname}.conf
. 이 설정을 조정하고 싶을 수도 있습니다.
게스트에 사용자를 추가하면 스크립트를 다시 실행할 수 있습니다.
이것은 것이다