用户组管理

第1章 用户和组的配置文件

1.1/etc/passwd :存储用户信息,每一行表示一个用户信息,有多少行就表示多少个用户信息。
root : x : 0 : 0 : root : /root : /bin/bash

此文件由7个字段的数据组成,字段之间用“:”分隔,格式如下:
1用户名:2密码:3用户标识号UID:4组标识号GID:5个人资料:6主目录:7命令解释器

day 25 用户组管理_25


1.2/etc/shadow :存储用户密码信息文件
old : !! : 17749 : 0 : 99999 : 7 : : :
此文件由9个字段的数据组成,字段之间用“:”分隔,格式如下:
1用户名 2 密码 3 最近改动密码的日期 4 密码不可被更动的天数 5 密码需要重新变更的天数 6 密码需要变更期限前的警告期限 7 密码过期的恕限时间
8帐号失效日期 9 保留

1.3/etc/group :主要存储组相关信息的文件
oldboy : x : 500 :
此文件由4个字段的数据组成,字段之间用“:”分隔,格式如下:
1组名 2组密码 3组ID(GID) 4组成员

1.4/etc/gshadow :主要用来存储组密码信息
oldboy : ! : :
此文件由4个字段的数据组成,字段之间用“:”分隔,格式如下:
1组名 2组密码 3组管理员 4用户组成员

1.5和创建用户相关的目录
/etc/skel
注:此目录用来存放新用户需要的所有基础环境变量文件的目录。

实例1-1      使用oldboy用户登录到linux系统后,发现提示符为如下所示异常情况,请问如何恢复到正常的linux命令行提示符情况

-bash-4.1$

-bash-4.1$

 

模拟故障:
1
、useradd u1
2、passwd u1
3、在xshell里新开一个窗口
ssh IP地址 //执行此命令
例如 :ssh 10.10.10.30
4、弹出窗口 输入用户名和密码
5、在普通用户的家目录 ~ rm -rf .bash*
6、ls -a //发现.bash* 的文件全部删除
7、exit //退出登录
8、 ssh IP地址 //执行此命令在重新登录一次,登录后发现故障
注如果模拟故障不成功,原因分析:1、vim /etc/profile 2、注释掉PS=那行 3、 source /etc/profile
解决故障:
cp /etc/skel/.bash* ~ //把/etc/skel/.bash* 下的所有.bash* 文件拷贝到 用户的家目录

1.6useradd命令工作原理有以下几步完成:

 1、不带任何参数使用添加用户时,首先读/etc/login.defs    /etc/default/useradd 预先定义的规则
2、根据设置的规则添加用户,同时会向/etc/passwd  /etc/group文件添加新建的用户和组,但/etc/shadow   /etc/gshadow也会同步生成记录
3、同时系统会根据/etc/login.defs    /etc/default/useradd文件中配置的信息建立用户的家目录,并复制/etc/skel中所有隐藏的环境配置文件到新用户的家目录中,以完成对用户环境的初始化设置。

第2章 用户的特点

Linux是一个多用户、多任务的操作系统,如果要使用系统资源,就必须向系统管理员申请一个用户,通过这个用户进入系统,通过建立不同属性的用户实现不同的作用或权限,可以合理利用和控制系统资源。
Linux系统中用户角色分为三类:
1、管理员用户
默认是root用户,它的UID 和GID均为0,系统安装完成后自动生成的,默认通过它就可以登录系统,拥有最高的管理权限。
2、普通用户
由系统管理员root创建的,创建完成后可以登录系统,但默认无法创建、修改和删除任何管理员下的文件;UID从500-65535
3、系统用户(或虚拟用户)
安装系统后默认生成的用户,大多数不能登录系统,但它们是系统正常运行不可缺少的,它们的存在主要是为了方便系统管理,满足相应的系统进程对文件所属用户的要求;UID从 1-499

用户相关命令

1、             useradd 命令创建用户
语法格式:useradd [options] [login]
useradd [选项] [用户名]
选项:
-n 不创建以用户名为名的组
-c 创建用户时,添加个人信息
-u 用户ID值,这个值必须是唯一的
-s 用户登录后使用的shell
-g 指定用户对应的组,对应的组必须在系统中存在

