用户管理命令:
useradd命令:
useradd命令的功能是创建并设置用户信息。使用useradd命令可以自动完成用户信息、基本组、家目录等的创建工作,并在创建过程中对用户初始信息进行定制。
语法格式:useradd 参数 用户名
常用参数:
-M 不建立用户家目录 -c 添加备注文字
-d 设置新用户登录时所使用的家目录 -n 不建立以用户名称为名的组
-D 设置新用户的预设值 -o 允许创建重复UID的用户
-e 设置用户的终止日期 -p 设置用户的密码
-f 设置用户过期几日后永久停权 -r 建立系统用户
-g 设置用户对应的基本用户组 -R 设置根目录
-G 设置用户对应的扩展用户组 -s 设置新用户的默认Shell终端
-u 设置用户ID -h 显示帮助信息
参考示例
useradd test1 #创建指定的用户信息
useradd -M -s /sbin/nologin test2 #创建指定的用户信息,但不创建家目录,亦不让登录系统
useradd -u 6688 test3 #创建指定的用户信息,并自定义UID值
useradd -G root test4 #创建指定的用户信息,并追加指定组为该用户的扩展组
useradd -e "2025/01/01" test5 #创建指定的用户信息,并指定过期时间
扩展:
#新建用户并将其加入指定用户组,作为其主用户组(每个用户有且只有一个主用户组)
useradd -g <用户组名称> <用户名称>
#或者 新建用户并将其加入指定附属用户组,附属用户组可以有多个,多个附属组名称用逗号分隔即可
useradd -G <用户组名称> <用户名称>
passwd 命令:
passwd命令来自英文单词password的缩写,其功能是修改用户的密码值
同时也可以对用户进行锁定等操作,但需要管理员身份才可以执行。
当使用 useradd 命令来添加用户后,默认该用户还不能登录,因为没有为该用户设置密码
只有设置了密码后,才可以登录。而设置密码的命令是passwd
常用格式: passwd 参数 用户名
常用参数:
-d 清除已有密码 -S 显示当前密码状态
-e 下次登录时强制修改密码 -u 解锁用户的密码值,允许修改
-f 强制执行操作而不询问 -w 设置密码到期前几天收到警告信息
-k 设置用户在期满后能仍能正常使用 -x 设置最大密码有效期
-l 锁定用户的密码值,不允许修改 --help 显示帮助信息
参考示例:
passwd #修改当前登录用户的密码值,注意输入过程中密码不可见。
passwd test1 #修改指定用户的密码值
passwd -l test1 #锁定指定用户的密码值,不允许其进行修改
passwd -u test1 #解锁指定用户的密码值,允许其进行修改
passwd -e test2 #强制指定的用户在下次登录时必须重置其密码
passwd -d test2 #删除指定用户的密码值
passwd -S test3 #查看指定用户的密码状态
usermod 命令:
usermod命令来自英文词组user modify的缩写,其功能是修改用户信息中的各项参数。在创建用户后如果发现信息错误,可以不用删除,而是用usermod命令直接修改用户信息,并且参数会立即生效。
语法格式:usermod 参数 用户名
常用参数:
-a 将用户添加至扩展组中 -L 锁定用户密码,使密码立即失效
-c 修改用户的备注文字 -m 将用户家目录内容移动到新位置
-d 修改用户登录时的家目录 -o 允许重复的用户ID
-e 修改用户的有效期限 -p 设置用户的新密码
-f 设置在密码过期多少天后关闭该用户 -s 修改用户登录后使用的Shell终端
-g 修改用户所属的基本群 -u 修改用户的ID
参考示例:
usermod -d /home/testA test1 #修改指定用户的家目录路径,注意:不能有用户正在使用该账号
usermod -u 6688 test1 #修改指定用户的ID
usermod -l newname test1 #修改指定用户的名称为newname
usermod -L test1 #锁定指定的用户,临时不允许登录系统
usermod -U test1 #解锁指定的用户,再次允许登录系统
扩展:
将已有用户添加到指定用户组
#将已有用户添加到指定用户组,作为其附属用户组
# -a 代表append,和 -G 一起使用,将用户添加到新用户组中而不必来开原有的其他用户组usermod -a -G <用户组名称> <用户名称>
#将已有用户的主用户组改为新的用户组
usermod -g <新的用户组名称> <用户名称>
usedel命令:
userdel命令来自英文词组userdelete的缩写,其功能是删除用户信息。
在Linux系统中,一切都是文件,用户信息被保存到了/etc/passwd、/etc/shadow以及/etc/group文件中,因此使用userdel命令实际上就是删除指定用户在上述3个文件中的对应信息。
语法格式:userdel 参数 用户名
常用参数:
-f 强制删除用户而不询问 -r删除用户的家目录及其内全部子文件
-h 显示帮助信息 -Z 删除用户的SELinux映射用户
参考示例:
userdel test1 #删除指定的用户信息
userdel -r test2 #删除指定的用户信息及家目录,注意:删除的时候要慎重
扩展:
#将用户从该用户的附属组中删除
gpasswd -d <用户名称> <用户组名>
su 命令:
su命令来自英文单词switch user的缩写,其功能是切换用户身份。
将管理员切换至任意用户身份时无须密码验证,而将普通用户切换至任意用户身份时均需密码验证另外,添加单个减号(-)参数表示完全的身份变更,不保留之前用户的任何环境变量信息。
语法格式:su 参数 用户名
常用参数:
-m 切换身份时,不变更环境变量 -c执行完命令后,自动恢复原来的身份
-s 设置要执行的Shell终端 - 完全地切换身份
-f 不读取启动文件(适用于csh和tsch) --help 显示帮助信息
-l 切换身份时,同时变更工作目录 --version 显示版本信息
参考示例:
su root #变更至指定的用户身份
su - root #完全变更至指定的用户身份
它们之间的区别:
在使用su root命令时,不会加载root用户的环境变量。您仍然会保留当前用户的权限和环境设置只是切换到root用户的身份。
使用su -root命令时,会加载root用户的完整环境变量。这意味着您将切换到root用户的身份,并使用root用户的环境设置。
有部分用户提示,
xxx不在 sudoers 文件中,此事将被报告。
修改如下文件即可。
1. 切换到root身份:su root
2. 修改文件权限:chmod 777 /etc/sudoers
3. 修改文件内容: test6 ALL=(ALL) ALL
4. 保存退出后,恢复文件权限:chmod 440 /etc/sudoers
5. 返回自己的身份:exit
6. 再次执行 sudo.xxx 指令验证效果
sudo 权限在 /etc/sudoers 文件中,该文件默认权限是440
用户组管理命令:
groupadd命令:
groupadd命令的功能是创建新的用户组。每个用户在创建时都有一个与其同名的基本组,后期可以使用groupadd命令创建出新的用户组信息,让多个用户加入指定的扩展组,从而为后续的工作提供了良好的文档共享环境。
语法格式:groupadd 参数 用户组
常用参数:
-f 若用户组已存在,则以成功状态退出 -o 允许创建重复ID的用户组
-g 设置用户组ID -p 设置用户组密码
-h 显示帮助信息 -r 创建系统用户组
参考示例:
groupadd newgroup1 #创建一个新的用户组
groupadd -g 6688 newgroup2 #创建一个新的用户组,并指定用户组ID
groupadd -r newgroup3 #创建一个新的用户组,设定为系统工作组
groupmod命令:
groupmod命令来自英文词组“group.modify”的缩写,其功能是用于更改群组属性。
Linux系统中的群组信息一般不建议更改,因为涉及已加入用户的归属问题,尤其是群组名称、组GID,一定要确认好后再操作。
语法格式:groupmod 参数 群组名
常用参数:
-g 设置群组识别码 -h 显示帮助信息
-n 设置群组名称 -o 允许重复使用群组识别码
-p 设置群组密码
参考示例:
groupmod -n newgroupA oldgroupB #更改指定用户组的名称(原名是oldgroupB )
groupmod -g 8888 newgroupA #更改指定用户组的识别码
groupdel 命令:
groupdel命令来自英文词组“deletea group”的缩写,其功能是用于删除用户组。
Linux系统中的用户组信息被保存在 ect/group 和 /ect/gshadow 文件中,手动删除对应信息即可,亦可以用groupdel命令删除。
语法格式:groupdel [参数] 群组名
常用参数:
-f 强制删除而不询问 -h 显示帮助信息
参考实例:
groupdel newgroup #删除指定名称的用户组
groupdel -f newgroup #强制删除指定名称的用户组
用户配置文件:
在 Linux 中,用户名、密码、用户组和用户组密码都是在保存在不同的文件配置文件中。
/etc/passwd: 用于保存用户账号文件
/etc/shadow: 用户保存用户的密码文件 ==》useradd
/etc/group: 用于保存用户组的文件
/etc/gshadow: 用于保存用户组密码的文件 ==》groupadd
/etc/skel: 保存用户家目录文件隐藏文件
/etc/default/useradd:用户定义添加用户的信息文件 ==》用户配置文件
/etc/passwd:
passwd 是一个文本文件,用于定义系统的用户账号,由于这个文件是所有用户都对需要读取的权限,所以文件中只定义用户的账号,而不保存用户密码。
在这个文件中,每一行记录了一个用户信息,而用户信息是以 : 英文冒号来进行分隔的 7 个部分组成,
这 7 个部分的意义说明如下:
root : x : 0 : 0 : root : / root : /bin/bash
redhat : x : 1000 : 1000 : redhat : /home/redhat :/bin/bash
1 2 3 4 5 6 7
1 用户名
2 用户登录密码的占位符,如果为 x 表示有密码,如果为空或 * 表示没有密码
3 用户的 ID,即 uid
4 用户所属组 ID,即 gid
5 用户的个人次数,如果用户的完整名称、地址、办公电话、家庭住址等个人信息
6 用户的家目录
7 用户的默认登录所能使用的 shell 脚本
/etc/shadow:
这个文件是用户保存用户密码的文件,我们可以通过如下的命令来查看这个文件:
tail -2 /etc/shadow
这个文件每一行记录了一个用户的密码信息,它们共有 9 个字段,分别表示如下:
root:$6$hS4yqJu7WQfGlk0M$Xj/
SCS5z4BWSZKN0raNncu6VMuWdUVbDScMYxOgB7mXUj./
dXJN0zADAXQUMg0CuWVRyZUu6npPLWoyv8eXPA.::0:99999:7::: ftp:*:
16659:0:99999:7::: nobody:*:16659:0:99999:7::: longshuai:
$6$8LGe6Eh6$vox9.OF3J9nD0KtOYj2hE9DjfU3iRN.v3up4PbKKGWLOy3k1Up50bbo7Xii/
Uti05hlqhktAf/dZFy2RrGp5W/:17323:0:99999:7:::
第一列:用户名。
第二列:加密后的密码。但是这一列是有玄机的,有些特殊的字符表示特殊的意义。
①.该列留空,即"::",表示该用户没有密码。
②.该列为"!",即":!:",表示该用户被锁,被锁将无法登陆,但是可能其他的登录方式是不受限制的
③.该列为"*",即":*:",也表示该用户被锁,和"!"效果是一样的。
④.该列以"!"或"!!"开头,则也表示该用户被锁。
⑤.该列为"!!",即":!!:",表示该用户从来没设置过密码。
⑥.如果格式为"$id$salt$hashed",则表示该用户密码正常。其中$id$的id表示密码的加密算法,
$1$表示使用MD5算法,$2a$表示使用Blowfish算法,"$2y$"是另一算法长度的Blowfish,
"$5$"表示SHA-256算法,而"$6$"表示SHA-512算法,可见上面的结果中都是使用sha-512算法的。
$5$和$6$这两种算法的破解难度远高于MD5。$salt$是加密时使用的salt,$hashed才是真正的密码部分。
第三列:从1970年1月1日到上次密码修改经过的时间(天数)。通过计算现在离1970年1月1日的天数减去这个值,结果就是上次修改密码到现在已经经过了多少天,即现在的密码已经使用了多少天。
第四列:密码最少使用期限(天数)。省略或者0表示不设置期限。
例如,刚修改完密码又想修改,可以限制多久才能再次修改
第五列:密码最大使用期限(天数)。超过了它不一定密码就失效,可能下一个字段设置了过期后的宽限天数。设置为空时将永不过期,后面设置的提醒和警告将失效。root等一些用户的已经默认设置为了99999,表示永不过期。如果值设置小于最短使用期限,用户将不能修改密码。
第六列:密码过期前多少天就开始提醒用户密码将要过期。空或0将不提醒。
第七列:密码过期后宽限的天数,在宽限时间内用户无法使用原密码登录,必须改密码或者联系管理员。设置为空表示没有强制的宽限时间,可以过期后的任意时间内修改密码。
第八列:帐号过期时间。从1970年1月1日开始计算天数。设置为空帐号将永不过期,不能设置为0。不同于密码过期,密码过期后账户还有效,改密码后还能登录;帐号过期后帐号失效,修改密码重设密码都无法使用该帐号。
第九列:保留字段。
/etc/group:
这个文件中存储是用户组信息,我们可以通过如下的命令来进行查看:
tail -3 /etc/group
dnsmasq:x:977:
tcpdump:x:72:
redhat:x:1000:
在这文件中每一行记录了一个组信息,使用英文冒号分隔成 4 个字段,分别代表如下:
redhat : x : 1000 :
1 2 3 4
1 表示组名称
2 表示组的密码占位符,真正的密码保存在 /etc/gshadow 文件中
3 表示组的 id 值
4 表示附加组中的用户列表,以英文逗号分隔,如果为空表示没有附加用户
/etc/gshadow:
这个文件是用于保存组的密码信息,通过如下命令来查看:
tail -3 /etc/gshadow
dnsmasq:!::
tcpdump:!::
redhat:!::
在这个文件中每一行代表一个组的密码信息,通过英文冒号分隔为 4 段,分别表示如下:
redhat : ! : :
1 2 3 4
1 组名称,与 /etc/group 文件中第一列相同
2 组密码,如果值为 ! 表示没有密码
3 组管理的用户名,很少使用
4 组中附加用户,也 /etc/group 中第 4 列相同
/etc/skel:
这个文件中记录是用户家目录下的相关隐藏文件。默认情况下,当新创建好一个用户后,
会在这个用户的家目录下新建一个隐藏文件,而这些隐藏文件就是从这个文件中拷贝过来的
ls -a /etc/skel
../
./
.mozilla/
.bash_logout
.bash_profile
.bashrc
/etc/default/useradd:
在这个文件中记录了创建用户的相关信息。
vim /etc/default/useradd
# useradd defaults file
GROUP=100 这个选项用于建立用户的默认组,它是公有组,而目录使用的是私有组,所以它无效
HOME=/home 用于指定所创建的用户所在的家目录,它是创建普通用户的家目录
INACTIVE=-1 用于指定密码过期的宽限时间,如果值为-1 表示不限制,它与/etc/shadow 文件中第 7个字段对应
EXPIRE= 用于指定密码的过期时间,它与 /etc/shadow 文件中的第 8 个字段对应,如果值为空表示永久有效
SHELL=/bin/bash 用于指定用户登录后的操作,它与 /etc/passwd文件中第 7 个字段对应
SKEL=/etc/skel 用于指定用户所在家目录下的隐藏文件的拷贝来源
CREATE_MAIL_SPOOL=yes 用于给新建的用户指定邮箱地址,它与 /etc/login.defs 文件中MAIL_DIR 指向的地址相同