Katalog domowy nie jest tworzony

80

Próbuję zrozumieć administrację systemem w systemie Ubuntu. Na przykład tworzę fikcyjnego użytkownika przy użyciu

sudo useradd -d /home/linda linda

i passwdaby utworzyć hasło. Sprawdzam, czy dokonano wpisu za pomocącat /etc/passwd

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

Jednak kiedy ja su - lindato rozumiem

No directory, logging in with HOME=/

i faktycznie nie utworzono katalogu domowego. czego mi brakuje?

Dzięki.

tchakravarty
źródło

Odpowiedzi:

87

man useradd stwierdza:

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

Zanotuj low level utility

Aby dodać użytkownika, użyj adduserzamiast tego. Jest to narzędzie na wyższym poziomie.


Co więcej, patrząc na -dopcję:

   -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.

Ogólnie trzymaj się z daleka useradd, użyj adduserzamiast tego.

gniourf_gniourf
źródło
2
W obronie OP, kiedy czytałem „O Debianie”, pomyślałem, że to znaczy na Debianie, w przeciwieństwie do dystrybucji Ubuntu. Wiem, że Ubuntu jest oparty na Debianie, ale pomyślałem, że wprowadzono rozróżnienie.
Keith Bennett
1
Użyłem, adduserale nadal utworzony katalog domowy zawiera tylko plik examples.desktopi nic więcej. Jak mogę zmusić Ubuntu do utworzenia domyślnych folderów Pulpit, Pobrane pliki i tak dalej? (Jestem zalogowany przez ssh)
mcExchange
Cześć, przepraszam za spóźnioną odpowiedź i tylko zgadywanie, ale myślę, że te foldery są tworzone automatycznie przy pierwszym logowaniu GUI. Pomyślałem, że ludzie mogą tu nadal lądować;)
derHugo,
addusernie utworzy katalogu, jeśli ktoś zmienił CREATE_HOME w /etc/login.defs na „no”. Możesz to zmienić przy pomocy -mflagi.
Noumenon,
31

możesz to naprawić, po prostu tworząc katalog domowy.

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

spróbuj zalogować się ponownie, a to powinno działać.

OmPS
źródło
13

Zgodnie z man useradd, -d /home/lindaopcja ta nie będzie utworzyć katalog /home/linda, jeśli tego brakuje. Musisz więc utworzyć go ręcznie. Aby to zrobić, uruchom następujące polecenia w terminalu:

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

Zobacz także: Jak utworzyć folder domowy użytkownika po utworzeniu konta?

Radu Rădeanu
źródło
7

Sprawdź, /etc/defaults/useraddczy chcesz zmienić wartości domyślne. Posługiwać się:

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

fasolka szparagowa
źródło
„Według opcji man useradd opcja -d / home / linda nie utworzy katalogu / home / linda”, więc nie, to nie jest rozwiązanie.
astrojuanlu
Według strony manuala useradd, do tego właśnie służy flaga -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

Możesz również zmodyfikować, /etc/pam.d/common-sessionaby katalog domowy użytkownika był tworzony przy pierwszym logowaniu. Dodaj następujący wiersz do tego pliku.

...
session required pam_mkhomedir.so

Jest to szczególnie przydatne, jeśli system znajduje się w sieci, w której użytkownikami zarządza się zewnętrznie na komputerze, na przykład przez LDAP.

KevinC
źródło
5

Użyj -mzamiast -d, więc katalog zostanie utworzony dla Ciebie:

sudo useradd -m linda

Ponadto, jeśli lindajest normalnym użytkownikiem, możesz użyć jej /bin/bashjako domyślnej shell:

sudo useradd -m linda -s /bin/bash

p1100i
źródło
3

Dodaj poniższy wpis /etc/login.defsi zapisz:

CREATE_HOME yes

Teraz spróbuj utworzyć konta użytkowników. Spowoduje to utworzenie katalogu domowego.

kavin
źródło
To zadziałało dla mnie. Potrzebowałem podstawowego skryptu, który zdalnie doda / zarządza użytkownikami w różnych wersjach systemu Linux. Po tej zmianie mój kod generuje takie same wyniki na wszystkich serwerach. Dzięki.
sdkks
1

Użyj 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:

useraddmusisz sam dodać wszystkie opcje. W tym uprawnienia i niektóre inne rzeczy. adduserrobi to w oparciu o rozsądne wartości domyślne (i dodaje również sam katalog domowy).

Jeśli potrzebujesz użyć addusera, prawdopodobnie potrzebujesz opcji -b razem z opcją -d!

Rinzwind
źródło
1

Jeśli /home/lindanie jest obecny przed dodaniem linda jako użytkownik, musisz również dodać --create-home.

sudo useradd --create-home linda
Abel Tom
źródło
1

Najbardziej prawdopodobnym powodem dlaczego nie masz katalog domowy jest tworzony, ponieważ nie mają CREATE_HOME yesin /etc/login.defs.

Możesz to naprawić, postępując zgodnie z sugestiami @OmPS lub @Radu Rădeanu.

Ale jest wiele sposobów na rozwiązanie tego problemu w przyszłości za pomocą jednego z poniższych poleceń:

  • Wynik 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****
    

    Domyślne wartości dla adduser są wybierane, /etc/adduser.confjeśli --homeopcja nie jest określona. Pamiętaj, że kopiuje również /etc/skelzawartość.

  • Użyj adduser z --home

    sudo adduser --home /home/linda

Taki sam jak poprzednia opcja, z tą różnicą, że możesz tego chcieć, jeśli katalog domowy użytkowników jest inny niż nazwa użytkownika, którą przypisałeś.

  • Podaj katalog podstawowy do useraddpolecenia:

    sudo useradd -b /home
  • Użyj login.defs: zmodyfikuj /etc/login.defsi dodaj poniższy wiersz przed wykonaniem sudo useradd:

    CREATE_HOME   yes

Uwaga: jeśli tak man login.defs, to obecnie mówi

Wiele funkcji, które były wcześniej oferowane przez pakiet haseł typu shadow, jest teraz obsługiwanych przez PAM. Zatem /etc/login.defs nie jest już używany przez passwd (1), a mniej używany przez login (1) i su (1). Zamiast tego zapoznaj się z odpowiednimi plikami konfiguracyjnymi PAM.

  • Użyj modułu PAM pam_mkhomedir: na man pam_mkhomedirstronie dodaj poniższy wiersz do /etc/pam.d/login:

    session  required  pam_mkhomedir.so skel=/etc/skel
randominstanceOfLivingThing
źródło