Właściwy sposób dodania konta użytkownika za pomocą skryptu bash


15

Oto kod skryptu, którego teraz używam:

getent group $MYGROUP
if [ $? -ne 0 ] ; then
    sudo su -c "groupadd $MYGROUP"
fi
sudo su -c "useradd mynewuser -p mypassword -m -g $PRIMARYGRP -G $MYGROUP"

To podejście działa dobrze w openSuse. Ale istnieje kilka problemów z kontem użytkownika, które tworzy na Ubuntu, więc szukam tutaj pomocy.

  • monit terminala nie jest ustawiony ( echo $PS1nic nie zwraca)
  • klawisze strzałek i klawisz tab nie działają poprawnie w terminalu
  • hasło nie działa (chociaż nadal nie jestem do końca jasne, na czym polega ten problem)
  • prawa / etc / sudoers ustawione dla tego nowego użytkownika nie są honorowane

Jeśli zamiast tego ręcznie utworzę użytkownika za pomocą adduser(zamiast useradd), nie mam tych problemów na Ubuntu. Ale nie mogę używać adduserna openSuse (afaik). Dlatego potrzebuję niewyłącznego dla Debiana skryptu lub metody dodawania kont użytkowników za pomocą mojego skryptu bash, który działa na Ubuntu (i nie przestaje działać na innych dystrybucjach).

Na koniec chciałbym zrozumieć różnice między adduseri useradd. Na przykład chcę wiedzieć, który katalog szkieletowy jest używany, adduserponieważ może to być przyczyną, że useraddnie działa zgodnie z oczekiwaniami (ponieważ właśnie zaakceptowałem domyślny).

Dzięki


1
Co do różnicy: z useradd man page ( man useradd): useradd to narzędzie niskiego poziomu do dodawania użytkowników. W Debianie administratorzy zwykle powinni zamiast tego używać adduser (8).
guntbert

Również sudo su -c "cmd arg1 arg2"jest równoważne z sudo cmd arg1 arg2.
enzotib

@enzotib dzięki. Dobrze wiedzieć, że są one równoważne na Ubuntu, ponieważ nie są na openSuse. Dlatego będę nadal używać sudo su -c "cmd arg1 arg2", aby działał wszędzie, gdzie go potrzebuję.
MountainX

adduserjest skryptem perla o długości przekraczającej 1000 wierszy, więc dla różnic możesz zajrzeć do skryptu.
enzotib

@enzotib Tak, czytałem, adduserale nie znam perla. To nie jest dla mnie dobre podejście.
MountainX

Odpowiedzi:


14

Moje rozwiązanie dostarczono tutaj: /unix/82923/proper-way-to-add-a-user-account-via-bash-script przez Ulrich Schwarz i Joseph R. . Najważniejsze, co musiałem zrobić, to dodać -s /bin/bashdo mojego istniejącego useraddpolecenia i usunąć, -p passwordktóry oczekuje zaszyfrowanego hasła.

sudo su -c "useradd mynewuser -s /bin/bash -m -g $PRIMARYGRP -G $MYGROUP"

Następnie zrób to:

sudo chpasswd << 'END'
mynewuser:password
END

6
echo mynewuser:password | sudo chpasswdteż działa.
Felix Rabe

10

To zadziała.

sudo adduser myuser --gecos "First Last,RoomNumber,WorkPhone,HomePhone" --disabled-password
echo "myuser:password" | sudo chpasswd

Jest to łatwiejsze rozwiązanie niż zaakceptowana odpowiedź.
Steven

2

mój skrypt, który automatycznie tworzy konto usługi z logowaniem klucza ssh i bez hasła

#add service group/user
addgroup service-runner
useradd devops-service --create-home --shell /bin/bash --groups service-runner
#gpasswd -a devops-service sudo #allowing sudo requires password, and not a good idea for a service account.
mkdir /home/devops-service/.ssh
chmod 700 /home/devops-service/.ssh
cat devops-service@v2-20150312.pub >> /home/devops-service/.ssh/authorized_keys
chown devops-service:devops-service /home/devops-service -R

fyi, po użyciu mojego skryptu widzę, że „sudo” jest prawie bezużyteczne z kontem usługi, ponieważ brak hasła oznacza, że ​​nie można używać sudo. Możesz go skonfigurować tak, aby zezwalał na sudo bez hasła, ale nie wiem, jak to zautomatyzować w skrypcie. Prawdopodobnie konto usługi z sudo bez hasła nie jest dobrym pomysłem (bezpieczeństwa).
JasonS

0

Podejrzewam, że możesz po prostu użyć warunku w skrypcie, na przykład

if grep -q 'Ubuntu\|Debian' /etc/issue; then
    adduser .....
else
    useradd .....
fi

(nie może zweryfikować, czy plik /etc/issuejest obecny w OpenSUSE, w przeciwnym razie możesz postawić warunek istnienia takiego pliku).


Dlaczego nie po prostu przetestować istnienia adduserz if command -v adduser >/dev/null; thenlub podobnych? To jedyna rzecz, która ma znaczenie, a nie podstawowe dystrybucje. Istnieją także inne dystrybucje poza Debian / Ubuntu i OpenSUSE.
David Foerster,
Korzystając z naszej strony potwierdzasz, że przeczytałeś(-aś) i rozumiesz nasze zasady używania plików cookie i zasady ochrony prywatności.
Licensed under cc by-sa 3.0 with attribution required.