Cria um .sh que define um novo nome de usuário, nome de host e senha

9

Estou distribuindo uma VM aos meus alunos para um curso de programação para iniciantes. Para velocidade, em vez de fazê-los instalar o Ubuntu do zero, estou planejando dar a eles uma imagem totalmente configurada que eles possam executar.

Para configurá-lo, eu dei a ele um nome de host, nome de usuário e senha sacrificial. Qual é a maneira mais limpa de mudar isso para os alunos quando eles estão funcionando?

Eu tenho até o ponto gist , que tem algum progresso não confiável com o nome do host, mas o nome de usuário é resistindo-me a mudar isso.

Eu gostaria que fosse um processo tão indolor quanto possível, como isso deveria acontecer em seu primeiro laboratório.

É inteiramente possível que haja uma abordagem completamente diferente que eu deveria tomar. Estou aberto a todas as sugestões.

#!/bin/bash
clear
toilet  "     CODE1161     "  --metal --font future
echo    ""
toilet  "Let's get started!"  --metal --font future
echo    ""
echo    "We need to make this computer be YOURS"
echo    "We need a name for you and your computer, make it short or it'll take up a lot of space."
echo    "My computer is called um and my name is ben, so I get ben@um:~$ as my command prompt."
echo    ""
read -p "Enter a name for your computer:"  compname
read -p "Enter your name: "  username
echo    ""
toilet  "$username@$compname~$"  --gay --font wideterm
echo    ""
echo    "What do you think? If you hate it, press ctrl+c and do this again"
read -p "otherwise, just press enter." sacrificial

# set the host name, in a million places, for some unknown reason.
echo "1"
sed -i "/127\.0\.1\.1\s*vc/ { c \
127.0.1.1   $compname
}" /etc/hosts
echo "2"
sudo hostname -b $compname
echo "3"
sudo hostnamectl set-hostname $compname
echo "4"
sudo groupadd $username
echo "5"
sudo usermod -d /home/$username -m -g $username -l $username ben

    
por Ben 01.02.2017 / 22:02

2 respostas

8

Por que não apenas usar uma instalação OEM para isso? Não é tão bonito, mas faz o trabalho. Se você quiser seguir esse caminho, veja a excelente resposta do izx a essa pergunta: Como faço para pré-instalar o Ubuntu para alguém (instalação OEM)?

Basicamente, o sistema irá (na primeira inicialização) solicitar ao usuário um monte de informações para personalizar sua máquina. Isso inclui o idioma, o local, o nome de usuário, o nome do host, a senha e assim por diante. Basicamente, tudo o que seu computador normalmente solicitará para uma instalação.

Isto é exatamente para o que as imagens OEM são destinadas, e elas fazem um ótimo trabalho. Além disso, você dará aos seus alunos uma pequena amostra da experiência "instalar o Ubuntu". Porém, o Ubuntu instala não é exatamente doloroso. Você provavelmente pode fazer isso em uma única aula e dar aos seus alunos um pouco de lição de casa para personalizar e explorar sua VM. Além disso, o particionamento é doloroso divertido!

Voltar para o problema em questão (e uma resposta à sua pergunta atual ) .....

Vamos analisar man usermod para obter uma explicação sobre o que está acontecendo:

CAVEATS
   You must make certain that the named user is not executing any
   processes when this command is being executed if the user's numerical
   user ID, the user's name, or the user's home directory is being
   changed.  usermod checks this on Linux, but only check if the user is
   logged in according to utmp on other architectures.

Basicamente, isso significa que não podemos alterar o UID de um usuário, seu nome de usuário, diretório pessoal ou qualquer coisa do tipo, se o usuário estiver logado.

Então, podemos fazer algumas coisas divertidas para configurar isso na próxima inicialização do sistema. Em vez de o seu script fazer o trabalho, fazemos com que o seu script crie outro script para fazer todo o trabalho pesado e manipulação. Um exemplo disso:

# Make the first-run script
touch /etc/init.d/firstrun-setup.sh

# Add in user modifier
echo "usermod -d /home/$username -m -g $username -l $username ben" >> /etc/init.d/firstrun-setup.sh

# Add in group rename
echo "groupmod -n $username ben" >> /etc/init.d/firstrun-setup.sh

# Add in password expiry
echo "passwd -e $username" >> /etc/init.d/firstrun-setup.sh

# Add in file self-destruct
echo "rm /etc/init.d/firstrun-setup.sh" >> /etc/init.d/firstrun-setup.sh

# Mark the file as executable
chmod a+x /etc/init.d/firstrun-setup.sh

# Reboot the computer
reboot

Basicamente, ao fazer isso, você está "enfileirando" eventos para executar na próxima inicialização do sistema. Isso será executado antes que o userland aconteça, portanto o sistema executará esses comandos como root. Portanto, o usuário ben não estará logado e o sistema não irá reclamar.

Você ainda pode precisar adicionar comandos adicionais para isso para permitir mais personalização (como definir o nome real, etc). No entanto, isso é opcional e só precisa ser feito se você quiser que ocorra durante o script de configuração.

No entanto, pode ser uma boa ideia apenas criar um novo usuário para os alunos e manter sua conta sacrificial em vigor. Desta forma, se algo acontecer, você pode entrar e reparar / administrar sua máquina se for necessário. É claro que, se você está dando aos seus alunos acesso de administrador às VMs, isso é um ponto discutível, já que eles podem excluir o usuário "instrutor" porque são estudantes.

    
por Kaz Wolfe 20.02.2017 / 03:36
0

Na tela de login, faça-os pressionar ctrl alt F2 e faça o login como ben do terminal que abre e executa

sudo passwd

E dê a todos a mesma senha para o root, ou seja, o número do curso, então, se algo quebrar, você poderá entrar e consertá-lo. Em seguida, faça com que eles efetuem logout digitando exit , e efetuem login como root com sua nova senha root e executem o script (talvez seja necessário modificá-lo para que ele altere o ben user e não o root).

Ou, faça-os logar como ben a partir do terminal pressionando ctrl alt F2 (como antes) na tela de login e eles então executam o script de lá. Isso pode funcionar porque, como Muru e Kaz Wolfe apontaram na resposta anterior, o usuário não pode estar executando nenhum processo, e o login através do terminal não deve iniciar nenhum processo. , como X ou Ubuntu-Desktop , ou outros processos do usuário que interferem em usermod . (Eu não sei se isso funciona, eu não tentei, mas vale a pena tentar).

    
por Thomas Bodrey 21.02.2017 / 07:51