范例1:useradd命令不使用任何选项
[root@localhost ~]# useradd agan
[root@localhost ~]# grep -w "agan" /etc/passwd
agan:x:504:504::/home/agan:/bin/bash
[root@localhost ~]# grep -w "agan" /etc/group
agan:x:504:
注:创建用户的同时,并创建了一个以自己为名的组

范例2:-n 选项
[root@localhost ~]# useradd -n agan1
[root@localhost ~]# grep -w "agan1" /etc/passwd
agan1:x:505:100::/home/agan1:/bin/bash
[root@localhost ~]# grep -w "agan1" /etc/group
[root@localhost ~]#
注:创建用户时,使用-n参数,不创建以自己为名的组

范例3:-c 选项
[root@localhost ~]# useradd -c oldboy,15810516499,河北 agan2
[root@localhost ~]# grep -w "agan2" /etc/passwd
agan2:x:506:506:oldboy,15810516499,河北:/home/agan2:/bin/bash
注:创建用户的同时,添加agan2用户的个人信息,个人信息使用逗号隔开。

范例4:-u 选项
[root@localhost ~]# useradd -u 888 agan3
[root@localhost ~]# grep -w "agan3" /etc/passwd
agan3:x:888:888::/home/agan3:/bin/bash
注:创建用户的同时,修改用户默认的UID

范例5: -s选项
[root@localhost ~]# useradd -s /sb
in/nologin tian
[root@localhost ~]# grep -w "tian" /etc/passwd
tian:x:8892:8892::/home/tian:/sbin/nologin
注:-s指定用户登录后的shell,/sbin/nologin 表示禁止登录,此例在企业中部署nginx、mysql等服务时经常用到。


范例6:-g选项
[root@localhost ~]# groupadd edu
[root@localhost ~]# useradd -g edu agan6
[root@localhost ~]# grep -w "agan6" /etc/passwd
agan6:x:8893:8893::/home/agan6:/bin/bash
[root@localhost ~]# id agan6
uid=8893(agan6) gid=8893(edu) groups=8893(edu)
注:让agan6用户,隶属于到edu组,这里通过id 命令来查看用户,所属于的组。因为使用-g 组信息记录在/etc/passwd中。事实上系统确认一个用户的所属组的时候是根据/etc/passwd的组ID。 因此,"useradd -g"仅仅修改/etc/passwd,而不会修改/etc/group。 加"-G"参数会把修改记录在/etc/group

 

2、             usermod 修改系统已经存在的用户信息
语法:usermod [options] [login]
usermod [选项] [用户名]
选项:
-c 修改用户的个人信息,同useradd 的-c功能
-g 修改用户对应的用户组,同 useradd的-d功能
-s 修改用户登录后使用的shell名称,同useradd的-s功能
-u 修改用户的uid ,同useradd 的-u功能
-l 修改用户的名称

范例1:-l选项,把agan6的用户名改为u1
[root@localhost ~]# usermod -l u1 agan6
新名 已存在的名

 

3、             userdel 删除用户
语法:userdel [options] [login]
userdel [选项] [用户名]
选项:
-f 强制删除用户
-r 删除用户的同时,删除与用户相关的所有文件(包含邮箱信息)

范例1:不加参数删除用户

userdel 用户名
只删除用户的个人信息,不能删除用户的邮箱信息,在/home下还可以看到用户名
注: 如果忘记添加-r参数时,想彻底删除用户 ,就要进入到邮箱所存在的路径,删除邮箱信息
[root@localhost home]# cd /var/spool/mail/
[root@localhost mail]# ls
agan11 agan8 tian u11 u3
agan6 agan9 u1 u2 u6

范例2:加-r参数 删除用户
userdel -r 用户名
删除用户(删除用户的个人信息和邮箱信息,也就是删除所有信息)
备注:当使用-r 也无法彻底清空用户内容时,把这两个配置文件中与要删除的用户相关的信息,注释或删除掉。
/etc/passwd /etc/group

 

 

4、修改用户密码命令 passwd
语法:passwd [option] [username]
passwd [选项] [用户名]
选项:
--stdin //从标准输入读取密码字符串

