当前位置: 首页 > news >正文

0055. shell命令--useradd

目录

55. shell命令--useradd

功能说明

语法格式

选项说明

选项

退出值

相关文件

/etc/passwd

/etc/shadow

/etc/group

/etc/gshadow

/etc/skel/

/etc/login.defs

/etc/default/useradd

实践操作

注意事项


55. shell命令--useradd

功能说明

        useradd 命令是 Linux 和 Unix 系统上用于创建新用户的工具。它是 shadow-utils 包的一部分,这个包还包括了管理用户密码、组和其他账户信息的工具。使用 useradd 可以创建新的用户账户,并可以指定多种选项来配置新账户的各种属性,如用户组、家目录、登录shell等。

        useradd 命令用于 Linux 中创建的新的系统用户。useradd 可用来建立用户帐号。帐号建好之后,再用 passwd 设定帐号的密码.而可用 userdel 删除帐号。使用 useradd 指令所建立的帐号,实际上是保存在 /etc/passwd 文本文件中。

        在 Slackware 中,adduser 指令是个 script 程序,利用交谈的方式取得输入的用户帐号资料,然后再交由真正建立帐号的useradd 命令建立新用户,如此可方便管理员建立用户帐号。在 Red Hat Linux 中, adduser 命令则是 useradd 命令的符号连接,两者实际上是同一个指令。

语法格式

SYNOPSISuseradd [options] LOGINuseradd -Duseradd -D [options]

选项说明

选项

-b, --base-dir BASE_DIR:如果未指定 -d HOME_DIR,则系统的默认基本目录。如果未指定此选项,useradd 将使用 /etc/default/useradd 中的 HOME 变量指定的基本目录,或默认使用 /home。
-c, --comment COMMENT:加上备注文字。任何文本字符串。它通常是对登录名的简短描述,目前用作用户全名的字段。这个信息通常可以通过 finger 命令查看。
-d, --home-dir HOME_DIR:将使用 HOME_DIR 作为用户登录目录的值来创建新用户。如果不指定,将使用 /home/LOGIN 作为家目录,其中 LOGIN 是用户名。 
-D, --defaults:变更预设值。
-e, --expiredate EXPIRE_DATE:用户帐户将被禁用的日期。 日期以 YYYY-MM-DD 格式指定。
-f, --inactive INACTIVE:密码过期后到帐户被永久禁用的天数。
-g, --gid GROUP:用户初始登录组的组名或编号。组名必须存在。组号必须引用已经存在的组。如果不指定,系统将使用默认组或新创建的组(如果 -G 选项也未指定)。
-G, --groups GROUP1[,GROUP2,...[,GROUPN]]]:用户也是其成员的补充组列表。每个组用逗号隔开,中间没有空格。
-h, --help:显示帮助信息并退出。
-k, --skel SKEL_DIR:骨架目录,其中包含要在用户的主目录中复制的文件和目录,当主目录由 useradd 创建时。
-K, --key KEY=VALUE:覆盖 /etc/login.defs 默认值(UID_MIN、UID_MAX、UMASK、PASS_MAX_DAYS 等)。
-l, --no-log-init:不要将用户添加到 lastlog 和 faillog 数据库。
-m, --create-home:为新用户创建家目录。如果家目录已存在,则不会覆盖。如果用户的主目录不存在,则创建它。
-M:不要创建用户的主目录,即使 /etc/login.defs (CREATE_HOME) 中的系统范围设置设置为 yes。
-N, --no-user-group:不要创建与用户同名的组,而是将用户添加到由 -g 选项或 /etc/default/useradd 中的 GROUP 变量指定的组中。
-o, --non-unique:允许创建具有重复(非唯一)UID 的用户帐户。 此选项仅在与 -o 选项结合使用时有效。
-p, --password PASSWORD:crypt(3) 返回的加密密码。 默认是禁用密码。
-r, --system:创建一个系统帐户。
-R:设置根目录
-s, --shell SHELL:用户登录 shell 的名称。如果不指定,将使用 /bin/bash。
-u, --uid UID:用户 ID 的数值。(UID)
-U, --user-group:创建一个与用户同名的组,并将用户添加到该组。
-Z, --selinux-user SEUSER:用户登录的 SELinux 用户。 默认情况下将此字段留空,这会导致系统选择默认的 SELinux 用户。# 更改默认值
# 当仅使用 -D 选项调用时,useradd 将显示当前默认值。 当使用 -D 和其他选项调用时,useradd 将更新指定选项的默认值。 有效的默认更改选项是:

