05用户和用户组 本章目标理解用户和用户组的概念【理解】用户管理【掌握】用户组管理【掌握】本章内容一、用户及用户组概念1、概念和作用用户概述Linux是一个多用户﹑多任务的分时操作系统允许同时登录多个用户。每个用户必须申请一个账号并设置密码才能登录系统访问资源。通俗的说指的是Linux操作系统中用于管理系统或者服务的人作用通过用户去使用操作系统管理文件用户组概述用户组—简单的说linux系统中的用户组(group)就是具有相同特性的用户(user)集合作用将具有相关功能权限的用户添加到一个组里面方面用户的管理2、用户的分类Linux中用户分为三类超级用户、系统用户、普通用户【受限用户】超级用户 拥有系统上的全部权限默认为root用户系统用户 也称为服务账号通常由系统程序创建例如运行Apache Web服务器的用户httpdUID在1到1000之间,通常不能登录系统一般情况下登录的shell为/sbin/nologin普通用户用户新建的账号一般就是普通账号,可以访问有限资源普通用户的UID默认为1000~60000系统用户的作用这里以httpd中的http这个账号为例来说明当你安装httpd服务后会在/etc/passwd文件中产生一个http的用户该用户的shell就是/sbin/nologin类型的这个apache用户就是系统用户这个用户的主要作用是确保Apache能够以特定的用户身份来访问文件系统从而限制了Apache进程的权限增加了系统的安全性3、Linux的用户及用户组3.1、Linux的多用户多任务Linux 系统是一个多用户多任务的操作系统所谓多用户多任务是指支持多个用户在同一时间内登陆不同用户可以执行不同的任务并且互不影响。3.2、什么是用户任何一个运维人员想要登录服务器都必须先申请一个账号然后以这个账号的身份进入系统就像我们前面说的giles这个账号。每个账号都拥有一个唯一的用户名和各自的密码用户在登录时输入正确的用户名和密码后就能够进入系统默认会进入到这个用户自己的主目录3.3、什么是用户组用户组是具有相同特征用户的逻辑集合简单来说就是具有相同权限的用户的集合例如研发部有20名员工他们都需要访问一个文件夹如果我们给这20个用户的账号分别设置权限这样太麻烦了所以我们会建立一个用户组叫DEV对这个组设置权限将这20个用户加入这个组就可以了3.4、用户和用户组的关系用户和用户组的对应关系有一对一、一对多、多对一和多对多一对一即一个用户可以存在一个组中也可以是组中的唯一成员。比如root一对多即一个用户可以存在多个组中这个用户就具有这些组。多对一即多个用户可以存在一个组中这些用户这些组的共同权限。多对多即多用户可以存在于多个组中。并且几个用户可以归属相同的组其实多对多的关系是前面三条的扩展在Linux中的用户组默认组(主组)附加组主组新建一个用户之后这个用户就属于一个跟自己名称一模一样的一个组比如:giles,那么就会自动生成一个giles组附加组一个附加组有多个用户用户除了属于主组之外它属于附加组附加组一般附加一些权限4、用户和组相关配置文件/etc/passwd文件系统用户配置文件是用户管理中最重要的文件这个文件记录了Linux系统中每个用户的一些基本属性并且对所有用户可读/etc/shadow文件用户影子文件由于/etc/passwd文件是所有用户都可读的这样就导致了用户的密码容易出现泄露因此,Linux将用户的密码信息从/etc/passwd中分离出来单独的放在了一个文件中这个文件就是/etc/shadow,这文件只有root用户拥有读权限/etc/group文件用户组配置文件用户组的所有信息都存放在此文件中/etc/login.defs文件用户定义创建一个用户时的默认设置比如指定用户的UID和GID的范围用户的过期时间、是否需要创建用户主目录等等/etc/default/useradd文件定义了新建用户的一些默认属性比如用户的主目录、使用的shell等等通过更改此文件可以改变创建新用户的默认属性值。/etc/skel文件目录定义了新建用户在主目录下默认的配置文件更改/etc/skel目录下的内容就可以更改新建用户默认主目录的配置文件信息。二、用户管理Linux系统是一个多用户多任务的操作系统任何一个要使用系统资源的用户都必须首先向系统管理员申请一个账号然后以这个账号的身份进入系统。1、查询用户1.1、查询所有用户信息Linux系统中一切皆文件用户的信息也是存储在一个文件中的存储用户信息的文件/etc/passwd可以查看这个文件里面的内容就可以获取用组的信息一般用户的不会太多可以使用cat直接查看/etc/passwd文件结构root:x:0:0:root:/root:/bin/bash 用户名:密码:用户ID:用户组ID:注释:家目录:解释器shell说明用户名: 登录linux时使用的用户名密码位:x代表占位符用户的密码仅仅是个占位符并不是用户的实际密码用户ID: 用户的识别符每个用户都有唯一的UID相当于人的身份证号码用户组ID: 该用户所属的主组ID-注释: 解释该用户是做什么用的就是备注的内容-家目录: 用户登录进入系统之后默认的位置-解释器shell: 等待用户进入系统之后用户输入指令之后该解释器会收集用户输入的指令转换成机器语言传递给内核处理 - /bin/bash: 表示用户可以登录到系统 - /sbin/nologin: 表示该用户不能登录到系统1.2、查询单个用户信息命令id [用户名]作用查看一个用户的一些基本信息包含用户id用户组id附加组id…该指令如果不指定用户则默认当前用户示例#查询当前用户[rootgiles ~]# iduid0(root)gid0(root)组0(root)环境unconfined_u:unconfined_r:unconfined_t:s0-s0:c0.c1023#查询指定用户[rootgiles ~]# id gilesuid1000(giles)gid1000(giles)组1000(giles)1.3、查询当前登录用户命令whoami示例[rootgiles home]# whoamiroot2、添加用户命令useradd [选项] 用户名选项选项说明-u指定用户uid唯一标识必须唯一不能超过UIDMAX/etc/login.defs中-g指定用户的默认组主组-G指定用户附加组可以指定多个-d指定用户家目录每个用户都有一个自己的家并且默认在/home/xx-M不要创建用户家目录-s指定用户默认的shell-c添加备注信息-r创建系统用户ID1000示例1创建一个用户monica不加任何参数[rootgiles ~]# useradd monica#指定用户id为1600,放弃基本组将用户加入root组同时添加到附加组1501[rootgiles ~]# useradd -u 1600 -g 0 -G 1501 lucy说明添加一个默认用户时系统会自动完成以下动作1、在/etc/passwd文件中创建一个monica的用户信息。2、在/etc/shadow文件中增加一条关于moncia的密码信息3、在/etc/group文件中增加一行与用户名相同名称的用户组,例如monica4、在/etc/gshadow文件中增加一行与新增用户组相关的用户组的密码5、自动在/home目录下创建了与用户同名的家目录3、给用户设置密码命令passwd [用户名]说明1、添加用户名给指定的用户设置密码2、不添加用户名给当前用户设置密码3、管理员root可以给任何用户修改密码4、普通用户可以给自己修改密码但是密码复杂度要符合要求示例给monica账号设置密码为yunJisuan123[rootgiles home]# passwd monica新的 密码输入新的密码 重新输入新的 密码再次输入密码 passwd所有的身份验证令牌已经成功更新。4、修改用户命令:usermod [选项] 用户名常用选项-u 指定用户uid唯一标识必须唯一-g 指定用户的默认组(主组)-G 指定用户附加组(一个用户可以加入多个组但是默认组只有一个)-d 指定用户家目录(每个用户都有一个自己的家并且默认在/home/xxx)-s 指定用户默认shell-L 锁定用户锁定后用户无法登陆系统lock-U 解锁用户unlock-c 备注修改用户帐号的备注文字示例用户的锁定和解锁#锁定lucy账号从root账号切换lucy账号查看效果[rootgiles ~]# usermod -L lucy#解锁lucy账号从root账号切换lucy账号查看效果[rootgiles ~]# usermod -U lucy示例更改用户组# 查看giles用户的基本信息[rootgiles ~]# id gilesuid1000(giles)gid1000(giles)组1000(giles)# 查看zhangsan用户的基本信息[rootgiles ~]# id zhangsanuid1001(zhangsan)gid1001(zhangsan)组1001(zhangsan)# 修改zhangsan的主组为giles[rootgiles ~]# usermod -g giles zhangsan# 修改zhangsan的附加组为jack[rootgiles ~]# usermod -G giles zhangsan# 再次查看zhangsan所在组[rootgiles ~]# id zhangsanuid1001(zhangsan)gid1000(giles)组1000(giles)5、删除用户命令: userdel [选项] 用户名常用选项-r 删除用户并且移除其家目录和邮箱-f 强制删除正在登录的用户示例#删除用户monca,保存家目录[rootgiles home]# userdel monica#删除用户以及用户的家目录[rootgiles home]# userdel -r monica在删除的过程中如果删除用户的主组(默认组)如果作为别的用户的附加组只能删除用户本身但是不能删除该用户的主组在删除的过程如果删除用户的id作为别的用户的id,这个时候也是不能删除的连该用户本身也不能删除只有该用户只有主组也作为别人的附加组此时就可以删除用户但是不会删除家目录和邮件信息文件除非携带-r参数如果要删除一个正在登陆的用户此时这个正在登陆的用户会占用一个进程此时超级管理员可以通过携带-f参数强制进行删除但是删除的使用户在/etc/passwd文件中的记录如果你也携带了-r参数那么也会将/home目录下中的家目录文件也一并删除但是该用户属于在删除之前登陆进去的删除用户之后直接该用户不能登陆此时该用户虽然被删除了但是它依然可以在该系统中进行操作之后退出后就不能进入系统了6、切换用户命令su [选项] 用户名常用选项-切换用户的同时切换到该用户的家目录注意a. 从root 往普通用户切换不需要密码但是反之则需要root 密码b. 切换用户之后前后的工作路径是不变的添加了选项[-]会自动切换到用户的家c. 普通用户没有办法访问root 用户家目录但是反之则可以三、用户组管理1、用户组查询Linux系统中一切皆文件用户组的信息也是存储在一个文件中的存储用户组信息的文件/etc/group可以查看这个文件里面的内容就可以获取用户组的信息一般用户组的不会太多可以使用cat直接查看/etc/group文件结构giles:x:1000:giles 用户组名:密码(占位符):用户组ID:这个组包含的用户(附属组)说明密码位x代表占位符用户组可以设置密码但是大部分情况下不需要设置组内用户名表示附加组是该组的用户名称2、用户组添加命令groupadd [选项] 用户组名选项-g设置用户组ID数字如果不指定则默认从1000之后递增1-999系统组示例#添加一个开发用户组组名为dev不指定用户组ID[rootgiles ~]# groupadd dev#添加一个测试用户组组名为test指定用户组ID为1005[rootgiles ~]# groupadd -g 1005 test3、用户组删除命令groupdel 用户组名示例[rootgiles ~]# groupdel test4、用户组成员管理用户可以将某一个组作为自己的主组用户也可以将某一个或者多个组作为自己的附属组所以可以针对用户组的成员进行相关的管理命令gpasswd [选项] 组名选项-a添加用户到组-d从组中删除成员-A指定管理员-M指定组成员可以批量的将用户**“设置”** 或“替换”而不是 **“添加”**到指定的组中覆盖当前成员列表示例将zhangsan添加到用户组dev# 新建一个用户组[rootgiles local]# groupadd dev# 将zhangsan用户添加到dev用户组中去[rootgiles local]# gpasswd -a zhangsan dev# 将zhangsan用户从dev用户组中删除[rootgiles local]# gpasswd -d zhangsan dev# 批量设置monica,alice两个用户到dev组中会覆盖当前的成员列表[rootserver01 ~]# gpasswd -M monica,alice dev# 将jerry用户设置为dev组中的管理员如果设置为该组的管理员那么该用户就具备了删除或者增加给这个组成员的权力而不需要必须通过root才能操作的权力赋予这个权力之后就可以通过jerry账号删除dev附加组中的成员等功能[rootserver01 ~]# gpasswd -A jerry dev