Для сервера CentOS 7 должен быть создан новый пользователь с определенным домашним каталогом и оболочкой, определенными следующим образом, взятыми из инструкций по этой ссылке :
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 my_sudoer_user@private.lan.ip.addr'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 ~]$
Elevating To 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 ~]#
Код useradd вызывает библиотечную функцию mkdir, чтобы (попытаться) создать указанный каталог. 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
Команды, которые вы используете для создания пользователя и домашнего каталога, смогут создавать домашний каталог только в том случае, если ближайший родительский домашний каталог уже существует. Он не удастся, если он не сможет найти родительскую папку, куда должен идти домашний каталог, или если домашний каталог уже существует.
Это значит, что
$ 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