主目录未创建


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=/

实际上,还没有创建主目录。我想念什么?

谢谢。

Answers:


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.

一般远离useraddadduser改为使用。


2
在OP的防御中,当我读到“ On Debian”时,我认为它的意思是Debian,而不是Ubuntu发行版。我知道Ubuntu是在Debian上构建的,但是认为已经有所区别。
基思·贝内特

1
我曾经使用过,adduser但是创建的主目录仍然只包含一个文件examples.desktop,没有别的。如何获得Ubuntu创建默认文件夹Desktop,Downloads等?(我通过ssh登录)
mcExchange 2015年

嗨,很抱歉,您的回复很晚,只能猜测,但是我认为这些文件夹是在第一次GUI登录时自动创建的。只是以为人们可能仍然会降落在这里;)
derHugo

adduser如果有人将/etc/login.defs中的CREATE_HOME更改为“ no”,则不会创建目录。您可以使用-m标志覆盖它。
Noumenon

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在将linda添加为用户之前不存在,则还必须添加--create-home

sudo useradd --create-home linda

1

您没有创建主目录的最可能的原因是因为您没有CREATE_HOME yesin /etc/login.defs

您可以按照@OmPS或@RaduRă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****

    /etc/adduser.conf如果 --home未指定option,则从adduser中选择默认值。 请注意,它还会复制/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处理。因此,passwd(1)不再使用/etc/login.defs,login(1)和su(1)不再使用/etc/login.defs。请参考相应的PAM配置文件。

  • 使用pam_mkhomedir PAM模块:从man pam_mkhomedir页面开始,将以下行添加到/etc/pam.d/login

    session  required  pam_mkhomedir.so skel=/etc/skel
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.