cria diretórios iniciais depois de criar usuários

57

Eu criei alguns usuários com:

$ useradd john

e esqueci de especificar o parâmetro -m para criar o diretório inicial e ter os arquivos de esqueleto copiados para cada usuário. agora eu quero fazer isso, e não quero recriar todos os usuários (deve haver uma maneira mais fácil). então, existe alguma maneira de criar os diretórios do usuário e copiar os arquivos de esqueleto?

Eu pensei em criar os diretórios, chowning-los para o usuário correspondente, copiando todos os arquivos de esqueleto e chowning-los para o usuário correspondente. mas se houver um comando como useradd -m que não crie o usuário novamente, mas crie os diretórios, seria melhor.

    
por cd1 09.09.2009 / 16:33

12 respostas

15

Isso pode soar como uma ideia tola, mas se os usuários não estiverem realmente fazendo nada, você pode fazer:

cat /etc/passwd | cut -f 1 -d : >/tmp/users.list

Em seguida, edite /tmp/users.list para conter apenas os usuários que você deseja. Então faça:


for i in 'cat /tmp/users.list'
do
    userdel $i
    useradd -m $i
done

No entanto, muitas distribuições baseadas em Redhat criarão um novo diretório inicial quando você fizer login pela primeira vez, desde que ele seja especificado em / etc / passwd onde o diretório deve estar.

Para testar isso, faça um "su -" e veja se ele faz "a coisa certa". Se isso não acontecer, o script acima funcionará muito bem, eu acho.

    
por 09.09.2009 / 17:02
85

Você também pode usar mkhomedir_helper

Usage: /sbin/mkhomedir_helper <username> [<umask> [<skeldir>]]
    
por 17.05.2013 / 05:59
15

Você precisará criar o diretório de usuários manualmente. Isso requer três etapas:

  1. Crie um diretório em conformidade com /etc/passwd , geralmente já haverá uma entrada / home / login.
  2. Copiar arquivos iniciais de / etc / skel
  3. Por fim, defina as permissões certas:

    • mkdir /home/YOU
    • cd /home/YOU
    • cp -r /etc/skel/. .
    • chown -R YOU.YOURGROUP .
    • chmod -R go=u,go-w .
    • chmod go= .

BTW: Eu sempre sinto falta da opção -m para useradd também. Pelo menos os sistemas baseados em Debian devem ter um comando adduser , o qual eu recomendo sobre useradd. Se você perdeu a opção -m , também pode valer a pena considerar deluser e, em seguida, recriar o usuário com as opções adequadas.

Editar: Adicionado -r para copiar também diretórios.

    
por 12.05.2012 / 18:14
12
mkdir -p /home/john
chown john:john /home/john
usermod -d /home/john john

Isso deve fazer o truque que eu acredito

    
por 09.09.2009 / 16:49
9

Você pode usar algo como pam_mkhomedir para evitar que isso seja um problema para qualquer usuário no futuro. pam_mkhomedir é um módulo PAM que cria automaticamente o diretório pessoal de um usuário no login, se ele não existir, e preenche-o com arquivos de / etc / skel (ou qualquer diretório skel que você especificar).

Essa também é uma abordagem bem escalável porque continuará a resolver esse problema se você mudar o repositório do usuário para um serviço de diretório como o LDAP no futuro.

    
por 12.05.2012 / 18:29
4

No meu caso, o volume inicial estava corrompido e decidi reconstruí-lo do zero, já que não há muitos dados envolvidos, mas quero manter as informações de login dos usuários, então recriou os diretórios base manualmente com este script:

#!/bin/bash
cat /etc/passwd | while IFS=: read n x i g c d r
do
  # my system has uid started at 1000, but has nfsnobody at 65534:
  if [[ "$i" -ge 1000 && "$i" -le 65000 && ! -x "$d" ]]
  then
    cp -av /etc/skel "$d"
    chown -R "$i:$g" "$d"
    # may needed in SELinux system:
    restorecon -R "$d"
    # add your chmod as your need:
    chmod -R o-rw "$d"
  fi
done
    
por 08.10.2012 / 18:45
2

Se você editar /etc/login.defs para conter

CREATE_HOME yes

os diretórios home serão automaticamente criados para futuros usuários, a menos que você diga ao sistema que não para fazê-lo.

Outra opção é usar o PAM para logins e usar o módulo pam_mkhomedir para criar automaticamente o homedir no primeiro login.

    
por 12.12.2013 / 09:28
0

Entre com o usuário john e escreva a partir de um shell:

xdg-user-dirs-update

É isso! Não use sudo ou su, você não precisa de acesso root para criar diretórios. De uma conta root, você pode usar:

sudo -u john xdg-user-dirs-update

Dessa forma, você executará o comando como john, o que pode ser útil se você cometeu o erro com mais de um usuário.

    
por 07.02.2018 / 20:44
-1

Meu primeiro passo depois de fazer um useradd é para su - <user> .

Cria os diretórios home, copia esqueletos, etc - pelo menos na caixa CentOS 4 que eu faço com mais frequência.

    
por 09.09.2009 / 16:35
-1

Isso é exatamente o que o comando mkhomedir_helper $USERNAME faz.

    
por 18.06.2015 / 10:43
-2

Você poderia simplesmente editar o / etc / passwd. O segundo ao último campo é o diretório pessoal do usuário.

greeblesnort:x:1000:1000:greeblesnort,,,:/home/greeblesnort:/bin/bash
    
por 09.09.2009 / 21:19
-2
usermod -d /home/john john

ou

usermod --home /home/john john

e leia

man usermod

;)

    
por 06.04.2015 / 11:23