范例1:修改当前用户的密码
[root@localhost ~]# passwd
Changing password for user root.
New password:
BAD PASSWORD: it is WAY too short
BAD PASSWORD: is too simple
Retype new password:
passwd: all authentication tokens updated successfully.
注:普通用户使用passwd 修改密码时,必须满足密码复杂性要求;root 修改密码不需要满足密码复杂性。

范例2:修改普通用户的密码
[root@localhost ~]# useradd u1
[root@localhost ~]# passwd u1
Changing password for user u1.
New password:
BAD PASSWORD: it is WAY too short
BAD PASSWORD: is too simple
Retype new password:
passwd: all authentication tokens updated successfully.

范例3:一条命令非人工交互设置密码(企业使用技巧)
[root@localhost ~]# echo "123456" | passwd --stdin u1
Changing password for user u1.
passwd: all authentication tokens updated successfully.
注:这个命令在工作中批量设置密码时很有用

范例4:批量更新用户的密码
[root@localhost gj]# chpasswd //命令输入完,直接回车
root:123456 //格式 用户名:密码,用户必须存在才可以,一行一个用户
u1:123456
u2:654321 //输入完成后,直接ctrl+D 结束输入
注:此命令有一个bagel,当一行输入错误后,不能返回修改。
当使用useradd 命令批量创建用户后,可以使用chpasswd 命令批量设置密码或批量修改密码。

范例5:把用户和密码字符串放到文件里执行批量改密码
[root@localhost gj]# cat passwd.txt
u1:123
u2:321
u3:123
[root@localhost gj]# chpasswd < passwd.txt

 

Su  sudo

su的作用是变更为其它使用者的身份,超级用户除外,需要键入该使用者的密码。
su 切换用户却不切换工作环境 , su - 同时切换用户与工作环境


注:su的缺点造就了sudo的诞生
由于用户通过 su root 命令直接获取root权限,从而造成用户的权限太大,也就可能给系统造成危险。
为了既保证系统的安全又可以执行相应命令,sudo 也就以此诞生。
sudo作用:通过配置文件来限制用户的权限 ,可以让普通用户在执行指定的命令或程序时,拥有超级用户的权限。
sudo的工作过程如下:
1,当用户执行sudo时,系统会主动寻找/etc/sudoers文件,判断该用户是否有执行sudo的权限
2,确认用户具有可执行sudo的权限后,让用户输入用户自己的密码确认
3,若密码输入成功,则开始执行sudo后续的命令
4,root执行sudo时不需要输入密码(因为sudoers文件中有配置root ALL=(ALL) ALL这样一条规则)
范例1:给普通用户u1提权,让普通用户可以查看root用户的家目录;普通用户可以使用useradd命令,创建新用户
范例分析步骤:
1) useradd u1
2) visudo=vi打开/etc/sudoers文件 或 vim /etc/sudoers
注:visudo会检查内部语法,避免用户输入错误信息,所以我们一般使用visudo,编辑此文件要用root权限
3) 编辑文件的第98行,编辑完成后,wq! 强制保存退出
root ALL=(ALL) ALL
u1 ALL=(ALL) /bin/ls,/usr/sbin/useradd
4)使用u1 用户登录测试
sudo useradd u11 //可成功创建用户,证明提权成功
sudo ls /root //可查看root的家,证明提权成功
5) sudo -l //-l 参数是列出当前用户可执行的命令,但只有在sudoers文件里的用户才能使用该选项。

 

 

用户查询命令

w命令用于显示目前登入系统的用户信息。

day 25 用户组管理_day _02
执行这项指令可得知目前登入系统的用户有哪些人,以及他们正在执行的程序。

范例1:
单独执行 w 指令会显示所有的用户,您也可指定用户名称,仅显示某位用户的相关信息。
day 25 用户组管理_day _03

 

范例2:
w -h //-h:不打印头信息;

day 25 用户组管理_25_04

 

id命令 查看用户的UID 、GID

 [root@bogon /]# id user6
uid=8897(user6) gid=8899(z11) groups=8899(z11)
[root@bogon /]# id -g user6
8899
[root@bogon /]# id -G user6
8899
[root@bogon /]# id -u user6
8897

 

 

last命令用了显示用户登录情况,以下是直接显示固定行数的记录:
lastlog 命令 显示linux中所有用户最近一次远程登录的信息

