5. 用户身份与文件权限

5.1 用户的身份和能力

Linux 系统的管理员之所以是 root,并不是因为它的名字叫 root,而是因为该用户的身份号码即 UID( User IDentification)的数值为 0。在 Linux 系统中, UID 就相当于我们的身份证号码一样具有唯一性,因此可通过用户的 UID 值来判断用户身份。在 RHEL 7 系统中,用户身份有下面这些。

  • 管理员 UID 为 0:系统的管理员用户。
  • 系统用户 UID 为 1~999: Linux 系统为了避免因某个服务程序出现漏洞而被黑客提权至整台服务器,默认服务程序会有独立的系统用户负责运行,进而有效控制被破坏范围。
  • 普通用户 UID 从 1000 开始:是由管理员创建的用于日常工作的用户。

UID 是不能冲突的,而且管理员创建的普通用户的 UID 默认是从 1000开始的(即使前面有闲置的号码)。

为了方便管理属于同一组的用户, Linux 系统中还引入了用户组的概念。通过使用用户组号码(GID, Group IDentification),我们可以把多个用户加入到同一个组中,从而方便为组中的用户统一规划权限或指定任务。

在 Linux 系统中创建每个用户时,将自动创建一个与其同名的基本用户组,而且这个基本用户组只有该用户一个人。如果该用户以后被归纳入其他用户组,则这个其他用户组称之为扩展用户组。一个用户只有一个基本用户组,但是可以有多个扩展用户组,从而满足日常的工作需要。

5.1.1 useradd 命令

useradd 命令用于创建新的用户,格式为“useradd [选项] 用户名”。

使用该命令创建用户账户时,默认的用户家目录会被存放在/home 目录中,默认的 Shell 解释器为/bin/bash,而且默认会创建一个与该用户同名的基本用户组。

/sbin/nologin,它是终端解释器中的一员,与 Bash 解释器有着天壤之别。一旦用户的解释器被设置为 nologin,则代表该用户不能登录到系统中。

[root@hwjsLinux hwj]# useradd -d /home/linux -u 8888 -s /sbin/nologin linuxprobe
[root@hwjsLinux hwj]# id linuxprobe
uid=8888(linuxprobe) gid=8888(linuxprobe) groups=8888(linuxprobe)

5.1.2 groupadd 命令

groupadd 命令用于创建用户组,格式为“groupadd [选项] 群组名”。

[root@hwjsLinux hwj]# groupadd ronny

5.1.3 usermod 命令

usermod 命令用于修改用户的属性,格式为“usermod [选项] 用户名”。

用户的信息保存在/etc/passwd 文件中,可以直接用文本编辑器来修改其中的用户参数项目,也可以用 usermod 命令修改已经创建的用户信息。

[root@hwjsLinux hwj]# id linuxprobe
uid=8888(linuxprobe) gid=8888(linuxprobe) groups=8888(linuxprobe)
[root@hwjsLinux hwj]# usermod -G root linuxprobe
[root@hwjsLinux hwj]# id linuxprobe
uid=8888(linuxprobe) gid=8888(linuxprobe) groups=8888(linuxprobe),0(root)
[root@hwjsLinux hwj]# usermod -u 8889 linuxprobe
[root@hwjsLinux hwj]# id linuxprobe
uid=8889(linuxprobe) gid=8888(linuxprobe) groups=8888(linuxprobe),0(root)

5.1.4 passwd 命令

passwd 命令用于修改用户密码、过期时间、认证信息等,格式为“passwd [选项] [用户名]”。

普通用户只能使用 passwd 命令修改自身的系统密码,而 root 管理员则有权限修改其他所有人的密码。root 管理员在 Linux 系统中修改自己或他人的密码时不需要验证旧密码。

[root@hwjsLinux hwj]# passwd -l linuxprobe
Locking password for user linuxprobe.
passwd: Success
[root@hwjsLinux hwj]# passwd -S linuxprobe
linuxprobe LK 2019-12-05 0 99999 7 -1 (Password locked.)
[root@hwjsLinux hwj]# passwd -u linuxprobe
Unlocking password for user linuxprobe.
passwd: Success
[root@hwjsLinux hwj]# passwd -S linuxprobe
linuxprobe PS 2019-12-05 0 99999 7 -1 (Password set, MD5 crypt.)

