useradd: não é possível criar o diretório

4

Um servidor do CentOS 7 precisa ter um novo usuário criado com um diretório pessoal específico e o shell definido da seguinte forma, retirado de :

sudo /usr/sbin/useradd --create-home --home-dir /opt/atlassian/bitbucket --shell /bin/bash atlbitbucket

No entanto, quando esse comando é executado em um servidor do CentOS 7, o comando falha com o seguinte erro:

useradd: cannot create directory /opt/atlassian/bitbucket

Da mesma forma, criar o diretório /opt/atlassian/bitbucket antes resulta no seguinte erro:

useradd: warning: the home directory already exists.
Not copying any file from skel directory into it.

Quais alterações específicas precisam ser feitas nesses comandos, para que o novo usuário atlbitbucket possa ser criado com sucesso?

A saída completa do terminal:

O seguinte é a série completa de comandos e respostas no terminal do CentOS 7:

Criando manualmente os diretórios:

login as: my_sudoer_user
[email protected]'s password:
Last login: Mon May 15 14:00:18 2017
[my_sudoer_user@localhost ~]$ sudo mkdir /opt/atlassian/
[sudo] password for my_sudoer_user:
[my_sudoer_user@localhost ~]$ sudo mkdir /opt/atlassian/bitbucket
[my_sudoer_user@localhost ~]$ sudo /usr/sbin/useradd --create-home --home-dir /opt/atlassian/bitbucket --shell /bin/bash atlbitbucket
useradd: warning: the home directory already exists.
Not copying any file from skel directory into it.

[my_sudoer_user@localhost ~]$ sudo rmdir /opt/atlassian/bitbucket
[my_sudoer_user@localhost ~]$ sudo rmdir /opt/atlassian/

A sintaxe useradd recomendada:

[my_sudoer_user@localhost ~]$ sudo /usr/sbin/useradd --create-home --home-dir /opt/atlassian/bitbucket --shell /bin/bash atlbitbucket
useradd: user 'atlbitbucket' already exists

[my_sudoer_user@localhost ~]$ sudo userdel -r atlbitbucket
userdel: atlbitbucket home directory (/opt/atlassian/bitbucket) not found

[my_sudoer_user@localhost ~]$ sudo /usr/sbin/useradd --create-home --home-dir /opt/atlassian/bitbucket --shell /bin/bash atlbitbucket
useradd: cannot create directory /opt/atlassian/bitbucket
[my_sudoer_user@localhost ~]$

adduser em vez de useradd

Eu então tentei @ sugestão de Terdon desta outra postagem para usar adduser , mas recebeu o mesmo erro, da seguinte forma:

[my_sudoer_user@localhost ~]$ sudo userdel -r atlbitbucket
[sudo] password for my_sudoer_user:
userdel: atlbitbucket mail spool (/var/spool/mail/atlbitbucket) not found
userdel: atlbitbucket home directory (/opt/atlassian/bitbucket) not found
[my_sudoer_user@localhost ~]$ sudo adduser --create-home --home-dir /opt/atlassian/bitbucket --shell /bin/bash atlbitbucket
adduser: cannot create directory /opt/atlassian/bitbucket
[my_sudoer_user@localhost ~]$

Sintaxe mais curta:

Então tentei @ sugestão de rajcoumar do mesmo outro post , mas obteve os mesmos resultados seguintes:

[my_sudoer_user@localhost ~]$ sudo userdel -r atlbitbucket
userdel: atlbitbucket mail spool (/var/spool/mail/atlbitbucket) not found
userdel: atlbitbucket home directory (/opt/atlassian/bitbucket) not found
[my_sudoer_user@localhost ~]$ sudo useradd -m -d /opt/atlassian/bitbucket -s /bin/bash atlbitbucket
useradd: cannot create directory /opt/atlassian/bitbucket
[my_sudoer_user@localhost ~]$

Elevando para root :

Eu até atualizei para root apenas para ver se o problema poderia ser resolvido executando o comando como root, mas ainda assim recebi o seguinte erro:

[my_sudoer_user@localhost ~]$ su -
Password:
Last login: Mon May 15 14:07:11 PDT 2017 on ttyS0
[root@localhost ~]# /usr/sbin/useradd --create-home --home-dir /opt/atlassian/bitbucket --shell /bin/bash atlbitbucket
useradd: cannot create directory /opt/atlassian/bitbucket
[root@localhost ~]#
    
por CodeMed 16.05.2017 / 00:07

2 respostas

2

O código do useradd chama um mkdir função de biblioteca para (tentar) criar o diretório especificado. useradd verifica o código de retorno, mas apenas por ser diferente de zero; neste caso, suspeito que o mkdir esteja retornando ENOENT -- A directory component in pathname does not exist or is a dangling symbolic link porque o diretório pai (/ opt / atlassian) não existia ou foi removido durante suas tentativas de adicionar o usuário.

Como Kusalananda / roaima apontam, a solução mais simples aqui é criar a estrutura de diretório pai antes de chamar useradd:

  1. sudo mkdir -p /opt/atlassian
  2. sudo /usr/sbin/useradd --create-home --home-dir /opt/atlassian/bitbucket --shell /bin/bash atlbitbucket
por 16.05.2017 / 12:51
3

Os comandos que você usa para criar o usuário e seu diretório pessoal só poderão criar o diretório pessoal se o pai imediato do diretório inicial já existir. Ele falhará se não puder encontrar a pasta pai em que o diretório inicial deve ir ou se o diretório inicial já existe.

Isso significa que

$ mkdir -p /some/dir/myhome
$ useradd --home-dir /some/dir/myhome ...

falhará, pois /some/dir/myhome existe, enquanto

$ rm -rf /some/dir
$ useradd --home-dir /some/dir/myhome ...

falhará, pois /some/dir não existe.

Apenas certifique-se de que o diretório no qual o diretório inicial deve ser criado exista, ou seja, na sua situação,

mkdir -p /opt/atlassian
    
por 16.05.2017 / 08:32