Mam wewnątrz kontener dokera z niektórymi procesami (uwsgi i seler). Chcę utworzyć użytkownika selera i użytkownika uwsgi dla tych procesów, a także grupę roboczą, do której oboje będą należeć, w celu przypisania uprawnień.
Próbowałem dodać RUN adduser uwsgi
i RUN adduser celery
do mojego pliku Docker, ale powoduje to problemy, ponieważ te polecenia proszą o podanie danych (opublikowałem odpowiedzi z kompilacji poniżej).
Jaki jest najlepszy sposób dodawania użytkowników do kontenera Docker, aby ustawić uprawnienia dla pracowników działających w kontenerze?
Mój obraz Dockera jest zbudowany z oficjalnej bazy Ubuntu14.04.
Oto dane wyjściowe z pliku Docker po uruchomieniu poleceń adduser:
Adding user `uwsgi' ...
Adding new group `uwsgi' (1000) ...
Adding new user `uwsgi' (1000) with group `uwsgi' ...
Creating home directory `/home/uwsgi' ...
Copying files from `/etc/skel' ...
[91mEnter new UNIX password: Retype new UNIX password: [0m
[91mpasswd: Authentication token manipulation error
passwd: password unchanged
[0m
[91mUse of uninitialized value $answer in chop at /usr/sbin/adduser line 563.
[0m
[91mUse of uninitialized value $answer in pattern match (m//) at /usr/sbin/adduser line 564.
[0m
Try again? [y/N]
Changing the user information for uwsgi
Enter the new value, or press ENTER for the default
Full Name []:
Room Number []: Work Phone []: Home Phone []: Other []:
[91mUse of uninitialized value $answer in chop at /usr/sbin/adduser line 589.
[0m
[91mUse of uninitialized value $answer in pattern match (m//) at /usr/sbin/adduser line 590.
[0m
Is the information correct? [Y/n]
---> 258f2f2f13df
Removing intermediate container 59948863162a
Step 5 : RUN adduser celery
---> Running in be06f1e20f64
Adding user `celery' ...
Adding new group `celery' (1001) ...
Adding new user `celery' (1001) with group `celery' ...
Creating home directory `/home/celery' ...
Copying files from `/etc/skel' ...
[91mEnter new UNIX password: Retype new UNIX password: [0m
[91mpasswd: Authentication token manipulation error
passwd: password unchanged
[0m
[91mUse of uninitialized value $answer in chop at /usr/sbin/adduser line 563.
[0m
[91mUse of uninitialized value $answer in pattern match (m//) at /usr/sbin/adduser line 564.
[0m
Try again? [y/N]
Changing the user information for celery
Enter the new value, or press ENTER for the default
Full Name []: Room Number []: Work Phone []:
Home Phone []: Other []:
[91mUse of uninitialized value $answer in chop at /usr/sbin/adduser line 589.
[0m
[91mUse of uninitialized value $answer in pattern match (m//) at /usr/sbin/adduser line 590.
[0m
Is the information correct? [Y/n]
źródło
useradd --create-home --shell /bin/bash
jest bardziej zrozumiały / czytelny dla współpracowników.RUN echo 'newuser:newpassword' | chpasswd
--no-log-init
opcjiuseradd
.USER newuser
. Jeśli potrzebujesz również uprawnień użytkownika root, możesz również dołączyćadduser <username> sudo
./bin/sh: useradd: not found
alpine linuxAby uniknąć interaktywnych pytań według adduser, możesz wywołać je za pomocą następujących parametrów:
Ten
--gecos
parametr służy do ustawiania dodatkowych informacji. W tym przypadku jest po prostu pusty.W systemach z busybox (takich jak Alpine) użyj
Zobacz adduser busybox
źródło
adduser
rozwiązanie wysokiego poziomu jest ogólnie preferowane niż korzystanie z funkcji niskiego poziomu, takich jakuseradd
.adduser: unrecognized option: gecos
To nie wydaje się działać na Alpine.Ubuntu
Wypróbuj następujące linie w
Dockerfile
:useradd
opcje (patrzman useradd
:):-r
,--system
Utwórz konto systemowe. patrz: Implikacje dotyczące tworzenia kont systemowych-m
,--create-home
Utwórz katalog domowy użytkownika.-d
,--home-dir HOME_DIR
Katalog domowy nowego konta.-s
,--shell SHELL
Powłoka logowania nowego konta.-g
,--gid GROUP
Nazwa lub identyfikator grupy podstawowej.-G
,--groups GROUPS
Lista grup uzupełniających.-u
,--uid UID
Podaj identyfikator użytkownika. patrz: Zrozumienie działania identyfikatorów UID i GID w kontenerach Docker-p
,--password PASSWORD
Zaszyfrowane hasło nowego konta (npubuntu
.).Ustawienie domyślnego hasła użytkownika
Aby ustawić hasło użytkownika, dodaj
-p "$(openssl passwd -1 ubuntu)"
douseradd
polecenia.Możesz też dodać następujące wiersze do
Dockerfile
:Pierwszą instrukcją powłoki jest upewnienie się, że
-o pipefail
opcja jest wcześniej włączonaRUN
z rurką w niej. Czytaj więcej: Hadolint: Linting your Dockerfile .źródło
root
grupa nie oznacza, że mają dostęp do katalogu głównego, po prostu mają większy dostęp do odczytu niektórych plików (takich jak logi), co jest przydatne, ale zależy to od projektu.Dodawanie użytkownika w oknie dokowanym i uruchamianie aplikacji pod tym użytkownikiem jest bardzo dobrą praktyką z punktu widzenia bezpieczeństwa. Aby to zrobić, polecam poniższe kroki:
Powyższe kroki to pełny przykład kopiowania plików projektu NodeJS, tworzenia grupy użytkowników i użytkownika, przypisywania uprawnień do folderu projektu, przełączania do nowo utworzonego użytkownika i uruchamiania aplikacji pod tym użytkownikiem.
źródło
Możesz naśladować plik Dockerfile typu open source, na przykład:
Węzeł: node12-github
superset: superset-github
Myślę, że to dobry sposób na podążanie za open source.
źródło
Każdy ma swojego ulubionego, a to jest moje:
Odniesienie: man useradd
RUN
Linia doda użytkownika i grupęapp
:Użyj bardziej szczegółowej nazwy, niż
app
jeśli obraz ma zostać ponownie użyty jako obraz podstawowy. Na marginesie, uwzględnij,--shell /bin/bash
jeśli naprawdę potrzebujesz.Częściowe uznanie: odpowiedź Ryana M.
źródło
Możesz to zrobić w ten sposób.
Pierwsze polecenie tworzy grupę o nazwie demo . Drugie polecenie tworzy użytkownika demonstracyjnego i dodaje go do wcześniej utworzonej grupy demonstracyjnej .
Flagi oznaczają:
źródło
Dodaj tę linię do pliku Docker (możesz w ten sposób uruchomić dowolne polecenie linux)
źródło