Домашний каталог не создается


80

Я пытаюсь понять системное администрирование в Ubuntu. Итак, в качестве примера я создаю фиктивного пользователя, используя

sudo useradd -d /home/linda linda

и passwdсоздать пароль. Я проверяю, что запись была сделана с использованиемcat /etc/passwd

linda:x:1004:1004::/home/linda:/bin/sh

Однако, когда я su - linda, я получаю

No directory, logging in with HOME=/

и действительно, домашний каталог не был создан. Что мне не хватает?

Благодарю.

Ответы:


87

man useradd состояния:

useradd is a low level utility for adding users. On Debian,
administrators should usually use adduser(8) instead.

Обратите внимание low level utility

Чтобы добавить пользователя, используйте adduserвместо этого. Это утилита более высокого уровня.


Более того, глядя на -dвариант:

   -d, --home HOME_DIR
       The new user will be created using HOME_DIR as the value for the
       user's login directory. The default is to append the LOGIN name to
       BASE_DIR and use that as the login directory name. The directory
       HOME_DIR does not have to exist but will not be created if it is
       missing.

The directory will not be created if it is missing.

Обычно держитесь подальше useradd, используйте adduserвместо этого.


2
В защиту OP, когда я читал «На Debian», я думал, что это значит для Debian, а не для дистрибутивов Ubuntu. Я знаю, что Ubuntu построен на Debian, но думал, что проводится различие.
Кит Беннетт

1
Я использовал, adduserно все же созданный домашний каталог содержит только файл examples.desktopи ничего больше. Как я могу заставить Ubuntu создавать папки по умолчанию для рабочего стола, загрузок и так далее? (Я вошел через ssh)
mcExchange

Привет, извините за поздний ответ и только предположение, но я думаю, что эти папки создаются автоматически при первом входе в систему GUI. Просто думал, что люди все еще могут приземлиться здесь;)
derHugo

adduserтакже не создаст каталог, если кто-то изменил CREATE_HOME в /etc/login.defs на «нет». Вы можете переопределить это с -mфлагом.
Нумен

31

Вы можете исправить это, просто создав домашний каталог.

mkdir /home/linda
chown linda:linda /home/linda

попробуйте войти снова, и это должно работать.


13

В соответствии с man useradd, -d /home/lindaопция не будет создавать каталог /home/linda, если этого не хватает. Итак, вы должны создать его вручную. Для этого выполните следующие команды в терминале:

sudo -i                            #to get root privileges
mkdir /home/linda                  #to create the directory /home/linda
cp -rT /etc/skel /home/linda         #to populate /home/linda with default files and folders
chown -R linda:linda /home/linda   #to change the owner of /home/linda to user linda

Смотрите также: Как сделать домашнюю папку пользователя после создания учетной записи?


7

Посмотрите /etc/defaults/useradd, хотите ли вы изменить настройки по умолчанию. Использование:

useradd -m -d /home/joe -s /bin/bash,


«Согласно man useradd, опция -d / home / linda не создаст каталог / home / linda», так что нет, это не решение.
astrojuanlu

Согласно справочной странице useradd, для этого и используется флаг -m: -m, --create-home Create the user's home directory if it does not exist. The files and directories contained in the skeleton directory (which can be defined with the -k option) will be copied to the home directory. useradd will create the home directory unless CREATE_HOME in /etc/login.defs is set to no.@astrojuanlu
Myles

5

Вы также можете изменить /etc/pam.d/common-sessionего так, чтобы домашний каталог пользователя создавался при первом входе в систему. Добавьте следующую строку в этот файл.

...
session required pam_mkhomedir.so

Это особенно полезно, если ваша система находится в сети, где пользователи управляются внешним образом на вашем компьютере, например, LDAP.


5

Используйте -mвместо -d, так что каталог будет создан для вас:

sudo useradd -m linda

Кроме того, если lindaэто обычный пользователь, вы можете использовать его /bin/bashпо умолчанию shell:

sudo useradd -m linda -s /bin/bash


3

Добавьте приведенную ниже запись /etc/login.defsи сохраните:

CREATE_HOME yes

Теперь попробуйте создать учетные записи пользователей. Это создаст домашний каталог.


Это сработало для меня. Мне нужно было иметь базовый скрипт, который будет удаленно добавлять / управлять пользователями в разных версиях Linux. После этого изменения мой код дает одинаковые результаты на всех серверах. Благодарю.
sdkks

1

Используйте adduser.

DESCRIPTION

 adduser  and  addgroup  add users and groups to the system according to
   command    line    options    and    configuration    information    in
   /etc/adduser.conf.   They  are  friendlier  front ends to the low level
   tools like useradd, groupadd and usermod programs, by default  choosing
   Debian  policy conformant UID and GID values, creating a home directory
   with skeletal configuration, running a custom script,  and  other  fea
   tures.  adduser and addgroup can be run in one of five modes:

useraddВы должны добавить все варианты самостоятельно. В том числе разрешения и некоторые другие вещи. adduserделает это на основе нормальных значений по умолчанию (а также добавляет домашний каталог самостоятельно).

Если вам нужно использовать adduser, вам, вероятно, понадобится опция -b вместе с опцией -d!


1

Если /home/lindaнет, прежде чем вы добавите Линду как пользователя, вам также придется добавить --create-home.

sudo useradd --create-home linda

1

Наиболее вероятная причина, по которой вы не создали домашний каталог, заключается в том, что у вас не было CREATE_HOME yesin /etc/login.defs.

Вы можете исправить это, следуя советам @OmPS или @Radu Rădeanu.

Но так много способов преодолеть эту проблему в будущем, используя одну из следующих команд:

  • Результат sudo adduser linda

    Adding user 'linda'
    Adding new group 'linda' (1001) ...
    Adding new user 'linda' (1001) with group 'linda' ...
    Creating home directory '/home/linda' ...
    Copying files from '/etc/skel' ...
    ****Password confirmation****
    ****Name prompt****

    По умолчанию для adduser выбираются, /etc/adduser.confесли --homeопция не указана. Обратите внимание, что он также копирует /etc/skelсодержимое.

  • Использовать Adduser с --home

    sudo adduser --home /home/linda

То же, что и в предыдущем варианте, за исключением того, что вы можете захотеть, если домашний каталог пользователя отличается от имени пользователя, которое вы назначили.

  • Укажите базовый каталог для useraddкоманды:

    sudo useradd -b /home
  • Используйте login.defs: измените /etc/login.defsи добавьте строку ниже, прежде чем делать sudo useradd:

    CREATE_HOME   yes

Примечание: если вы делаете man login.defs, это в настоящее время говорит

Большая часть функциональности, которая раньше предоставлялась набором теневых паролей, теперь обрабатывается PAM. Таким образом, /etc/login.defs больше не используется passwd (1) или менее используется login (1) и su (1). Пожалуйста, обратитесь к соответствующим файлам конфигурации PAM.

  • Используйте PAM-модуль pam_mkhomedir: со man pam_mkhomedirстраницы добавьте следующую строку в /etc/pam.d/login:

    session  required  pam_mkhomedir.so skel=/etc/skel
Используя наш сайт, вы подтверждаете, что прочитали и поняли нашу Политику в отношении файлов cookie и Политику конфиденциальности.
Licensed under cc by-sa 3.0 with attribution required.