【Linux命令】用户身份(useradd,groupadd,usermod,passwd,userdel)
目录
用户身份
在linux系统中和windows一样有用户之分。root用户为linux的超级管理员用户,权限最大。
再RHEL7系统中,用户身份有如下:
- 管理员UID为0:系统的管理用用户
- 系统用户UID为1~999:为了避免某个服务程序出现漏洞而被黑客获得权限。默认服务器会有独立的系统用户负责运行,进而有效控制被破坏的范围。
- 普通用户 UID为1000开始:有管理员用户创建且用户日常工作的用户。
PS:UID是唯一,管理员创建普通用户,UID默认从1000开始。
另外为了方便管理,linux系统还引入了用户组。听你刚刚使用用户组,可以将多个用户加入统一个组中,方便为组中的用户统一制定权限和任务。创建用户时会自动创建默认和用户同名的用户组,如果该用户需要加入其它组中,则这个组为附属组(扩展组)。
此处推荐我的另一篇博客,有记录相关的命令:https://www.cnblogs.com/HeiDi-BoKe/p/11671367.html
useradd命令
useradd命令用于创建系统新用户。默认会创建家目录/home/用户名。默认shell解释器/bin/bash。useradd和adduser命令相同。
格式:
useradd [选项] 用户名
选项:
-c:加上备注文字,备注文字保存在passwd的备注栏中。
-d:指定用户登入时的主目录,替换系统默认值/home/<用户名>
-D:变更预设值。
-e:指定账号的失效日期,日期格式为MM/DD/YY,例如06/30/12。缺省表示永久有效。也可以为YYYY-MM-DD。
-f:指定在密码过期后多少天即关闭该账号。如果为0账号立即被停用;如果为-1则账号一直可用。默认值为-1.
-g:指定用户所属的群组。值可以使组名也可以是GID。用户组必须已经存在的,期默认值为100,即users。
-G:指定用户所属的附加群组。
-m:自动建立用户的登入目录。
-M:不要自动建立用户的登入目录。
-N:取消建立以用户名称为名的群组。
-r:建立系统账号。
-s:指定用户登入后所使用的shell。默认值为/bin/bash。如果禁止用户登录为/sbin/nologin
-u:指定用户ID号。该值在系统中必须是唯一的。
shell解释器:
[root@tourby ~]# cat /etc/shells
/bin/sh
/bin/bash
/usr/bin/sh
/usr/bin/bash
/etc/passwd文件:
用户名:口令:用户标识号:组标识号:注释性描述:主目录:登录Shell
实例:
这里指定的家目录的根目录必须存在。
# 创建用户账户为testuser1,并设置UID为544,主目录为/usr/testuser1,属于users组:(这里注意是属于users组,不是附加到users组,所以是使用-g,而不是-G)
[root@VM_0_10_centos ~]# cat /etc/group | grep users
users:x:100:
[root@VM_0_10_centos ~]#useradd -u 544 -d /usr/testuser1 -g users -m testuser1
# 使用管理员账号登陆系统,建立用户tmp_1 密码qrty2b3
[root@VM_0_10_centos ~]# useradd tmp_1
[root@VM_0_10_centos ~]# passwd tmp_1
或
[root@VM_0_10_centos ~]# echo "qrty2b3" | passwd --stdin tmp_1
# 批量添加用户(参考我另一篇博客哈:https://www.cnblogs.com/HeiDi-BoKe/p/11643283.html第四点)
# 我这里也再实现下,这里的方法和我另一篇博客方法不相同。步骤如下:
# 1.建立用户名列表文件username.txt
# 2.创建用户密码对应文件 secret.txt,格式为username:password (注意文件的格式)
# 3.批量添加的脚本文件addusers.sh
[root@VM_0_10_centos shell]# cat username.txt
test1
test2
test3
test4
test5
[root@VM_0_10_centos shell]# cat secret.txt
test1:tt1
test2:tt2
test3:tt3
test4:tt4
test5:tt5
[root@VM_0_10_centos shell]# cat addusers.sh
#!/bin/bash
# author:thy
# Read from the file and create accounts in bulk
# 1.add accounts
cat < username.txt | xargs -n 1 useradd
# 2. set passwd(将密码转换到密码文件和族文件)
chpasswd < secret.txt
# 结束验证信息
pwconv
echo "OK"
[root@VM_0_10_centos shell]# ./addusers.sh
OK
# PS:此处注意-n参数,按空格分批(参考:https://www.cnblogs.com/f-ck-need-u/p/5925923.html#blog171)
# 新创建一个tmp_2用户,这初始属于users组,且同时让他也属于tmpg组。
[root@VM_0_10_centos shell]# groupadd tmpg
[root@VM_0_10_centos shell]# useradd -g users -G tmpg tmp_2
# 无法使用shell,且其用户目录至/tmp/tmp_3
[root@VM_0_10_centos shell]# useradd -d /tmp/tmp_3 -s /sbin/nologin tmp_4
# 创建用户mary和 larry,要求harry的uid为3000,shell设置为不可登陆shell(两种方法)
# 方法一
useradd mary
useradd harry
usermod -u 3000 harry
usermod –s /sbin/nologin harry
# 方法二
useradd mary
useradd -u 3000 -s /sbin/nologin harry
usermod命令
参考:https://www.cnblogs.com/HeiDi-BoKe/p/11671367.html第二点
userdel命令
userdel命令用于删除用户。在执行删除用户时,如果没有加参数-r,则家目录会被保留。
格式:
userdel [选项] 用户名
选项:
-f 强制删除用户 -r 删除用户的同事删除用户家目录
实例:
# 删除用户及用户家目录 [root@VM_0_10_centos shell]# userdel -r tmp_1 #PS:如果用户还在登陆的话,会提示,用户正在登陆无法删除。此时可能需要先强制用户退出。 [root@VM_0_10_centos shell]# userdel -f tmp_1 # 查看当前登录的用户 [root@VM_0_10_centos shell]# w # 强制退出用户登录 [root@VM_0_10_centos shell]# pkill -kill -t pts1
groupadd命令
groupadd用于创建用户组。方便将用户加入到组,并设置权限。每个在系统上运行的进程都是属于一个组的集合(gids)
格式:
groupadd [选项] 组名
选项:
-f,--force 如果指定的组已经存在,此选项将失明了仅以成功状态退出。当与-g一起使用,并且指定的GID_MIN已经存在时,选择另一个唯一的GID(即-g关闭)。 -g,--gid GID 这个值必须是唯一的,除非使用-o选项。但必须是非负的。默认值是使用大于或等于GID_MIN的最小值,并且大于每个其他组。 -K,--key KEY=VALUE 重写/etc/login.defs默认值(GID_MIN,GID_MAX和其他)。可以指定多个K选项。示例:-K GID_MIN=100 –KGID_MAX=499。注意:-K GID_MIN=10,GID_MAX=499不能工作。 -o,--non-unique 此选项允许添加一个非唯一的GID值。 -p,--password PASSWORD 为新组使用此加密过的密码。默认为禁用密码。注意:不推荐使用这个选项,因为密码(或加密过的密码)会被用户通过列出这个过程而看到。您应该确保密码符合系统的密码政策。 -r,--system 创建一个系统组。新的系统组数字标识符在SYS_GID_MIN到SYS_GID_MAX范围内选择,定义在login.defs中而不是GID_MIN到GID_MAX。 -R,--root CHROOT_DIR 将修改应用到CHROOT_DIR目录,并使用配置。
配置文件:
/etc/group 组账户信息。(组名称:组密码:组ID:组成员) /etc/gshadow 安全组账户信息。 /etc/login.defs Shadow密码套件配置。
实例:
# 创建组群tg,并且设置该组群GID为800 [root@VM_0_10_centos shell]# groupadd -g 800 tg # 创建系组群 [root@VM_0_10_centos shell]# groupadd -r tsg
groupdel命令
groupdel命令用于删除指定的工作组,本命令要修改的系统文件包括/ect/group和/ect/gshadow。若该群组中仍包括某些用户,则必须先删除这些用户后,方能删除群组。
格式:
groupdel 组名
实例:
# 删除组 [root@VM_0_10_centos shell]# groupdel tsg
gpasswd命令
组成员管理。用于修改组的密码操作。/etc/group,/etc/gshadow。
gpasswd 【选项】 组名 常见选项: -a 添加用户到组 -d 从组中删除成员 -A 指定管理员 -M 指定组成员,可以批量添加用户到组中 -r 删除密码 gpasswd 组名 给组设置密码
添加用户到组:
批量添加用户到组(原来的组会被覆盖):
[root@tanbaobao ~]# gpasswd -M stu1,stu2 author
从组中删除用户:
passwd命令
passwd命令用于修改用户密码,过期时间,认证信息等。passwd作为普通用户或超级用户都可以使用。但作为普通用户只能更改自己的用户密码,前提是没有被root用户锁定;且密码要符合安全要求。root用户运行passwd ,可以设置或修改任何用户的密码。
格式:
passwd [选项] 用户名
PS:passwd后面不接任何用户和参数,表示修改当前用户密码。
选项:
-d 删除密码(仅root权限)
-f 强制执行
-k 保留即将过期的用户在期满后能仍能使用;
-l 停止账号使用(锁定账户)
-u 启用已被停止的账户(解除锁定)
-S 显示密码状态
-x 设置密码的有效期(两次密码修正的最大天数,后面接数字;仅能root权限操作;)
-n 两次密码修改的最小天数,后面接数字,仅能root权限操作;
-g 修改群组密码
-i 过期后停止用户账号(在密码过期后多少天,用户被禁掉,仅能以root操作;)
-w 在距多少天提醒用户修改密码;仅能root权限操作;
--stdin
实例:
# 非交互式修改密码
[root@tourby ~]# echo 'stu1' | passwd --stdin stu1
# 锁定密码,让某用户不能修改密码
[root@VM_0_10_centos shell]# passwd -l tmp_2
Locking password for user tmp_2.
passwd: Success
# 清除用户密码
[root@VM_0_10_centos shell]# passwd -d tmp_2
Removing password for user tmp_2.
passwd: Success
# 查看密码状态
[root@VM_0_10_centos shell]# passwd -S tmp_2
tmp_2 NP 2019-11-25 0 99999 7 -1 (Empty password.)
# 解锁密码
[root@VM_0_10_centos shell]# passwd -u tmp_2
chage命令
chage命令用于修改密码的有效期
格式:
chage [<选项>] <用户名>
选项:
-m days: 密码可更改的最小天数。为零时代表任何时候都可以更改密码。
-M days: 指定口令有效的最多天数。当该选项指定的天数加上-d选项指定的天数小于当前的日期时,用户在使用该帐号前就必须改变口令。
-d days: 指定从1970年1月1日起,口令被改变的天数。
-I days: 指定口令过期后,帐号被锁前不活跃的天数。如果值为0,帐号在口令过期后就不会被锁。
-E date: 指定帐号被锁的日期。日期格式YYYY-MM-DD。若不用日期,也可以使用自1970年1月1日后经过的天数。
-W days: 指定口令过期前要警告用户的天数。
-l: 列出指定用户当前的口令时效信息,以确定帐号何时过期。
实例:
# 要求用户tmp_3两天内不能更改口令,并且口令最长的存活期为30天,并且口令过期前5天通知用户
[root@VM_0_10_centos shell]# chage -m 2 -M 30 -W 5 tmp_3
[root@VM_0_10_centos shell]# chage -l tmp_3
Last password change : Nov 25, 2019
Password expires : Dec 25, 2019
Password inactive : never
Account expires : never
Minimum number of days between password change : 2
Maximum number of days between password change : 30
Number of days of warning before password expires : 5
#设置密码过期时间
[root@tourby ~]# chage -E $(date +%F -d '+30days' ) stu1
[root@tourby ~]# chage -l stu1
最近一次密码修改时间 :密码必须更改
密码过期时间 :密码必须更改
密码失效时间 :密码必须更改
帐户过期时间 :7月 02, 2020
两次改变密码之间相距的最小天数 :0
两次改变密码之间相距的最大天数 :99999
在密码过期之前警告的天数 :7