5.1.5 userdel 命令

userdel 命令用于删除用户,格式为“userdel [选项] 用户名”。

在执行删除操作时,该用户的家目录默认会保留下来,此时可以使用-r 参数将其删除。

5.2 文件权限与归属

Linux 系统使用了不同的字符来加以区分,常见的字符如下所示。

  • -:普通文件。
  • d:目录文件。
  • l:链接文件。
  • b:块设备文件。
  • c:字符设备文件。
  • p:管道文件。

对于一般文件来说,权限比较容易理解:“可读”表示能够读取文件的实际内容;“可写”表示能够编辑、新增、修改、删除文件的实际内容;“可执行”则表示能够运行一个脚本程序。

对目录文件来说,“可读”表示能够读取目录内的文件列表;“可写”表示能够在目录内新增、删除、重命名文件;而“可执行”则表示能够进入该目录。

文件的读、写、执行权限可以简写为 rwx,亦可分别用数字 421 来表示,文件所有者,所属组及其他用户权限之间无关联

文件权限的数字法表示基于字符表示(rwx)的权限计算而来,其目的是简化权限的表示。例如,若某个文件的权限为 7 则代表可读、可写、可执行(4+2+1);若权限为 6 则代表可读、可写(4+2)。

通过分析可知,该文件的类型为普通文件,所有者权限为可读、可写(rw-),所属组权限为可读(r--),除此以外的其他人也只有可读权限(r--),文件的磁盘占用大小是 34298 字节,最近一次的修改时间为 4 月 2 日的凌晨 23 分,文件的名称为 install.log。

5.3 文件的特殊权限

在复杂多变的生产环境中,单纯设置文件的 rwx 权限无法满足我们对安全和灵活性的需求,因此便有了 SUID、 SGID 与 SBIT 的特殊权限位。 这是一种对文件权限进行设置的特殊功能,可以与一般权限同时使用,以弥补一般权限不能实现的功能。

5.3.1 SUID

SUID 是一种对二进制程序进行设置的特殊权限,可以让二进制程序的执行者临时拥有属主的权限(仅对拥有执行权限的二进制程序有效)。

[root@hwjsLinux hwj]# ls -l /etc/shadow
----------. 1 root root 1172 Dec 6 01:13 /etc/shadow
[root@hwjsLinux hwj]# ls -l /bin/passwd
-rwsr-xr-x. 1 root root 27832 Jun 9 2014 /bin/passwd

查看 passwd 命令属性时发现所有者的权限由 rwx 变成了 rws,其中 x 改变成 s 就意味着该文件被赋予了 SUID 权限。如果原先权限位上没有 x 执行权限,那么被赋予特殊权限后将变成大写的 S。

SUID的显示:

5.3.2 SGID

SGID 主要实现如下两种功能:

  • 让执行者临时拥有属组的权限(对拥有执行权限的二进制程序进行设置);
  • 在某个目录中创建的文件自动继承该目录的用户组(只可以对目录进行设置)。

chmod 命令是一个非常实用的命令,能够用来设置文件或目录的权限,格式为“chmod [参数] 权限 文件或目录名称”。除了设置文件或目录的权限外,还可以设置文件或目录的所有者和所属组,这里使用的命令为chown,其格式为“chown [参数] 所有者:所属组 文件或目录名称”。

chmod 和 chown 命令是用于修改文件属性和权限的最常用命令,它们还有一个特别的共性,就是针对目录进行操作时需要加上大写参数-R 来表示递归操作,即对目录内所有的文件进行整体操作。

[root@hwjsLinux hwj]# chmod 777 xxx
[root@hwjsLinux hwj]# chown root:root xxx
[root@hwjsLinux hwj]# chmod -R 777 www.linuxprobe.com/

SGUID的显示:

5.3.3 SBIT

SBIT 特殊权限位可确保用户只能删除自己的文件,而不能删除其他用户的文件。

