第六章 用户和组

第六章 用户和组

6.1 用户管理

6.1.1 用户创建

其实在真生的生产环境中(即实际的项目运行环境)中,管理员操控Linux系统,并不都是使用root用户的,为了项目的安全与稳定,一般操控者都是使用普通用户登录系统的,所以在Linux关于用户的管理与配置还是使用比较多的,下面我们来详细介绍一下。

首先是用户的创建命令:useradd,其实Linux中useradd与adduser命令功能相同,只不过我们更习惯于使用useradd。示例如下:

useradd zhang ---新建用户

passwd zhang ---为新用户设置密码。

注:仅root管理员有权给其他用户设置密码

passwd ---设置当前用户自己的密码

6.1.2 用户配置文件

用户创建成功后,即可使用,而且重启后仍然存在。按照之前我们讲过的配置文件的思想,既然是重启后仍可用的,必定在系统中会有相应的配置文件做记录。记录用户信息的配置文件是:/etc/passed。我们可以vi看一下

vi /etc/passwd , 可见,里面内容较多,仔细观察会发现文件中是针对一个用户,一行文字描述,每个用户会有7列信息,之间用:分隔,这7列表示的意义是:

第一列:用户名

第二列:密码列,但有专用的密码配置文件记录密码,所以用x填充

第三列:用户ID,简称UID,UID由16bit的二进制组成,范围:0-65535

规律:0-99 系统用户 100-999 软件用户 1000以上 自定义用户

第四列:用户所在私有组ID,简称GID。大小范围、使用规律同UID

第五列:用户属性,如:电话、邮箱、住址等等,一般空着

第六列:用户家目录

第七列:用户登录后默认启用的shell

其中,第四列提到的私有组概念,我们会在下一节介绍,这里可以暂时人为是用户所在组的ID号。

这七列信息,日常使用会比较频繁,所以建议读者能够完全记住,可以独立写出。

结合之前所学的字符处理,我们可以灵活的进行用户信息的处理:

awk -F ":" '{print $1}' /etc/passwd ---仅显示用户名

awk -F ":" '($3>=1000){print $1,$3}' /etc/passwd ---显示自定义用户

第二列的密码列,Linux中有专用的密码配置文件,这个文件是:/etc/shadow,我们也可以vi查看一下其内容。里面也分很多的列:

用户名: 用户登录到系统时使用的名字,而且是惟一的

口令: 即密码,存放加密的口令

最后一次修改时间: 标识从某一时刻起到用户最后一次修改时间

最大时间间隔: 口令保持有效的最大天数,即多少天后必须修改口令

最小时间间隔:再次修改口令之间的最小天数

警告时间: 从系统开始警告到口令正式失效的天数

不活动时间:口令过期少天后,该账号被禁用