第3章 组的特点

Linux系统中的用户组(group)就是具有相同特征的用户的集合;
有时我们需要让多个用户具有相同的权限,就要创建组;
将用户分组是Linux系统中对用户进行管理及控制访问权限的一种手段;
一个用户可以加入到多个组。

组的相关命令

1、             添加用户组命令 groupadd
语法:groupadd [options] [group]
groupadd [选项] [用户组]
选项:
-g gid 指定用户组的GID,GID唯一不能为负数,如果不指定GID从500开始
-f 新增一个组,强制覆盖一个已存在的组,GID、组成员不会改变。

范例1:添加组z11,查看添加后的组信息
[root@bogon ~]# groupadd z11
[root@bogon ~]# grep "z11" /etc/group
z11:x:8895:
[root@bogon ~]# tail -1 /etc/group
z11:x:8895:

 

2、将已存在的用户加入到组中的命令 gpasswd
语法:gpasswd [options] [user] [group]
gpasswd [选项] [用户名] [组名]
选项:
-a:添加一个用户到组,可以追加到组
-M:添加多个用户到组,覆盖之前的组成员
-d:从组删除用户

范例1:把user1用户添加到z1,并且查看是否添加成功
[root@bogon gj]# groupadd z1
[root@bogon gj]# useradd user1
[root@bogon gj]# gpasswd -a user1 z1
Adding user user1 to group z1
[root@bogon gj]# grep "z1" /etc/group
z1:x:8896:user1
注:-a选项只能添加一个用户,需要同时添加多用户时,使用-M参数

范例2:同时添加user2、user3用户到z1组(先创建user2、user3用户)
[root@bogon gj]# gpasswd -M user2,user3 z1
[root@bogon gj]# grep "z1" /etc/group
z1:x:8896:user2,user3
注:使用-M参数添加多个用户时,多用户之间使用逗号分割;添加批量用户时,先使用-a参数,在使用-M参数,就会覆盖之前添加过的用户;所以添加多用户时,先使用-M 参数。

范例3:将user2用户从组中删除
[root@bogon gj]# gpasswd -d user2 z1
Removing user user2 from group z1
[root@bogon gj]# grep "z1" /etc/group
z1:x:8896:user3

案例题分析:
两个参赛团队work1、work2,oldboy是两个组的裁判员,这两个团队互相竞争,各需提交一份项目方案报告,每组成员可以修改自己团队内的文件、队员不能删除文件、队长可以删除、且不能让其他团队的人修改、读取自己的文件内容,并且参赛的所有人不能修改密码。此时怎么办?每个参塞团队各3人。

 

3、             修改组信息的命令 groupmod
语法:groupmod [options] [group]
groupmod [选项] [组名]
groupmod -n 新名 旧名
groupmod -g 8888 dir
选项:
-n 修改组名
-g 修改GID

范例1:修改z1组的GID
[root@bogon gj]# grep "z1" /etc/group
z1:x:8896:user3
[root@bogon gj]# groupmod -g 8888 z1
[root@bogon gj]# grep "z1" /etc/group
z1:x:8888:user3

范例2:修改z1组的组名为newz1
[root@bogon gj]# grep "z1" /etc/group
z1:x:8888:user3
[root@bogon gj]# groupmod -n z1new z1
[root@bogon gj]# grep "z1" /etc/group
z1new:x:8888:user3

 

4、             删除组的命令 groupdel
语法:groupdel [group]
groupdel [组名]

范例1:
groupdel 组名
删除组,删除组后,用户名依然存在
附加命令: 查看用户属于到哪些组,使用命令:groups
语法:groups [user]

groups 用户名
范例1:
[root@bogon gj]# groups user1
user1 : user1 z2

第4章 附加

批量创建用户:
1、创建一个文件,此文件的扩展名必须为*.sh

vim aa.sh
#!/bin/bash
for ((i=1;i<=10;i++));
{
useradd gj$i

}
echo "
批量用户成功创建完成啦!!!"

2、sh aa.sh
3、查看脚本是否成功

ls /home
注:如果在home里看到,批量创建的用户,代表成功批量创建30个用户,并为30个用户批量设置密码,以脚本形式。