Получить идентификатор пользователя в окнах MS для отображения uid и gid - PullRequest
0 голосов
/ 24 мая 2019

У меня есть следующее Dockerfile:

FROM php:7-cli-alpine3.9

ARG USERID=1000
ARG GROUPID=1000

RUN apk add --no-cache --update bash bash-completion bash-doc &&\
    addgroup -g ${GROUPID} developer &&\
    mkdir -p /home/developer/code &&\
    adduser -D -u ${USERID} -G developer -h /home/developer -s /bin/bash developer &&\
    chown developer:developer -R /home/developer/code &&\
    php -r "copy('https://getcomposer.org/installer', '/tmp/composer-setup.php');"&&\
    php -r "if (hash_file('sha384', '/tmp/composer-setup.php') === '48e3236262b34d30969dca3c37281b3b4bbe3221bda826ac6a9a62d6444cdb0dcd0615698a5cbe587c3f0fe57a54d8f5') { echo 'Installer verified'; } else { echo 'Installer corrupt'; unlink('composer-setup.php'); } echo PHP_EOL;" &&\
    php /tmp/composer-setup.php --install-dir=bin --filename=composer &&\
    php -r "unlink('composer-setup.php');" &&\
    chmod +x /bin/composer

VOLUME /home/developer/code
WORKDIR /home/developer/code
USER developer

ENTRYPOINT /bin/bash

И я могу построить его через следующее docker-compose.yml:

version: '3'
services:
  php:
    build:
      context: .
      dockerfile: ./Dockerfile
      args:
        USERID: $USERID
        GROUPID: $GROUPID
    image: 'pcmagas/rover_php'
    stdin_open: true
    tty: true
    volumes:
     - './:/home/developer/code'

Таким образом, предоставляя значения $USERID и $GROUPID через файл .env, каждый разработчик может создать собственный, индивидуально подобранный образ для своего локального пользователя GNU / Linux, который запускает образ на своем компьютере. Кроме того, он / она может получить идентификатор пользователя и группы с помощью следующих команд GNU / Linux:

id -u # For user id
id -g # For group id

Но как в окнах Microsoft, как я могу получить правильный идентификатор пользователя и группы, чтобы правильно сопоставить идентификатор пользователя и идентификатор группы, расположенный внутри изображения, с идентификатором, расположенным снаружи?

1 Ответ

1 голос
/ 24 мая 2019

В Windows пользователи принадлежат к нескольким группам, а не к определенной группе.Технически у пользовательского токена есть свойство TokenPrimaryGroup, которое, вероятно, существует для обеспечения некоторой совместимости с UNIX, но я не думаю, что Windows поставляется с инструментом для печати этого SID.

Вы можете получить SID пользователя (SecurityID) с whoami.exe в Vista +:

Пакетный файл:

for /F "tokens=1,2 delims=: " %%A in ('WhoAmI /USER /FO LIST') do @if /I "%%~A" == "SID" echo %%B

Интерактивный cmd.exe:

for /F "tokens=1,2 delims=: " %A in ('WhoAmI /USER /FO LIST') do @if /I "%~A" == "SID" echo %B

Пользовательский SID идентифицирует пользователя для определенногомашина или домен.Последняя часть SID (RID) является уникальной пользовательской частью на этом компьютере / домене.

Если вам абсолютно необходима «группа», вы можете проанализировать вывод WHOAMI /GROUPS /FO LIST и найти S-1-5-32-544(Администраторы) без Запретить только !Если он присутствует, пользователь является администратором, а если нет, то он, вероятно, просто пользователь (S-1-5-32-545).Вы также можете взглянуть на , как Samba отображает группы .

...