退出值

0 成功
1 无法更新密码文件
2 无效的命令语法
3 选项的无效参数
4 UID 已经在使用(并且没有 -o)
6 指定的组不存在
9 用户名已被使用
10 无法更新组文件
12 无法创建主目录
13 无法创建邮件假脱机
14 无法更新 SELinux 用户映射

相关文件

/etc/passwd # 用户帐户信息。
/etc/shadow # 保护用户帐户信息。
/etc/group  # 组帐户信息。
/etc/gshadow # 保护组帐户信息。
/etc/default/useradd # 帐户创建的默认值。
/etc/skel/ # 包含默认文件的目录。
/etc/login.defs # 影子密码套件配置。
/etc/passwd
[root@MineGi ~]# head -1 /etc/passwd
root:x:0:0:root:/root:/bin/bash
#第1字段:用户账户名
#第2字段:密码占用符(密码保存到了影子文件)
#第3字段:uid编号
#第4字段:gid编号
#第5字段:用户备注信息(用户全名)
#第6字段:用户属主目录(家目录)
#第7字段:登录时分配到的shell解释器(若shell类型为/sbin/nologin,则不能登录)
/etc/shadow
[root@MineGi ~]# head -1 /etc/shadow
root:$6$lkz5C3wAIJXy.XL3$Axv54rjknCBT0n/N5CXRB4ead4sg3o2XOdXAlClRfCCNBgxMGwPWeBIXLsaDPiDXw6gx9KavaAxsxztZYt4k3/::0:99999:7:::
#第1字段:用户账号名
#第2字段:加密的密码,!!表示密码被锁定,不能使用
#第3字段:上次修改密码的时间,距 1970-01-01 过去多少天
#第4字段:密码最短有效期(距上次密码修改起多少天内不能再次修改密码)单位"天"。"0"表示随时可修改密码。
#第5字段:密码最长有效期(在修改密码后的多少天必须重新修改密码。99999 表示永久可以使用。)
#第6字段:提前多少天警告用户口令将过期(7 表示在密码过期前7天开始警告。)
#第7字段:在密码过期之后多少天禁用此用户。
#第8字段:密码过期日期,若设置则显示为过期日期距 1970 年1月1日多少天。
#第9字段:保留字段(未使用)。
/etc/group
[root@MineGi ~]# head -1 /etc/group
root:x:0:
#第1个字段:组名
#第2个字段:密码占位符
#第3个字段:GID
#第4个字段:组内的成员信息
/etc/gshadow
[root@MineGi ~]# head -1 /etc/gshadow
root:::
/etc/skel/
[root@MineGi ~]# ls -lA /etc/skel/
total 12
-rw-r--r--. 1 root root  18 Apr 11  2018 .bash_logout
-rw-r--r--. 1 root root 193 Apr 11  2018 .bash_profile
-rw-r--r--. 1 root root 231 Apr 11  2018 .bashrc
/etc/login.defs
[root@MineGi ~]#  grep -Ev "^$|^#" /etc/login.defs 
MAIL_DIR /var/spool/mail     #用户邮件存放目录
PASS_MAX_DAYS 99999         #密码默认最长有效期
PASS_MIN_DAYS 0             #密码默认最短有效期
PASS_MIN_LEN 5                 #密码默认长度
PASS_WARN_AGE 7             #密码过期警告时间
UID_MIN 1000                 #普通用户起始UID范围
UID_MAX 60000                 #普通用户结束UID范围
SYS_UID_MIN 201             #系统用户起始UID范围
SYS_UID_MAX 999             #系统用户结束UID范围
GID_MIN 1000                 #普通组起始GID范围
GID_MAX 60000                 #普通组结束GID范围
SYS_GID_MIN 201             #系统组起始GID范围
SYS_GID_MAX 999             #系统组结束GID范围
CREATE_HOME yes             #是否创建用户宿主目录
UMASK 077                     #用户宿主目录默认权限
USERGROUPS_ENAB yes         #表示userdel删除用户时,如果该用户用户组如果没有成员存在,则会删除该用户组
ENCRYPT_METHOD SHA512        #表示用户密码加密方式,此处表示用MD5加密密码
/etc/default/useradd
[root@MineGi ~]# grep -Ev "^$|^#" /etc/default/useradd 
GROUP=100
HOME=/home                         #把用户的主目录建在/home中
INACTIVE=-1                     #是否启用帐号过期停权,-1表示不启用
EXPIRE=                         #帐号终止日期,不设置表示不启用;
SHELL=/bin/bash                 #所用SHELL的类型;
SKEL=/etc/skel                     #默认添加用户的目录默认文件存放位置;也就是说,当我们用adduser添加用户时,用户家目录下的文件,都是从这个目录中复制过去的/lib64/security/pam_cracklib.so    #控制密码复杂度的关键文件,Redhat公司专门开发了cracklib这个安装包来判断密码的复杂度。[root@MineGi ~]# man pam_cracklib
retry=N                         #改变输入密码的次数,默认值是1。就是说,如果用户输入的密码强度不够就退出。可以使用这个选项设置输入的次数,以免一切都从头再来
minlen=N                         #新密码最低可接受的长度
difok=N                         #默认值为10。这个参数设置允许的新、旧密码相同字符的个数。不过,如果新密码中1/2的字符和旧密码不同,则新密码被接受
dcredit=N                         #限制新密码中至少有多少个数字
ucredit=N                        #限制新密码中至少有多少个大写字符。
lcredit=N                         #限制新密码中至少有多少个小写字符。

