Maneira correta de adicionar uma conta de usuário via script bash

12

Aqui está o código de script que estou usando agora:

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"

Essa abordagem funciona bem no openSuse. Mas há vários problemas com a conta de usuário que ele cria no Ubuntu , então estou procurando ajuda aqui.

  • o prompt do terminal não está definido ( echo $PS1 não retorna nada)
  • as teclas de seta e a tecla tab não funcionam corretamente no terminal
  • a senha parece não funcionar (embora ainda não esteja claro exatamente qual é esse problema)
  • os direitos de / etc / sudoers definidos para este novo usuário não são honrados

Se, em vez disso, eu criar manualmente o usuário com adduser (em vez de useradd), não tenho esses problemas no Ubuntu. Mas eu não posso usar adduser no openSuse (afaik). Portanto, eu preciso de um script ou método não exclusivo do Debian para adicionar contas de usuários através do meu script bash que funciona no Ubuntu (e não para de trabalhar em outras distros).

Por fim, gostaria de entender as as diferenças entre adduser e useradd . Por exemplo, quero saber qual diretório de esqueleto é usado por adduser , já que essa pode ser a razão pela qual useradd não está funcionando como esperado (porque acabei de aceitar o padrão).

Obrigado

    
por MountainX 13.07.2013 / 22:07

4 respostas

11

Minha solução foi fornecida aqui: link por Ulrich Schwarz e Joseph R. . A principal coisa que tive que fazer foi adicionar -s /bin/bash ao meu comando useradd e remover -p password , que espera uma senha criptografada.

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

Então faça isso:

sudo chpasswd << 'END'
mynewuser:password
END
    
por MountainX 19.07.2013 / 18:17
4

Isso funcionará.

sudo adduser myuser --gecos "First Last,RoomNumber,WorkPhone,HomePhone" --disabled-password
echo "myuser:password" | sudo chpasswd
    
por Ankur Devani 27.12.2016 / 07:20
2

meu script que constrói automaticamente uma conta de serviço com login de chave ssh e sem senha

#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 [email protected] >> /home/devops-service/.ssh/authorized_keys
chown devops-service:devops-service /home/devops-service -R
    
por JasonS 12.03.2015 / 22:40
0

Suponho que você pode simplesmente usar uma condição em seu script, algo como

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

(não é possível verificar se o arquivo /etc/issue está presente no OpenSUSE, caso contrário você pode colocar a condição na existência de tal arquivo).

    
por enzotib 13.07.2013 / 23:51