Домашній каталог не створюється


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
На захист ОП, коли я читав "Про Debian", я вважав, що це означає для Debian на відміну від дистрибутивів Ubuntu. Мені відомо, що Ubuntu побудований на Debian, але подумав, що це робиться різниця.
Кіт Беннетт

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

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

adduserне створить каталог також, якщо хтось змінив CREATE_HOME у /etc/login.defs на "ні". Ви можете замінити це -mпрапором.
Номенон

31

Ви можете це виправити, просто створивши домашній dir.

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 man, саме для цього використовується прапор -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робить це на основі розумних значень за замовчуванням (а також додає домашній dir сам).

Якщо вам потрібно використовувати adduser, можливо, вам потрібен варіант -b разом із опцією -d!


1

Якщо /home/lindaнемає, перш ніж ви додасте linda як користувач, вам також доведеться додати --create-home.

sudo useradd --create-home linda

1

Найбільш вірогідна причина, чому у вас не було створено домашнього каталогу, - це те, що у вас не було CREATE_HOME yesвходу /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вміст.

  • Використовуйте аддусер за допомогою --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.