在使用useradd 来创建新用户是发现系统并未默认创建家目录,故对这一问题探索了一番,在《鸟哥的linux私房菜》这本书中才小窥其究竟。

​ 我们使用’useradd 用户名’ 创建新用户时系统为我们规定好了许多新用户的默认设置,这些设置主要包括:

  • 在/etc/passwd里面创建一行与账号有关的数据
  • 在/etc/shadow里将此账号密码相关参数填入,但此时未有密码
  • 在/etc/group里加入一个与账号名称一模一样的组名
  • 在/home 下建立于账号同名的目录作为家目录,权限为700

引用书中问题:为什么会主动建立家目录?家目录里的数据来自哪里?为什么预设使用/bin/bash这个shell?这就需要了解useradd的参考文件。

我们通过’useradd -D’ 可以查看基本的配置:

这个数据其实是由 /etc/default/useradd里面设置的,可以使用vim去观察内容。

除了以上设置 /etc/login.defs中还有密码参数:

在我的系统(Ubuntu 20)中使用useradd无法创建家目录的原因便是在这一设置中缺少"CREATE_HOME yes"这一设置。

所以这一问题的解决方法一:在添加这一设置后便会自动创建新用户的家目录了。并且通过 UMASK这个设定家目录权限。

这就是产生了解决方法二:上面这个值会让你使用useradd时主动加入 [-m]这个产生家目录的选项。如果你不想默认建立家目录也可以使用"useradd -m 用户名"来单独创建家用户和目录。

另外, /etc/skel是家目录的基准参考目录,家目录的数据都是由/etc/skel所复制过去的,如果想要新创建的用户环境变量被设置妥当可以自行编辑/etc/skel/.bashrc。也可以建立/etc/skel/www这个目录,那么新增用户的家目录也会有www这个目录。

Logo

华为开发者空间,是为全球开发者打造的专属开发空间,汇聚了华为优质开发资源及工具,致力于让每一位开发者拥有一台云主机,基于华为根生态开发、创新。

更多推荐