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 之前创建父目录结构:
sudo mkdir -p /opt/atlassian
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