Linux系统管理入门:用户、组与权限管理
在Linux系统中,用户和组管理以及权限管理是Linux系统中非常重要的概念。用户和组管理涉及到用户的创建、修改、删除以及所属组的设置等操作,而权限管理则涉及到文件和目录的访问权限设置。本文将详细介绍Linux系统中用户与组管理以及权限管理的相关知识,帮助读者更好地理解和掌握Linux系统管理的基本概念和操作。
1、用户与组管理
用户
- 任何用户被分配一个独特的用户id号(UID)
- UID 0 标识root用户,0-999为系统用户
- 普通用户帐号通常从UID 1000 开始
- 用户名和UID信息通常存储在/etc/passwd文件中
- 当用户登录时它被分配一个主目录并且运行一个程序(通常是一个shell程序)
- 没有权限许可用户不能读取、写或者执行其他用户的文件
组
- 用户必须属于一个组
- 每一个组被分配一个独特的组ID(gid)
- gid信息保存在/etc/group中
- 每一个用户都有自己的私有组
- 可以将用户添加到别的组,该组称为用户的附加组
- 同—个组中的所有用户能共享属于这个组的文件
1.1、用户与组相关文件
以下两个文件可以说是Linux系统中最重要的文件之一。如果没有这两个文件或者这两个文件出了问题,则无法正常登录系统。下面咱们先来看看/etc/passwd文件。
(1)/etc/passwd
用户账号信息
- 字段1: 用户名称
- 字段2: 密码占位符”x”,早期的Unix系统口令确实存放在这里,但基于安全因素,后来就将其存放到/etc/shadow中了,这里只用一个x代替。(当x不存在时可以直接登录系统不需要验证密码,在RHEL8中仅对root用户有效)
- 字段3: 用户帐号的UID号,0是超级用户(root)的标识号,普通用户标识号从1000开始。如果我们自定义建立一个普通用户,你会看到该账户的标识号是大于或等于1000的。
- 字段4: 用户的私有组
- 字段5: 用户描述信息(显示在登录屏幕),没有实际意义
- 字段6: 用户的家目录,当用户登录时,就处在这个目录下。root的家目录是/root,普通用户的家目录则为/home/username,用户家目录是可以自定义的。
- 字段7: 登录Shell信息,用户登录系统以后运行的第一个程序(shell程序)
/bin/bash
/bin/nologin
禁止登录,用户不能登录可以使用su -s
临时指定登录shell程序,让其可以登录(仅root权限)
(2)/etc/shadow
用户密码信息
- 字段1 :用户帐号的名称
- 字段2: 加密的密码字串信息($6表示使用hash512,$1 md5,$5 hash256,如果是!!或*表示没有设置密码)
- 字段3: 最近—次修改密码的时间,表示从1970.01.01至今的天数
- 字段4: 密码的最短有效期,默认值为0,一直有效
- 字段5: 密码的最长有效期,默认值为99999;例如,这里设置成30,则30天内必须更改一次密码;否则,将不能登录系统。
- 字段6:密码即将到期警告天数,默认值为7
- 字段7: 在密码过期之后账号保持活动的天数,指定天数后账号被锁定,无法登录;如果这个值设置为3,则表示密码已经到期,然而用户并没有在到期前修改密码,那么再过3天,这个账号便失效,即锁定。
- 字段8: 帐号失效时间,默认值为空,以1970.01.01的天数表示,失效后删除账号
- 字段9:保留字段(未使用)
手动生成密码密文
1 |
|
(3)/etc/group
组账号信息
- 字段1: 组的名称
- 字段2: 密码占位符”x”
- 字段3: 组的ID号
- 字段4: 该组是user1, user2和user3 的附加组
其他相关文件
1 |
|
1.2、useradd命令
用于Linux中创建的新的系统用户。useradd可用来建立用户帐号。帐号建好之后,再用passwd设定帐号的密码.而可用userdel删除帐号。使用useradd指令所建立的帐号,实际上是保存在/etc/passwd
文本文件中。
语法
1 |
|
选项
1 |
|
参数
用户名:要创建的用户名。
示例
1 |
|
1.3、usermod命令
用于修改用户的基本信息。usermod 命令不允许你改变正在线上的使用者帐号名称。当 usermod 命令用来改变user id,必须确认这名user没在电脑上执行任何程序。你需手动更改使用者的 crontab 档。也需手动更改使用者的 at 工作档。采用 NIS server 须在server上更动相关的NIS设定。
语法
1 |
|
选项
1 |
|
参数
登录名:指定要修改信息的用户登录名。
示例
1 |
|
1.4、userdel命令
用于删除给定的用户以及与用户相关的文件
语法
1 |
|
选项
1 |
|
参数
用户名:要删除的用户名。
示例
1 |
|
请不要轻易用-r
选项;他会删除用户的同时删除用户所有的文件和目录,切记如果用户目录下有重要的文件,在删除前请备份。
1.5、passwd命令
用于设置用户的认证信息,包括用户密码、密码过期时间等。系统管理者则能用它管理系统用户的密码。只有管理者可以指定用户名称,一般用户只能变更自己的密码。
语法
1 |
|
选项
1 |
|
参数
用户名:需要设置密码的用户名。
示例
1 |
|
1.6、chage命令
chage命令 是用来修改帐号和密码的有效期限。
下图显示了相关的密码期限参数, 可以通过chage命令对其进行密码期限的调整
语法
1 |
|
选项
1 |
|
示例
chage -m 0 -M 90 -W7 -I 14 user3
分别修改用户密码的最短期限,最长期限,警告周期和失效期限chage -d O user3
强制要求用户在下一次登录时更新密码chage -l user03
命令显示user03的密码期限详情。chage -E 2020-10-10 user3
用户将于2020-10-10到期(YYYY-MM-DD格式)
1.7、groupadd命令
用于创建一个新的工作组,新工作组的信息将被添加到系统文件中。
语法
1 |
|
选项
1 |
|
参数
组名:指定新建工作组的组名。
实例
1 |
|
1.8、groupmod命令
更改群组识别码或名称。需要更改群组的识别码或名称时,可用groupmod指令来完成这项工作。
语法
1 |
|
选项
1 |
|
参数
组名:指定要修改的工作的组名。
1.9、groupdel命令
用于删除指定的工作组,本命令要修改的系统文件包括/ect/group和/ect/gshadow。若该群组中仍包括某些用户,则必须先删除这些用户后,方能删除群组。
语法
1 |
|
选项
1 |
|
参数
组:要删除的工作组名。
实例
1 |
|
1.10、gpasswd命令
是Linux下工作组文件/etc/group
和/etc/gshadow
管理工具。
语法
1 |
|
选项
1 |
|
参数
组:指定要管理的工作组。
实例
如系统有个peter账户,该账户本身不是groupname群组的成员,使用newgrp需要输入密码即可。
让使用者暂时加入成为该组成员,之后peter建立的文件group也会是groupname。所以该方式可以暂时让peter建立文件时使用其他的组,而不是peter本身所在的组。
所以使用gpasswd groupname
设定密码,就是让知道该群组密码的人可以暂时切换具备groupname群组功能的。
1 |
|
注意:添加用户到某一个组 可以使用usermod -G group_name user_name
这个命令可以添加一个用户到指定的组,但是以前添加的组就会清空掉。
所以想要添加一个用户到一个组,同时保留以前添加的组时,请使用gpasswd这个命令来添加操作用户:
1 |
|
1.11、groupmems命令
groupmems
命令允许用户管理自己的组成员列表,而不需要超级用户权限。groupmems
实用程序适用于将其用户配置为以他们自己的名义主组(即来宾/来宾)的系统。
只有作为管理员的超级用户可以使用 groupmems
来更改其他组的成员资格。
语法
1 |
|
选项
1 |
|
示例
1 |
|
2、权限管理
2.1、Linux文件安全
- 每—个文件都有—个uid和gid
- 任何进程运行时都带一个uid和一个或多个gid标识符
- 通常决定于那个用户执行这个进程
三种访问类型
- 运行的进程跟文件有着同样的uid(user)
- 运行的进程跟文件有着同样的gid(group)
- 其他进程(other)
权限优先级
- 如果uid匹配,用户权限适用
- 否则,如果gid匹配,组权限适用
- 如果都不匹配,其他权限适用
root用户可以修改所有人的文件,但是普通用户只能修改自己的文件
2.2、文件权限
查看文件和目录的权限
1 |
|
文件类型介绍
文件类型标识 | 文件类型 |
---|---|
- | 普通文件 |
d | 目录 |
l | 符号链接 |
s(伪文件) | 套接字 |
b(伪文件) | 块设备 |
c(伪文件) | 字符设备 |
p(伪文件) | 管道 |
权限介绍
权限针对文件与目录的含义
权限 | 针对文件 | 针对目录 |
---|---|---|
r(读) | 可以读取文件的内容 | 可以列出目录的内容(文件名、目录名) |
w(写) | 可以更改文件的内容 | 可以创建或删除目录的任一文件、目录 |
x(执行) | 可以将文件作为命令执行 | 可以进入目录(还需要r权限才能读取目录内容) |
注:cp只需目录拥有x权限即可;
如果一个目录属于普通用户,那么普通用户可以修改这个目录下的文件和子目录,但是仅限于文件的重命名、删除文件(对于文件的操作);如果该文件的所属主不是这个用户,不能修改文件本身的内容。
2.3、chmod命令
chmod命令用于更改文件对于某类用户的操作权限
a、符号方式修改
1 |
|
1 |
|
b、数字方式修改 、
使用三个数字(nnn)模式
1 |
|
通过把数值相加来计算权限
- 第一个数字代表所属主(u)的权限
- 第二个数字代表所属组(g)的权限
- 第三个数字代表其他人(o)的权限
表达式 | 权限 |
---|---|
000=0 | — |
001=1 | –x |
020=2 | -w- |
021=3 | -wx |
400 =4 | r– |
401=5 | r-x |
420=6 | rw- |
421=7 | rwx |
示例:
1 |
|
2.4、chown命令
- 只有root可以修改文件的拥有人, root和文件的拥有人可以修改文件的拥有组,前提是用户需要在组里面。
- chown和chgrp仅root可以执行,chmod普通用户也可以执行(前提是普通用户为该文件或目录的拥有人)
语法
1 |
|
选项
1 |
|
参数
用户:组:指定所有者和所属工作组。当省略“:组”,仅改变文件所有者;
文件:指定要改变所有者和工作组的文件列表。支持多个文件和目标,支持shell通配符。
示例
1 |
|
2.5、chgrp命令
用来改变文件或目录所属的用户组。该命令用来改变指定文件所属的用户组。其中,组名可以是用户组的id,也可以是用户组的组名。文件名可以 是由空格分开的要改变属组的文件列表,也可以是由通配符描述的文件集合。如果用户不是该文件的文件主或超级用户(root),则不能改变该文件的组。
语法
1 |
|
选项
1 |
|
参数
- 组:指定新工作名称;
- 文件:指定要改变所属组的文件列表。多个文件或者目录之间使用空格隔开。
示例
1 |
|
2.6、隐藏权限
2.6.1 chattr命令
用来改变文件属性。这项指令可改变存放在ext2文件系统上的文件或目录属性,这些属性共有以下8种模式:
1 |
|
语法
1 |
|
选项
1 |
|
示例
1 |
|
2.6.2 lsattr命令
用于查看文件的第二扩展文件系统属性。
语法
1 |
|
选项
1 |
|
lsattr经常使用的几个选项-D,-E,-R这三个选项不可以一起使用,它们是互斥的,经常使用的还有-l,-H,使用lsattr时,必须指出具体的设备名,用-l选项指出要显示设备的逻辑名称,否则要用-c,-s,-t等选项唯一的确定某个已存在的设备。
参数
文件:指定显示文件系统属性的文件名。
示例
1 |
|
2.7、默认权限
概念:所谓文件的默认权限(遮罩权限),是指用户创建文件后,文件天生就有的权限,不需要设置;因此默认权限是针对用户来设置的。
系统用户umask值默认为0022,普通用户的umask值为0002
计算方法:默认创建目录的最大权限是0777;文件的最大权限是0666
因此当umask=0022时
创建目录的默认权限为0777-0022=0755=rwx r-x r-x
创建文件的默认权限为0666-0022=0644=rw- r– r–
默认权限如果出现x栏位,系统在计算创建文件的权限时会默认+1补齐;
比如umask=023,创建文件的权限为644(x提权+1),创建目录的权限仍为754;
如果目录与文件的默认最大权限-默认权限得到的umask值不一致,以目录为准
2.8、sudo提权
(1)sudoers文件
1 |
|
(2)sudo命令
用来以其他身份来执行命令,预设的身份为root。在/etc/sudoers
中设置了可执行sudo指令的用户。若其未经授权的用户企图使用sudo,则会发出警告的邮件给管理员。用户使用sudo时,必须先输入密码,之后有5分钟的有效期限,超过期限则必须重新输入密码。
语法
1 |
|
选项
1 |
|
参数
指令:需要运行的指令和对应的参数。
示例
1 |
|
本文提供的命令选项仅包含常用选项,而非所有选项。你可以通过在命令行中输入 命令 –help 来查看所有可用选项。