实践操作

1. 创建一个新用户 username1 使用默认的家目录和 shell
grep username1 /etc/passwd
ls -ld /home/username1
useradd username1
grep username1 /etc/passwd
ls -ld /home/username1
ls -lA /home/username12. 创建一个新用户 username2 指定家目录和登录 shell
useradd -d /opt/username2 -s /bin/sh username2
grep username2 /etc/passwd
ls -ld /home/username2
ls -ld /opt/username2
ls -lA /opt/username23. 创建一个新用户 username3 但不创建家目录,亦不让登录系统
useradd -M -s /sbin/nologin username3
grep username3 /etc/passwd
ls -ld /home/username34. 创建一个新用户 username4 并自定义 UID 值
tail -3 /etc/passwd
useradd -u 6688 username4
tail -4 /etc/passwd5. 创建一个新用户 username5 并追加指定组为该用户的扩展组
grep username5 /etc/group
useradd -G root username5
grep username5 /etc/group
tail -5 /etc/group6. 创建一个新用户 username6 并指定过期时间
useradd -e "3000-01-01" username6
grep username6 /etc/passwd
grep username6 /etc/shadow
tail -6 /etc/shadow7. 创建一个新用户 username7 用于系统账户
useradd -r username7
grep username7 /etc/passwd
ls -ld /home/username7
#使用 -r 参数时,useradd 命令会:
#创建一个 UID 小于 UID_MIN 的账户(通常在 /etc/login.defs 中定义)
#不创建家目录(除非明确指定)将登录 shell 设置为 /sbin/nologin(在大多数系统上)
# -r 的主要目的是创建系统账户,阻止登录是它的副作用。
# 如果你只是想阻止普通用户账户登录,使用 -s /sbin/nologin 可能更直接和明确。
#在某些系统上,-r 可能不会自动设置 /sbin/nologin 作为 shell,所以显式使用 -s 参数更可靠。

