第6章 Linux系统用户与用户组管理(上)
sinye56 2024-11-05 11:45 12 浏览 0 评论
提醒:本文为合集文章,后续会持续更新!
关注我,每日提升!
关于这部分内容,阿铭在Linux系统日常管理工作中用得并不多,但并不代表这部分内容不重要。毕竟Linux系统是一个多用户系统,每个账号用来干什么,我们必须了如指掌,因为这涉及安全问题。
安装完系统后,我们就一直使用root账号来操作,其实这并不安全。因为root账号权限太高,容易误操作。阿铭建议你以后在工作中尽量避免直接使用root账号登录系统,使用普通用户也可以完成大部分工作。
5.1 认识/etc/passwd和/etc/shadow
这两个文件可以说是Linux系统中最重要的文件之一。如果没有这两个文件或者这两个文件出了问题,则无法正常登录系统。下面咱们先来看看/etc/passwd文件,示例命令如下:
# cat /etc/passwd | head
root:x:0:0:root:/root:/bin/bash
bin:x:1:1:bin:/bin:/sbin/nologin
daemon:x:2:2:daemon:/sbin:/sbin/nologin
adm:x:3:4:adm:/var/adm:/sbin/nologin
lp:x:4:7:lp:/var/spool/lpd:/sbin/nologin
sync:x:5:0:sync:/sbin:/bin/sync
shutdown:x:6:0:shutdown:/sbin:/sbin/shutdown
halt:x:7:0:halt:/sbin:/sbin/halt
mail:x:8:12:mail:/var/spool/mail:/sbin/nologin
operator:x:11:0:operator:/root:/sbin/nologin
看到上面那条命令,你是不是有点不知所以呢?其实,head前面的符号|,我们称为管道符,它的作用是把前面的命令的输出再输入给后面的命令。管道符在第11章中还会介绍,阿铭用得也是蛮多的,请掌握它的用法。
5.1.1 /etc/passwd解说
/etc/passwd由:分割成7个字段,每个字段的具体含义如下所示。
- 第1个字段为用户名(如第1行中的root就是用户名),它是代表用户账号的字符串。用户名中的字符可以是大小写字母、数字、减号(不能出现在首位)、点或下划线,其他字符不合法。虽然用户名中可以出现点,但不建议使用,尤其是首位。另外,减号也不建议使用,容易造成混淆。
- 第2个字段存放的是该账号的口令。这里为什么是x呢?早期的Unix系统口令确实存放在这里,但基于安全因素,后来就将其存放到/etc/shadow中了,这里只用一个x代替。
- 第3个字段为一个数字,这个数字代表用户标识号,也称为uid。系统就是通过这个数字识别用户身份的。这里的0就是root,也就是说我们可以修改test用户的uid为0,那么系统会认为root和test为同一个账户。uid的取值范围是0~655 35(但实际上已经可以支持到429 496 729 4),0是超级用户(root)的标识号,Rocky 8的普通用户标识号从1000开始。如果我们自定义建立一个普通用户,你会看到该账户的标识号是大于或等于1000的。
- 第4个字段也是数字,表示组标识号,也称为gid。这个字段对应着/etc/group中的一条记录,其实/etc/group和/etc/passwd基本类似。
- 第5个字段为注释说明,没有实际意义。通常记录该用户的一些属性,例如姓名、电话、地址等。我们可以使用chfn命令来更改这些信息,这在稍后会介绍。
- 第6个字段为用户的家目录,当用户登录时,就处在这个目录下。root的家目录是/root,普通用户的家目录则为/home/username,用户家目录是可以自定义的。比如,建立一个普通用户test1,要想让test1的家目录在/data目录下,只要将/etc/passwd文件中对应该用户那行中的本字段修改为/data即可。
- 最后一个字段为用户的shell。用户登录后,要启动一个进程,用来将用户下达的指令传给内核,这就是shell。Linux的shell有sh、csh、ksh、tcsh、bash等多种,而RHEL/Rocky的shell就是bash。查看/etc/passwd文件,该字段中除了/bin/bash,还有很多/sbin/nologin,它表示不允许该账号登录。如果想建立一个不允许登录的账号,可以把该字段改成/sbin/nologin,默认是/bin/bash。
5.1.2 /etc/shadow解说
/etc/shadow和/etc/passwd类似,由:分割成9个字段,示例命令如下:
# cat /etc/shadow |head -n 3
root:$6$Wu/W4eryssf9B3xQ$jgNuM24oQ9boSTUPaeJ/79GFjLUX912bSDu3ak40qJIxNj4/SpaK.JXguDYowM00mt3/5tvNIoBJ7RNcpH2K.1:18257:0:99999:7:::
bin:*:18078:0:99999:7:::
daemon:*:18078:0:99999:7:::
每个字段的含义如下所示:
- 第1个字段为用户名,与/etc/passwd对应。
- 第2个字段为用户密码,是该账号的真正密码。这个密码已经加密,但是有些黑客还是能够解密的。所以,将该文件属性设置为000,但root账户是可以访问或更改的。使用命令ls -l查看该文件的权限,示例命令如下:
- # ls -l /etc/shadow
---------- 1 root 689 12月 30
07:46 /etc/shadow - 第3个字段为上次更改密码的日期,这个数字以1970年1月1日和上次更改密码的日期为基准计算而来。例如,上次更改密码的日期为2020年1月1日,则这个值就是365* (2020-1970)+(2020-1970)/4+1=18263。如果是闰年,则有366天。
- 第4个字段为要过多少天才可以更改密码,默认是0,即不受限制。
- 第5个字段为密码多少天后到期,即在多少天内必须更改密码。例如,这里设置成30,则30天内必须更改一次密码;否则,将不能登录系统。默认是99999,可以理解为永远不需要改。
- 第6个字段为密码到期前的警告期限。若这个值设置成7,则表示当7天后密码过期时,系统就发出警告,提醒用户他的密码将在7天后到期。
- 第7个字段为账号失效期限。如果这个值设置为3,则表示密码已经到期,然而用户并没有在到期前修改密码,那么再过3天,这个账号便失效,即锁定。
- 第8个字段为账号的生命周期。跟第3个字段一样,这个周期是按距离1970年1月1日多少天算的。它表示的含义是,账号在这个日期前可以使用,到期后账号将作废。
- 最后一个字段作为保留用的,没有什么意义。
上面关于密码文件字段的介绍内容偏多并不太容易记住,在这里阿铭提醒你,这部分内容无需记住,只需要了解即可,因为在工作中我们几乎用不到这些知识点。
5.2 用户和用户组管理
上面介绍了/etc/passwd和/etc/shadow这两个文件的具体含义,但这只是理论知识,实际上,对于在Linux下用户和组如何创建、删除以及更改其属性,我们一无所知。
5.2.1 新增组的命令groupadd
命令groupadd的格式为 groupadd [-g GID] groupname,示例命令如下:
# groupadd grptest1
# tail -n1 /etc/group
grptest1:x:1002:
如果不加-g选项,则按照系统默认的gid创建组。跟uid一样,gid也是从1000开始的。我们也可以按如下操作自定义gid:
# groupadd -g 1008 grptest2
# tail -n2 /etc/group
grptest1:x:1002:
grptest2:x:1008:
5.2.2 删除组的命令groupdel
有时,我们会有删除组的需求,此时可进行如下操作:
# groupdel grptest2
# tail -n2 /etc/group
slocate:x:21:
grptest1:x:1002:
命令groupdel没有特殊选项,但有一种情况不能删除组,如下所示:
# groupdel user1
groupdel:不能移除用户“user1”的主组
上例中,user1组中包含user1账户,只有删除user1账户后才可以删除该组。
5.2.3 增加用户的命令useradd
从字面意思上来看,useradd就是增加用户,该命令的格式为useradd [-u UID] [-g GID] [-d HOME] [-M] [-s],其中各个选项的具体含义如下。
- -u:示自定义UID。
- -g:表示使新增用户属于已经存在的某个组,后面可以跟组id,也可以跟组名。
- -d:表示自定义用户的家目录。
- -M:表示不建立家目录。
- -s:表示自定义shell。
下面我们先来新建一个用户test10,示例命令如下:
# useradd test10
# tail -n1 /etc/passwd
test10:x:1001:1001::/home/test10:/bin/bash
# tail -n1 /etc/group
test10:x:1001:
如果useradd不加任何选项,直接跟用户名,则会创建一个跟用户名同名的组。当然,很多时候需要我们自己去定义uid、gid或者所属的组,示例命令如下:
# useradd -u1005 -g 1006 -M -s /sbin/nologin user11
useradd:“1006”组不存在
# useradd -u1005 -g 1001 -M -s /sbin/nologin user11
# useradd -u1006 -g grptest1 user12
# tail -n2 /etc/passwd
user11:x:1005:1001::/home/user11:/sbin/nologin
user12:x:1006:1002::/home/user12:/bin/bash
# tail -n2 /etc/group
user1:x:1003:
test10:x:1001:
如果-g选项后面跟一个不存在的gid,则会报错,提示该组不存在。刚刚上面说过,加上-M选项后,则不建立用户家目录,但在/etc/passwd文件中仍然有这个字段。如果你使用命令ls /home/user11查看一下,会提示该目录不存在。所以,-M选项的作用只是不创建那个目录。下面我们来查看user11的家目录,会提示我们目录不存在,示例命令如下:
# ls /home/user11
ls: 无法访问/home/user11: 没有那个文件或目录
5.2.4 删除账户的命令userdel
命令userdel的格式为userdel [-r] username,其中-r选项的作用是,当删除用户时,一并删除该用户的家目录。下面我们先来看看user12的家目录,示例命令如下:
# ls -ld /home/user12
drwx------ 2 user12 grptest1 62 1月 2 06:47 /home/user12
如果不加-r选项,则会直接删除用户user12,但保留其家目录,如下所示:
# userdel user12
# ls -ld /home/user12
drwx------ 2 user12 grptest1 62 1月 2 06:47 /home/user12
此时user12的家目录还在,那么我们再加上-r选项删除user1用户,如下所示:
# ls -ld /home/user1
drwx------ 2 user1 test10 62 12月 30
07:46 /home/user1
# userdel -r user1
# ls -ld /home/usre1
ls: 无法访问/home/user1: 没有那个文件或目录
此时user1的家目录已经不复存在。
相关推荐
- 程序员:JDK的安装与配置(完整版)_jdk的安装方法
-
对于Java程序员来说,jdk是必不陌生的一个词。但怎么安装配置jdk,对新手来说确实头疼的一件事情。我这里以jdk10为例,详细的说明讲解了jdk的安装和配置,如果有不明白的小伙伴可以评论区留言哦下...
- Linux中安装jdk并配置环境变量_linux jdk安装教程及环境变量配置
-
一、通过连接工具登录到Linux(我这里使用的Centos7.6版本)服务器连接工具有很多我就不一一介绍了今天使用比较常用的XShell工具登录成功如下:二、上传jdk安装包到Linux服务器jdk...
- 麒麟系统安装JAVA JDK教程_麒麟系统配置jdk
-
检查检查系统是否自带java在麒麟系统桌面空白处,右键“在终端打开”,打开shell对话框输入:java–version查看是否自带java及版本如图所示,系统自带OpenJDK,要先卸载自带JDK...
- 学习笔记-Linux JDK - 安装&配置
-
前提条件#检查是否存在JDKrpm-qa|grepjava#删除现存JDKyum-yremovejava*安装OracleJDK不分系统#进入安装文件目...
- Linux新手入门系列:Linux下jdk安装配置
-
本系列文章是把作者刚接触和学习Linux时候的实操记录分享出来,内容主要包括Linux入门的一些理论概念知识、Web程序、mysql数据库的简单安装部署,希望能够帮到一些初学者,少走一些弯路。注意:L...
- 测试员必备:Linux下安装JDK 1.8你必须知道的那些事
-
1.简介在Oracle收购Sun后,Java的一系列产品就被整合到Oracle官网中,打开官网乍眼一看也不知道去哪里下载,还得一个一个的摸索尝试,而且网上大多数都是一些Oracle收购Sun前,或者就...
- Linux 下安装JDK17_linux 安装jdk1.8 yum
-
一、安装环境操作系统:JDK版本:17二、安装步骤第一步:下载安装包下载Linux环境下的jdk1.8,请去官网(https://www.oracle.com/java/technologies/do...
- 在Ubuntu系统中安装JDK 17并配置环境变量教程
-
在Ubuntu系统上安装JDK17并配置环境变量是Java开发环境搭建的重要步骤。JDK17是Oracle提供的长期支持版本,广泛用于开发Java应用程序。以下是详细的步骤,帮助你在Ubuntu系...
- 如何在 Linux 上安装 Java_linux安装java的步骤
-
在桌面上拥抱Java应用程序,然后在所有桌面上运行它们。--SethKenlon(作者)无论你运行的是哪种操作系统,通常都有几种安装应用程序的方法。有时你可能会在应用程序商店中找到一个应用程序...
- Windows和Linux环境下的JDK安装教程
-
JavaDevelopmentKit(简称JDK),是Java开发的核心工具包,提供了Java应用程序的编译、运行和开发所需的各类工具和类库。它包括了JRE(JavaRuntimeEnviro...
- linux安装jdk_linux安装jdk软连接
-
JDK是啥就不用多介绍了哈,外行的人也不会进来看我的博文。依然记得读大学那会,第一次实验课就是在机房安装jdk,编写HelloWorld程序。时光飞逝啊,一下过了十多年了,挣了不少钱,买了跑车,娶了富...
- linux安装jdk,全局配置,不同用户不同jdk
-
jdk1.8安装包链接:https://pan.baidu.com/s/14qBrh6ZpLK04QS8ogCepwg提取码:09zs上传文件解压tar-zxvfjdk-8u152-linux-...
- 运维大神教你在linux下安装jdk8_linux安装jdk1.7
-
1.到官网下载适合自己机器的版本。楼主下载的是jdk-8u66-linux-i586.tar.gzhttp://www.oracle.com/technetwork/java/javase/downl...
- window和linux安装JDK1.8_linux 安装jdk1.8.tar
-
Windows安装JDK1.8的步骤:步骤1:下载JDK打开浏览器,找到JDK下载页面https://d.injdk.cn/download/oraclejdk/8在页面中找到并点击“下载...
- 最全的linux下安装JavaJDK的教程(图文详解)不会安装你来打我?
-
默认已经有了linux服务器,且有root账号首先检查一下是否已经安装过java的jdk任意位置输入命令:whichjava像我这个已经安装过了,就会提示在哪个位置,你的肯定是找不到。一般我们在...
你 发表评论:
欢迎- 一周热门
- 最近发表
- 标签列表
-
- oracle忘记用户名密码 (59)
- oracle11gr2安装教程 (55)
- mybatis调用oracle存储过程 (67)
- oracle spool的用法 (57)
- oracle asm 磁盘管理 (67)
- 前端 设计模式 (64)
- 前端面试vue (56)
- linux格式化 (55)
- linux图形界面 (62)
- linux文件压缩 (75)
- Linux设置权限 (53)
- linux服务器配置 (62)
- mysql安装linux (71)
- linux启动命令 (59)
- 查看linux磁盘 (72)
- linux用户组 (74)
- linux多线程 (70)
- linux设备驱动 (53)
- linux自启动 (59)
- linux网络命令 (55)
- linux传文件 (60)
- linux打包文件 (58)
- linux查看数据库 (61)
- linux获取ip (64)
- linux进程通信 (63)