与前面所讲的 SUID 和 SGID 权限显示方法不同,当目录被设置 SBIT 特殊权限位后,文件的其他人权限部分的 x 执行权限就会被替换成 t 或者 T,原本有 x 执行权限则会写成 t,原本没有 x 执行权限则会被写成 T。

SBIT的显示:

5.4 文件的隐藏属性

Linux 系统中的文件除了具备一般权限和特殊权限之外,还有一种隐藏权限,即被隐藏起来的权限,默认情况下不能直接被用户发觉。

5.4.1 chattr 命令

chattr 命令用于设置文件的隐藏权限,格式为“chattr [参数] 文件”。如果想要把某个隐藏功能添加到文件上,则需要在命令后面追加“+参数”,如果想要把某个隐藏功能移出文件,则需要追加“-参数”。

5.4.2 lsattr 命令

lsattr 命令用于显示文件的隐藏权限,格式为“lsattr [参数] 文件”。

5.5 文件访问控制列表

前文讲解的一般权限、特殊权限、隐藏权限其实有一个共性—权限是针对某一类用户设置的。如果希望对某个指定的用户进行单独的权限控制,就需要用到文件的访问控制列表(ACL)了。通俗来讲,基于普通文件或目录设置 ACL 其实就是针对指定的用户或用户组设置文件或目录的操作权限。另外,如果针对某个目录设置了 ACL,则目录中的文件会继承其 ACL;若针对文件设置了 ACL,则文件不再继承其所在目录的 ACL。

5.5.1 setfacl 命令

setfacl 命令用于管理文件的 ACL 规则,格式为“setfacl [参数] 文件名称”。

常用的 ls 命令是看不到 ACL 表信息的,但是却可以看到文件的权限最后一个点(.)变成了加号(+) ,这就意味着该文件已经设置了 ACL 了。

5.5.2 getfacl 命令

getfacl 命令用于显示文件上设置的 ACL 信息,格式为“getfacl 文件名称”。

5.6 su 命令与 sudo 服务

su 命令可以解决切换用户身份的需求,使得当前用户在不退出登录的情况下,顺畅地切换到其他用户

su 命令与用户名之间可以有一个减号(-),这意味着完全切换到新的用户,即把环境变量信息也变更为新用户的相应信息,而不是保留原始的信息。强烈建议在切换用户身份时添加这个减号(-)。

使用 sudo 命令把特定命令的执行权限赋予给指定用户

sudo 命令用于给普通用户提供额外的权限来完成原本 root 管理员才能完成的任务,格式为“sudo [参数] 命令名称”。

sudo 命令具有如下功能:

  • 限制用户执行指定的命令:
  • 记录用户执行的每一条命令;
  • 配置文件( /etc/sudoers)提供集中的用户管理、权限与主机等参数;
  • 验证密码的后 5 分钟内(默认值)无须再让用户再次验证密码。

使用 visudo 命令配置 sudo 命令的配置文件时,其操作方法与 Vim 编辑器中用到的方法一致,因此在编写完成后记得在末行模式下保存并退出。在 sudo 命令的配置文件中,按照下面的格式:

20191209 Linux就该这么学(5)的更多相关文章

  1. 20191209 Linux就该这么学(6)

    6. 存储结构与磁盘划分 6.1 一切从"/"开始 Linux 系统中的一切文件都是从"根(/)"目录开始的,并按照文件系统层次化标准(FHS)采用树形结构来存 ...

  2. 20191209 Linux就该这么学(4)

    4. Vim编辑器与Shell命令脚本 Vim 编辑器中设置了三种模式-命令模式.末行模式和编辑模式. 命令模式:控制光标移动,可对文本进行复制.粘贴.删除和查找等工作. 输入模式:正常的文本录入. ...

  3. 20191209 Linux就该这么学(1-3)

    1. 部署虚拟环境安装 Linux 系统 RPM 是为了简化安装的复杂度,而 Yum软件仓库是为了解决软件包之间的依赖关系. 2. 新手必须掌握的Linux命令 通常来讲,计算机硬件是由运算器.控制器 ...

  4. 20191209 【归档】Linux就该这么学

    学习背景 因为打算学习Redis和Docker,但是发现对Linux的操作已经完全忘记了,所以选择再学一次,但是不会深入的学习,选择了<Linux就该这么学>这本书,学完了感觉还挺好,但是 ...

  5. 浅谈《Linux就该这么学》

    就在去年十月份的时候,偶尔在Linux技术群了看到别人分享的<Linux就该这么学>,好奇的就点进去看看,当时看完首页,突然发现刘遄老师说到心坎里去了,于是就仔细看了看红帽认证的讲解以及后 ...

  6. 《Linux就该这么学》 - 必读的红帽系统与红帽linux认证自学手册

    <Linux就该这么学>   本书作者刘遄从事于linux运维技术行业,较早时因兴趣的驱使接触到了Linux系统并开始学习. 已在2012年考下红帽工程师RHCE_6,今年又分别考下RHC ...

  7. 《Linux就该这么学》第十九天课程

    今天对“Linux就该这么学”课程做个收尾 最后一张使用LNMP架构部署动态网站环境 第1步:下载及解压源码包文件.为了方便在网络中传输,源码包文件通常会在归档后使用gzip或bzip2等格式进行压缩 ...

  8. 《Linux就该这么学》

    参加了第19期课程的培训,感谢刘老师的辛苦付出,课程讲的很好,真心推荐老刘的这本书真是<Linux就该这么学>!!! 本书是由全国多名红帽架构师(RHCA)基于最新Linux系统共同编写的 ...

  9. 《linux就该这么学》开课,linux之路新开始

    今天开课第一天,虽然不会有实实在在的干货知识,只要是了解一下linux和认证.所以我也简单说一下我的linux之路 linux我是无意接触到的,因为工作,我接触的服务器较多,但是都是linux系统,记 ...

随机推荐

  1. 【Linux学习一】命令行CLI、BASH的基本操作

    ●操作系统的基本结构 操作系统的基本结构通过Kernel(内核)和Shell(壳)构成.常见的Shell分为GUI和CLI GUI 图形方面的shell ------〉windows .mac osC ...

  2. Acwing-100-IncDec序列(差分)

    链接: https://www.acwing.com/problem/content/102/ 题意: 给定一个长度为 n 的数列 a1,a2,-,an,每次可以选择一个区间 [l,r],使下标在这个 ...

  3. Entity Framework Core 迁移命令

    Add-Migration init Update-Database init 修改model后,执行迁移的命令 更新数据库 每次更新都要{update}修改 Add-Migration {updat ...

  4. CAP拾遗

    概念 在一个分布式系统(指互相连接并共享数据的节点的集合)中,当涉及读写操作时,只能保证一致性.可用性.分区容错性三者中的两个,另外一个必须被牺牲 Consistency 对某个指定的客户端来说,读操 ...

  5. C# 编辑

    if (state == "编辑") { ht["修改人"] = Helper.用户名; ht["修改时间"] = DateTimeHelp ...

  6. EF 操作数据库中的表

    1.VS创建项目(实现数据库的增删改查.并在dataGridView中展示) 增.改通过Button,删通过快捷菜单ContextMenuStrip控件(DateGridView控件的ContextM ...

  7. python 正则表达式实例:

    #!/usr/bin/python import re line = "Cats are smarter than dogs" matchObj = re.match( r'(.* ...

  8. DES加密 DESEncrypt

    /// <summary> /// DES加密/解密类. /// </summary> public class DESEncrypt { public DESEncrypt( ...

  9. 总结JavaScript中浏览器的兼容问题

    浅析JavaScript中浏览器的兼容问题 浏览器兼容性问题是在实际开发中容易忽略而又最重要的一部分.我们在讲老版本浏览器兼容问题之前,首先要了解什么是能力检测,它是来检测浏览器有没有这种能力,即判断 ...

  10. POJ 3068 运送危险化学品 最小费用流 模板题

    "Shortest" pair of paths Time Limit: 1000MS   Memory Limit: 65536K Total Submissions: 1215 ...