注意事项

  • 在创建用户时,如果指定了 -m 选项但家目录已存在,并且该目录的所有者不是 root 或与指定的 UID 不匹配,则 useradd 命令可能会失败。
  • 创建用户后,通常需要设置用户密码,这可以通过 passwd 命令完成:passwd 用户名。
  • 使用 useradd 时,请确保你有足够的权限(通常是 root 权限)来创建用户。
  • 在使用 useradd 命令时,务必谨慎指定 UID 和 GID,确保它们不与现有的用户或组冲突。
  • 对于需要特定环境或配置的用户,可以通过 --skel 选项预先准备好一个包含必要文件和配置的目录,并在创建用户时指定该目录。
  • 创建系统账户时,通常不需要设置登录shell和家目录,因为这些账户主要用于后台服务,不需要交互式登录。
  • 在多用户环境中,合理使用用户组和权限控制是维护系统安全的关键。通过 useradd 的 -G 选项将用户添加到适当的组中,可以方便地进行权限管理。
  • 定期审查和更新用户账户是良好的安全管理实践。这包括检查用户的过期日期、登录活动、组成员身份等,以及及时删除不再需要的账户。

相关文章:

0055. shell命令--useradd

目录 55. shell命令--useradd 功能说明 语法格式 选项说明 选项 退出值 相关文件 /etc/passwd /etc/shadow /etc/group /etc/gshadow /etc/skel/ /etc/login.defs /etc/default/useradd 实践操作 注意事项 55. shell命令--useradd 功能说明 useradd 命令是 Lin…...

blender中合并的模型,在threejs中显示多个mesh;blender多材质烘培成一个材质

描述:在blender中合并的模型导出为glb,在threejs中导入仍显示多个mesh,并不是统一的整体,导致需要整体高亮或者使用DragControls等不能统一控制。 原因:模型有多个材质,在blender中合并的时候,…...

vue 本地自测iframe通讯

使用 postMessage API 来实现跨窗口(跨域)的消息传递。postMessage 允许你安全地发送消息到其他窗口,包括嵌套的 iframe,而不需要担心同源策略的问题。 发送消息(父应用) 1. 父应用:发送消息给…...

C++:单例模式

创建自己的对象,同时确保对象的唯一性。 单例类只能有一个实例☞静态成员static☞静态成员 必须类外初始化 单例类必须自己创建自己的唯一实例 单例类必须给所有其他对象提供这一实例 静态成员类内部可以访问 构造函数私有化☞构造函数私有外部不能创建&#x…...

SOME/IP 协议详解——信息格式

