Intereting Posts
Не может ssh на мой сервер из домашнего linux, но может ssh на тот же сервер из окон Использование вывода mpv ASCII с w3m Как уменьшить размер pdf-файла, содержащего изображения? Любая программа, подобная `sudo`, чтобы получить root, если два пользователя вводят пароль? Как получить значение последнего дня в текущем месяце в awk вход в корне молча Расширяет раздел с использованием другого диска Утилита командной строки для чтения табличных данных Каковы некоторые достойные замены альт-табу для Gnome? Профиль AppArmor Firefox позволяет читать и писать в любом месте HOME, если явно не используется Перекрестно скомпилируйте ядро ​​малины pi Как запустить графический интерфейс Deja Dup в Debian 8.1? не удалось выполнить несколько команд на нескольких Linux-машинах? ssh введите второй сервер без пароля? Как я могу взаимодействовать с домашним маршрутизатором через устройство в локальной сети с помощью ssh?

useradd: невозможно создать каталог

Для сервера 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:

  1. sudo mkdir -p /opt/atlassian
  2. 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