useradd:无法创建目录

useradd:无法创建目录

CentOS 7 服务器需要创建一个具有特定主目录和 shell 的新用户,定义如下,取自此链接中的说明

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

但是,当该命令在 CentOS 7 服务器上运行时,该命令会失败并出现以下错误:

useradd: cannot create directory /opt/atlassian/bitbucket

同样,/opt/atlassian/bitbucket预先创建目录会导致以下错误:

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

需要对这些命令进行哪些具体更改才能atlbitbucket成功创建新用户?


完整的终端输出:

以下是 CentOS 7 终端中完整的一系列命令和响应:

手动创建目录:

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/

推荐的useradd语法:

[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代替useradd

然后我尝试了@terdon 在其他帖子中的建议改为使用adduser,但得到相同的错误,如下:

[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 ~]$

较短的语法:

然后我尝试了@rajcoumar 来自同一其他帖子的建议,但得到了相同的以下结果:

[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 ~]$

提升至root

我什至升级到root只是为了看看是否可以通过以 root 身份运行命令来解决问题,但我仍然收到以下错误:

[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 ~]#

答案1

用户添加代码打电话给目录库函数(尝试)创建指定的目录。 useradd 检查返回码,但仅检查是否非零;在这种情况下,我怀疑 mkdir 正在返回,ENOENT -- A directory component in pathname does not exist or is a dangling symbolic link因为父目录 (/opt/atlassian) 不存在,或者在您尝试添加用户期间已被删除。

正如 Kusalananda / roaima 指出的,这里最简单的解决方案是在调用 useradd 之前创建父目录结构:

  1. sudo mkdir -p /opt/atlassian
  2. sudo /usr/sbin/useradd --create-home --home-dir /opt/atlassian/bitbucket --shell /bin/bash atlbitbucket

答案2

仅当主目录的直接父目录已存在时,用于创建用户及其主目录的命令才能创建主目录。如果找不到主目录应该所在的父文件夹,或者主目录已经存在,它将失败。

这意味着

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

将会失败,因为/some/dir/myhome存在,而

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

将会失败,因为/some/dir不存在。

只需确保主目录中要创建的目录存在,即在您的情况下,

mkdir -p /opt/atlassian

相关内容