文章目录 1. 头部格式1.1 消息 ID(Message ID)1.2 长度(Length)1.3 请求 ID(Request ID)1.4 协议版本(Protocol Version):1.5 接口版本(Interface Version&am…...

C# GDI+数码管数字控件

调用方法 int zhi 15;private void button1_Click(object sender, EventArgs e){if (zhi > 19){zhi 0;}lcdDisplayControl1.DisplayText zhi.ToString();} 运行效果 控件代码 using System; using System.Collections.Generic; using System.Drawing.Drawing2D; using …...

在交叉编译中,常见的ELF(elf)到底是什么意思?

ELF 是 Executable and Linkable Format 的缩写,中文翻译为“可执行与可链接格式”。它是一种通用的文件格式,主要用于存储可执行文件、目标文件(编译后的中间文件)、动态库(.so 文件)以及内存转储文件&…...

Unity开发AR之Vuforia-MultiTarget笔记

前言 在增强现实(AR)技术蓬勃发展的今天,越来越多的开发者开始探索如何将AR应用于各种场景中。Vuforia作为一个领先的AR开发平台,为开发者提供了强大的工具和功能,使得创建AR体验变得更加简单和直观。本文将为您介绍Vuforia的基本概念、特点,以及如何配置和使用MultiTar…...

深入解析 Oracle 的聚合函数 ROLLUP

目录 深入解析 Oracle 的聚合函数 ROLLUP一、ROLLUP 函数概述二、ROLLUP 函数语法三、ROLLUP 实例详解(一)基础分组聚合(二)引入 ROLLUP 函数(三)ROLLUP 与 NULL 值(四)多列复杂分组…...

Wend看源码-Java-集合学习(List)

摘要 本篇文章深入探讨了基于JDK 21版本的Java.util包中提供的多样化集合类型。在Java中集合共分类为三种数据结构:List、Set和Queue。本文将详细阐述这些数据类型的各自实现,并按照线程安全性进行分类,分别介绍非线程安全与线程安全的实现方…...

【软件】教务系统成绩提交工具使用步骤

【软件】教务系统成绩提交工具使用步骤 零、快速开始 安装 与大多数软件一样,安装步骤很简单,一直点击“下一步”即可快速完成安装,安装完成后,在桌面会有一个软件图标,双击即可打开软件主界面。 导入成绩到Excel中…...

IPsec协议,网络安全的秘密

IPsec概述 IPsec是一组基于网络层的安全协议,是保护IP数据包在网络传输过程中保持安全、隐秘以及真实。通过对IP数据包进行一些加密、认证,来防止数据在传输过程中被窃取、篡改甚至伪造,IPsec在企业内部网络的通信、远程办公、云服务连接等场…...

浅谈下Spring MVC的执行流程

什么是Spring MVC Spring MVC是一个基于Java的Web框架,用于构建Web应用程序。 它是Spring Framework的一部分,它提供了模型-视图-控制器(MVC)架构。 支持RESTful风格的URL请求,易于与其他视图技术集成,如…...

khadas edge2安装ubuntu22.04与ubuntu20.04 docker镜像

khadas edge2安装ubuntu22.04与ubuntu20.04 docker镜像 一、资源准备1.1 镜像文件1.2 刷机工具1.3 ubuntu20.04 docker镜像(具备demon无人机所需各种驱动) 二、开始刷机(安装ubuntu22.04系统)2.1 进入刷机状态2.2 刷机 三、docker…...

GitLab 服务变更提醒:中国大陆、澳门和香港用户停止提供服务(GitLab 服务停止)

目录 前言 一. 变更详情 1. 停止服务区域 2. 邮件通知 3. 新的服务提供商 4. 关键日期 5. 行动建议 二. 迁移指南 三. 注意事项 四. 相关推荐 前言 近期,许多位于中国大陆、澳门和香港的 GitLab 用户收到了一封来自 GitLab 官方的重要通知。根据这封邮件…...

主成分分析是线性降维方法

主成分分析是线性降维方法 主成分分析(PCA)是一种常用的线性降维方法。它通过线性变换将原始数据映射到新的坐标系中,使得数据在新坐标系中的第一个坐标(第一个主成分)具有最大的方差,以此类推&#xff0c…...

Webpack在Vue CLI中的应用

webpack 作为目前最流行的项目打包工具,被广泛使用于项目的构建和开发过程中,其实说它是打包工具有点大材小用了,我个人认为它是一个集前端自动化、模块化、组件化于一体的可拓展系统,你可以根据自己的需要来进行一系列的配置和安…...

继承超详细介绍

一 、继承 1 继承的概念 继承是面向对象程序设计使得代码可以复用的最重要手段,它使得我们可以在原有类的特性的基础上进行扩展,增加方法和属性(成员函数与成员变量),这样产生新的类,叫作派生类。继承呈现了…...

wordpress调用指定ID分类下浏览最多的内容

要在WordPress中调用指定ID分类下浏览最多的内容&#xff0c;你可以通过以下方法实现&#xff1a; <?php $post_num 8; // 设置调用条数 $wdpidproduct 2; // 假设这是你要查询的分类ID $args array(post_password > ,post_status > publish, // wodepress.comca…...

18.springcloud_openfeign之扩展组件二

文章目录 一、前言二、子容器默认组件FeignClientsConfigurationDecoder的注入Contract约定 对注解的支持对类上注解的支持对方法上注解的支持对参数上注解的支持MatrixVariablePathVariableRequestParamRequestHeaderSpringQueryMapRequestPartCookieValue FormattingConversi…...

谷歌浏览器插件

项目中有时候会用到插件 sync-cookie-extension1.0.0&#xff1a;开发环境同步测试 cookie 至 localhost&#xff0c;便于本地请求服务携带 cookie 参考地址&#xff1a;https://juejin.cn/post/7139354571712757767 里面有源码下载下来&#xff0c;加在到扩展即可使用FeHelp…...

设计模式和设计原则回顾

设计模式和设计原则回顾 23种设计模式是设计原则的完美体现,设计原则设计原则是设计模式的理论基石, 设计模式 在经典的设计模式分类中(如《设计模式:可复用面向对象软件的基础》一书中),总共有23种设计模式,分为三大类: 一、创建型模式(5种) 1. 单例模式(Sing…...

376. Wiggle Subsequence

376. Wiggle Subsequence 代码 class Solution { public:int wiggleMaxLength(vector<int>& nums) {int n nums.size();int res 1;int prediff 0;int curdiff 0;for(int i 0;i < n-1;i){curdiff nums[i1] - nums[i];if( (prediff > 0 && curdif…...

ESP32 I2S音频总线学习笔记(四): INMP441采集音频并实时播放

简介 前面两期文章我们介绍了I2S的读取和写入&#xff0c;一个是通过INMP441麦克风模块采集音频&#xff0c;一个是通过PCM5102A模块播放音频&#xff0c;那如果我们将两者结合起来&#xff0c;将麦克风采集到的音频通过PCM5102A播放&#xff0c;是不是就可以做一个扩音器了呢…...

工业自动化时代的精准装配革新:迁移科技3D视觉系统如何重塑机器人定位装配

AI3D视觉的工业赋能者 迁移科技成立于2017年&#xff0c;作为行业领先的3D工业相机及视觉系统供应商&#xff0c;累计完成数亿元融资。其核心技术覆盖硬件设计、算法优化及软件集成&#xff0c;通过稳定、易用、高回报的AI3D视觉系统&#xff0c;为汽车、新能源、金属制造等行…...

初学 pytest 记录

安装 pip install pytest用例可以是函数也可以是类中的方法 def test_func():print()class TestAdd: # def __init__(self): 在 pytest 中不可以使用__init__方法 # self.cc 12345 pytest.mark.api def test_str(self):res add(1, 2)assert res 12def test_int(self):r…...

Python+ZeroMQ实战:智能车辆状态监控与模拟模式自动切换

目录 关键点 技术实现1 技术实现2 摘要&#xff1a; 本文将介绍如何利用Python和ZeroMQ消息队列构建一个智能车辆状态监控系统。系统能够根据时间策略自动切换驾驶模式&#xff08;自动驾驶、人工驾驶、远程驾驶、主动安全&#xff09;&#xff0c;并通过实时消息推送更新车…...

iview框架主题色的应用

1.下载 less要使用3.0.0以下的版本 npm install less2.7.3 npm install less-loader4.0.52./src/config/theme.js文件 module.exports {yellow: {theme-color: #FDCE04},blue: {theme-color: #547CE7} }在sass中使用theme配置的颜色主题&#xff0c;无需引入&#xff0c;直接可…...

Leetcode33( 搜索旋转排序数组)

题目表述 整数数组 nums 按升序排列&#xff0c;数组中的值 互不相同 。 在传递给函数之前&#xff0c;nums 在预先未知的某个下标 k&#xff08;0 < k < nums.length&#xff09;上进行了 旋转&#xff0c;使数组变为 [nums[k], nums[k1], …, nums[n-1], nums[0], nu…...

Python网页自动化Selenium中文文档

1. 安装 1.1. 安装 Selenium Python bindings 提供了一个简单的API&#xff0c;让你使用Selenium WebDriver来编写功能/校验测试。 通过Selenium Python的API&#xff0c;你可以非常直观的使用Selenium WebDriver的所有功能。 Selenium Python bindings 使用非常简洁方便的A…...