失效时间:指示口令失效的绝对天数(从1970年1月1日开始计算

标志: 未使用

由于密码配置文件中的时间计算比较麻烦,所以关于这个文件中的各列,我们可以了解其功能,不必太过严苛的记忆。

6.1.3 用户锁、解锁

用户加锁即禁用账户,则用户将不可登录。可以有两种方式实现:

方式一:锁密码

passwd -l zhang ---锁用户

passwd -u zhang ---解锁

方式二:锁用户名

usermod -L zhang ---锁用户

usermod -U zhang ---解锁

有心的读者可能会问,usermod –L 是锁用户,为什么会是大写L呢?其实按照Linux的命令规律,一般参数都是小写,既然用到了大写,说明小写l有其他功能。具体小写l其实是用户改名的功能:

usermod -l lisi zhang ---格式:-l 后面 先写新名,再写旧名

改完名的用户,可以vi /etc/passwd查看下,其实除了名字变了,其他UID、家目录等信息仍没变,所以改名功能对用户使用影响不大,使用率并不多。

另外,Linux中为了方便用户登录,还支持免密登录:

passwd -d zhang ---删除密码,即免密登录,实验可见无需密码即可登入系统

passwd zhang ---重新设置密码,即解除免密登录

除了免密意外,Linux还支持不禁用用户的前提下拒绝用户登录。具体使用如下:

场景:本机安装了某一项服务,如:邮件服务。该服务使用系统账号同时作为服务账号用,则系统登录密码同时是登录服务的密码。所以对于系统来讲存在安全风险,此时需要设置该账号不允许登录系统,但可以登录服务:

vi /etc/passwd ---找到该用户,设施shell为:/sbin/nologin , 即登出、注销shell

6.1.4 用户切换

Linux的命令操作界面中,除了可是使用ALT+F1-F6的终端切换外,也支持直接的用户操作状态切换,使用的命令是:su。格式如下:

su zhang ---切换至zhang用户状态下操作

su --- su后面不加用户名,即su到root状态下,常用语普通用户su到管理员身份下

su - zhang ---有-表示su过去后使用目标用户的环境变量配置,不加-的,表示仍使用原用户的环境变量配置

注:root用户su到其他用户,无需密码验证;但是普通用户间切换或su到root下都需要输入目标用户的密码才可以切换成功

exit ---返回之前用户状态

su命令使用灵活、方便,所以使用率较高,但需要注意的是,su到一个用户后,若要再su到另一用户或返回之前用户,建议先exit返回后再转,因为,每次su都会以目标用户的身份新开一个shell,su的层次过多会对系统资源(cpu、内存)有所浪费。

6.1.5 删除用户

用户的删除对应useradd的拼写结构,很容易联想到userdel,只是删除会有参数上的区别:

userdel zhang ---删除用户,但保留家目录等用户相关文件

userdel -r zhang ---删除用户,并删除所有该用户的相关文件

读者可以依次输入命令验证一下,不加-r参数的目的是,删除用户后,但保留其文件,以防止数据丢失,便于系统后续使用。若确定用户相关文件都是无用文件,即可-r彻底删除。

6.2 组管理

6.2.1 组的分类

Linux中组的概念与windows中的有些区别,除了组可以实现批量用户的管理功能之外,还增加了私有组的概念。

私有组:又称用户的主组,英文为primary group

Linux中规定,一个用户必须属于且只能属于一个私有组

新建用户时,若没有特殊指定,Linux系统会自动创建一个与该用

户同名的组,作为其私有组。 一个私有组,可以包含多个用户。

私有组不可删除。

标准组:又称附属组。

一般意义上用于多用户管理的组。用户可以属于一个或多个标准

组,也可以不属于任何标准组,同样,标准组中可以有或无用

户。标准组可删除。

其实私有组的概念我们可以认为是一个人出生后的家庭,我们每个人出生后都会直接属于一个家庭,即是私有组的意思。而上学或工作后,进入了班级或单位,受班级或单位制度的限制,即标准组。而我们平时在工作中,一般多使用标准组,对于私有组使用较少,但必须知道私有组的存在和原理。

6.2.2 组管理命令

首先,我们先来看一下组的创建:

groupadd zu11 ---新建组

与创建用户类似,组创建后,系统中也有专用的配置文件做组的记录。

vi /etc/group ---编辑组配置文件

可见里面会有四列信息显示:

组名:组密码,用x填充:组ID,即GID:标准组成员

值得注意的是,第四列中显示的是该组的标准组成员,所以很多如root组,后面没有显示任何用户,因为root用户是root组的私有组成员。

下面来介绍下组中用户的添加与删除

gpasswd -a zhang zu11 ---用户加入标准组

id zhang ---查看用户的id及组的相关信息

gpasswd -d zhang zu11 ---组中删除用户

另外,我们可以思考下,如果用户zhang加入到zu11中,是否以zhang用户的身份登录后可以给该组加入新成员呢?答案是不可以的,也就是说,即便是组中成员也不可以随意向组中加入新成员。因为,在Linux中只有组的管理员才有权限加入、删除成员。

gpasswd -A zhang zu11

--- -A指定组的管理员,只有组管理员才有权限给组加入、删除用户

gpasswd -A root zu11

--- 再次指定组管理员,是替换关系,即原管理员被撤权

gpasswd -A root,zhang zu11 --- 设置多个管理员

这里需要注意的是,再次指定组管理员的话,之前管理员是会被撤销的,而且组的管理员设置后,是无法查看到的,我们只能做好操作记录,以便后期管理。

除了gpasswd命令,usermod命令也可以设置用户的标准组、私有组,不过与gpasswd还是有很大区别的:

usermod -G zu22 zhang --- -G 替换用户的标准组,

但此命令将用户加入到指定的标准组后,会从其他标准组中退出。也就是说,假设用户zhang之前已在zu11中,则执行上述命令后,zhang会加入zu22,但同时也会从zu11中退出。

usermod -g zu11 zhang --- -g 替换用户的私有组

最后,来看一下组的删除:

groupdel zu11 ---删除组,前提:该组不是私有组

到此,我们知道用户创建后会有UID、GID、家目录、SHELL等属性的设置,那么在创建用户时,我们其实是可以直接指定这些参数,无需使用系统默认设置的,如下:

useradd -u 1100 -g zu11 -G zu22 -d /mnt/lisi -s /bin/bash lisi

参数介绍:-u UID -g 私有组 -G 标准组 -d 家目录 -s shell

综上所述,我们可以总结得到,新建用户后会产生关系的相关文件是:/etc/passwd /etc/shadow /etc/group /home/家目录 $HOME/ 环境变量配置文件。

6.3 sudo授权

6.3.1 挂载光盘

在讲sudo授权前,为了能够方便案例演示,我们先来简单介绍一下Linux中光盘的挂载使用。

首先,我们先在虚拟机的中光驱中放入光盘:右键 虚拟机标签 ,选“设置”=>找到光驱,指定光盘镜像=>上侧点中:已连接=>确定

我们知道,光盘类似于磁盘分区,都是存储类设备,所以我们必须挂载后才可以使用,而Linux系统安装完毕后,已经为我们准备好了媒体的挂载点:/media,所以我们可以以root用户登录到虚拟机中,直接输入如下命令:

mount /dev/cdrom /media ---挂载光驱, /dev/cdrom 光驱设备

umount /media ---卸载光驱

6.3.2 sudo授权

学会了光盘的挂载,我们可以试着切换到普通用户身份下,试着挂载光驱看看,会报如下错误:

原因是在Linux中,很多命令普通用户是无权使用的,但是如果我们想允许特定的用户执行某些系统命令,该怎么办呢?这就需要用到sodu授权了

我们首先切换回root用户下:su root

visodu ---打开sudo编辑界面,注意:此命令中没有空格,是连续书写的。

其中会找到 root ALL=(ALL) ALL 这一行。这一行是允许root用户在任何主机(包括本机)上执行所有命令,在其下面一行写入就可以。

格式:用户 主机名=(以哪个用户的身份) 命令的绝对路径

注:命令绝对路径可以使用whereis查看到

示例:zhang centos7-1=(root) /usr/bin/mount,/usr/bin/umount

解释:给zhang授权,允许zhang在centos7-1主机上以root的身份执行mount、umount命令

好了,到此保存退出即可。其实用visudo命令其实就是编辑的/etc/sudoers配置文件。

下面切换到普通用户下做验证:

su zhang

sudo mount /dev/cdrom /media ---使用sudo执行命令,会提示输

入zhang的密码,验证成功后命

令执行成功

再有,我们也可以把多个命令设置成为命令别名,即把多个命令加入到一个命令集合中,以便多次授权给用户使用,具体如下:

visudo ---写入

Cmnd_Alias GUAZAI=/usr/bin/mount,/usr/bin/umount

---设定命令别名,即把多个命令组成一个命令集,注:别名必须大写

zhang CentOS7-1=GUAZAI ---给用户授权,注:是否写(root)皆可

%zu11 CentOS7-1=(root) GUAZAI

--- %给组授权,则组中成员允许使用sudo执行命令

本文分享自微信公众号 - 教主小筑(gh_e0879483602d)

原文出处及转载信息见文内详细说明,如有侵权,请联系 yunjia_community@tencent.com 删除。

原始发表时间:2019-04-17

本文参与腾讯云自媒体分享计划,欢迎正在阅读的你也加入,一起分享。

我来说两句

0 条评论
登录 后参与评论

推荐阅读

  • 远程办公经验为0,如何将日常工作平滑过度到线上?

    我是一名创业者,我的公司(深圳市友浩达科技有限公司)在2018年8月8日开始运营,现在还属于微型公司。这个春节假期,我一直十分关注疫情动向,也非常关心其对公司带来的影响。

    TVP官方团队
    TAPD 敏捷项目管理腾讯乐享企业邮箱企业编程算法
  • 数据中台,概念炒作还是另有奇效? | TVP思享

    作者简介:史凯,花名凯哥,腾讯云最具价值专家TVP,ThoughtWorks数据智能业务总经理。投身于企业数字化转型工作近20年。2000年初,在IBM 研发企业级中间件,接着加入埃森哲,为大型企业提供信息化架构规划,设计,ERP,云平台,数据仓库构建等技术咨询实施服务,随后在EMC负责企业应用转型业务,为企业提供云迁移,应用现代化服务。现在专注于企业智能化转型领域,是数据驱动的数字化转型的行业布道者,数据中台的推广者,精益数据创新体系的创始人,2019年荣获全球Data IQ 100人的数据赋能者称号,创业邦卓越生态聚合赋能官TOP 5。2019年度数字化转型专家奖。打造了行业第一个数据创新的数字化转型卡牌和工作坊。创建了精益数据创新方法论体系构建数据驱动的智能企业,并在多个企业验证成功,正在向国内外推广。

    TVP官方团队
    大数据数据分析企业
  • 扩展 Kubernetes 之 CRI

    使用 cri-containerd 的调用流程更为简洁, 省去了上面的调用流程的 1,2 两步

    王磊-AI基础
    Kubernetes
  • 扩展 Kubernetes 之 Kubectl Plugin

    kubectl 功能非常强大, 常见的命令使用方式可以参考 kubectl --help,或者这篇文章

    王磊-AI基础
    Kubernetes
  • 多种登录方式定量性能测试方案

    最近接到到一个测试任务,某服务提供了两种登录方式:1、账号密码登录;2、手机号+验证码登录。要对这两种登录按照一定的比例进行压测。

    八音弦
    测试服务 WeTest
  • 线程安全类在性能测试中应用

    首先验证接口参数签名是否正确,然后加锁去判断订单信息和状态,处理用户增添VIP时间事务,成功之后释放锁。锁是针对用户和订单的分布式锁,使用方案是用的redis。

    八音弦
    安全编程算法
  • 使用CDN(jsdelivr) 优化博客访问速度

    PS: 此篇文章适用于 使用 Github pages 或者 coding pages 的朋友,其他博客也类似.

    IFONLY@CUIT
    CDNGitGitHub开源
  • 扩展 Kubernetes 之 CNI

    Network Configuration 是 CNI 输入参数中最重要当部分, 可以存储在磁盘上

    王磊-AI基础
    Kubernetes
  • 聚焦【技术应变力】云加社区沙龙online重磅上线!

    云加社区结合特殊时期热点,挑选备受关注的音视频流量暴增、线下业务快速转线上、紧急上线防疫IoT应用等话题,邀请众多业界专家,为大家提供连续十一天的干货分享。从视野、预判、应对等多角度,帮助大家全面提升「技术应变力」!

    腾小云
  • 京东购物小程序购物车性能优化实践

    它是小程序开发工具内置的一个可视化监控工具,能够在 OS 级别上实时记录系统资源的使用情况。

    WecTeam
    渲染JavaScripthttps网络安全缓存

扫码关注云+社区

领取腾讯云代金券