输入关键词开始搜索

小视频笔记(三)

2761 字 约 7 分钟

8 权限管理 ​

8.1 ACL权限 ​

1.权限简介 ​

Linux的文件有所有者,所属组,其他人三种权限,但这是远远不够的,比如说,有一个project,项目管理员将所有项目人员添加到该项目的所属组中,分配权限770,有一天,临时来了一个成员,该成员需要先进行学习,然后才能工作,这时我们需要对该成员对project分配读和可执行的权限,不能将其他人权限设为5,文件只有一个所属组,所以对project分配两个所属组的方式不成立,显然此时的权限管理方式无法满足要求,这时候就用到ACL权限了,所谓的ACL权限,可以简单的理解为为某一用户或某一组分配不属于所有,所属组,其他人的额外权限。

文章配图

2.查看分区ACL权限是否开启 ​

shell
# 查看分区使用状况
~ andy$ df -h
Filesystem      Size   Used  Avail Capacity iused      ifree %iused  Mounted on
/dev/disk1     112Gi   61Gi   51Gi    55% 1632930 4293334349    0%   /
devfs          182Ki  182Ki    0Bi   100%     632          0  100%   /dev
map -hosts       0Bi    0Bi    0Bi   100%       0          0  100%   /net
map auto_home    0Bi    0Bi    0Bi   100%       0          0  100%   /home

命令格式:dumpefs [选项] 分区路径

​ 查询指定分区详细文件系统信息的命令

选项:

​ -h 仅显示超级块中信息,而不显示磁盘块组的详细信息

shell
 dumpe2fs -h /dev/sda3

3.临时开启分区ACL权限 ​

shell
# 重新挂载根分区,并挂载加入acl权限
[root@localhost ~]# mount -o remount,acl /

4.永久开启分区ACL权限 ​

shell
[root@localhost ~]# vi /etc/fstab
UUID=c2ca6f57-b15c-43ea-bca0-f239083d8bd2 / ext4 defaults,acl #加入acl
[root@localhost ~]# mount -o remount /
#重新挂载文件系统或重启动系统,使修改生效

注: fastab是系统开机启动默认挂载的文件

5. 设定ACL权限的命令 ​

命令:setfacl 选项 文件名 设置ACL权限

选项:

  • -m 设定ACL权限
  • -x 删除指定的ACL权限
  • -b 删除所有的ACL权限
  • -d 设定默认ACL权限
  • -k 删除默认ACL权限
  • -R 递归设定ACL权限

命令:getacl 路径 查看ACL权限

准备工作,创建需要的用户和用户组

shell
[root@262e395bc9e9 ~]# useradd zhangsan
[root@262e395bc9e9 ~]# useradd lisi
[root@262e395bc9e9 ~]# useradd st
[root@262e395bc9e9 ~]# groupadd tgroup
[root@262e395bc9e9 ~]# mkdir /tmp/project
[root@262e395bc9e9 ~]# chown root:tgroup /tmp/project/
[root@262e395bc9e9 ~]# chmod 770 /tmp/project/

给用户设定ACL权限

shell
# 给用户st赋予r-x权限,使用“u:用户名:权限”格式
[root@262e395bc9e9 ~]# setfacl -m u:st:rx /tmp/project
# 设定结果 多了个“+”
[root@262e395bc9e9 ~]# ll -d
drwxrwx---+ 2 root tgroup 4096 Aug  9 07:22 /tmp/project
[root@262e395bc9e9 project]# getfacl .
# file: .
# owner: root
# group: tgroup
user::rwx
user:st:r-x
group::rwx
mask::rwx
other::---

# 切换用户测试 没有w权限
[root@262e395bc9e9 project]# su - st
[st@262e395bc9e9 ~]$ cd /tmp/project/
[st@262e395bc9e9 project]$ touch test.js
touch: cannot touch 'test.js': Permission denied

给用户组设定ACL权限

shell
[root@262e395bc9e9 project]# groupadd tgroup2
[root@262e395bc9e9 project]# setfacl -m g:tgroup2:rwx /tmp/project
[root@262e395bc9e9 project]# getfacl /tmp/project
getfacl: Removing leading '/' from absolute path names
# file: tmp/project
# owner: root
# group: tgroup
user::rwx
user:st:r-x
group::rwx
group:tgroup2:rwx
mask::rwx
other::---

6.最大有效权限与删除 ​

​ 最大有效权限mask:mask是用来指定最大有效权限的。如果 我给用户赋予了ACL权限,是需要和 mask的权限“相与”才能得到用户的真正权限 。

shell
[root@262e395bc9e9 project]# setfacl -m m:rx /tmp/project
[root@262e395bc9e9 project]# getfacl /tmp/project
getfacl: Removing leading '/' from absolute path names
# file: tmp/project
# owner: root
# group: tgroup
user::rwx
user:st:r-x
group::rwx			    #effective:r-x
group:tgroup2:rwx		#effective:r-x
mask::r-x
other::---

它并不影响所有者的权限,而是影响所属组和ACL的权限。

删除ACL权限

shell
# 删除指定用户的ACL权限
[root@localhost /]# setfacl -x u:用户名 文件名
# 删除指定用户组的ACL权限
[root@localhost /]# setfacl -x g:组名 文件名

使用:

shell
[root@262e395bc9e9 project]# setfacl -x g:tgroup2 /tmp/project
[root@262e395bc9e9 project]# getfacl .
# file: .
# owner: root
# group: tgroup
user::rwx
user:st:r-x
group::rwx
mask::rwx
other::---

[root@262e395bc9e9 project]# setfacl -b /tmp/project
[root@262e395bc9e9 project]# getfacl .
# file: .
# owner: root
# group: tgroup
user::rwx
group::rwx
other::---

# 没“+”
[root@262e395bc9e9 project]# ll -d
drwxrwx--- 2 root tgroup 4096 Aug  9 07:22 .

7.默认与递归ACL权限 ​

​ 递归是父目录在设定ACL权限时,所有的子文件和子目录也会拥有相同的ACL权限。

shell
setfacl -m u:用户名:权限 -R 目录

​ 注:-R只能在这个位置,其他位置会报错

使用:

shell
[root@262e395bc9e9 project]# setfacl -m u:st:rx -R /tmp/project
[root@262e395bc9e9 project]# ll -a
total 16
drwxrwx---+ 4 root tgroup 4096 Aug  9 08:26 .
drwxrwxrwt  1 root root   4096 Aug  9 07:22 ..
drwxr-xr-x+ 2 root root   4096 Aug  9 08:25 test1
drwxr-xr-x+ 2 root root   4096 Aug  9 08:26 test2

​ 默认ACL权限:如果给父目录设定 了默认ACL权限,那么父目录中所有新建 的子文件都会继承父目录的ACL权限 。这个操作只会对新创建在目录下的文件生效,对现有的文件无影响,如果现有文件也需要设置ACL权限,需要使用递归赋予权限。

shell
setfacl -m d:u:用户名:权限 文件名

​ 注:d指的是default

使用:

shell
[root@262e395bc9e9 project]# setfacl -m d:u:st:rx /tmp/project
[root@262e395bc9e9 project]# mkdir test3
[root@262e395bc9e9 project]# getfacl test3
# file: test3
# owner: root
# group: root
user::rwx
user:st:r-x
group::rwx
mask::rwx
other::---
default:user::rwx
default:user:st:r-x
default:group::rwx
default:mask::rwx
default:other::---

8.2 文件特殊权限 ​

1.SetUID ​

2.SetUID ​

3.Sticky BIT ​

8.3 文件系统属性权限 ​

chattr ​

名称说明
命令名称chattr
原意change attributes
所在路径/usr/bin/chattr
功能描述更改系统文件属性
语法chattr [+-=]. [选项] 文件或目录名

+:增加权限 -:删除权限 =:等于某权限

选项说明:

  • i: 如果对文件设置i属性,那么不允许对文件进行删除、改名,也不能添加和修改数据;如果对目录设置i属性,那么只能修改目录下文件的数据,但不允许建立和删除文件 。
  • a: 如果对文件设置a属性,那么只能在文件中增加数据,但是不能删除也不能修改数据(数据增加只能是追加的方式);如果对目录设置a属性,那么只允许在目录中建立和修改文件 ,但是不允许删除 。

chattr对于保护文件系统当中重要数据免遭误操作是非常有效的。但是可以通过+-进行方便的设置是否可以操作,它不是为了限制用户,而是为了防止连在root用户在内的用户进行误操作的措施。

lsattr ​

名称说明
命令名称lsattr
原意ls attributes
所在路径/usr/bin/lsattr
功能描述查看系统文件属性
语法chattr 选项名 文件名

选项说明:

  • -a:显示所有文件和目录
  • -d:若目标是目录,仅列出目录本身的属性,而不是子文件的

8.4 系统命令sudo权限 ​

sudo ​

名称说明
命令名称sudo
原意super user do
所在路径/usr/bin/sudo
功能描述root把本来只能超级用户执行的命令赋予普通用户执行
语法sudo 系统命令

使用:

  1. 赋予普通用户权限或用户组权限
shell
# 实际修改的是/etc/sudoers文件 直接用vi修改这个文件也可以
[root@262e395bc9e9 tmp]# visudo

# 用户名 被管理主机的地址=(可使用的身份)  授权命令(绝对路径)
root ALL=(ALL)          ALL

# %组名 被管理主机的地址=(可使用的身份)   授权命令(绝对路径)
%wheel  ALL=(ALL)       ALL

ALL=(ALL)第一个ALL并不是定义允许哪个ip地址或网络允许访问我们,而是定义允许哪一个用户在哪一台计算机上执行某一条命令,即写的是被管理主机的地址。限制的是访问IP而不是来源IP。第二个ALL指的是可使用的用户。第三个ALL标识授权命令,写ALL其实是不合理的,赋予的能力过于强大,正常来讲,应该写具体哪个命令,使用的是绝对路径。

shell
[root@262e395bc9e9 tmp]# visudo
sc ALL= /sbin/shutdown –r now
# 赋予sc此权限很危险,用户可以操作任何文件。不过看公司使用全都给的ALL。。。
sc ALL=/usr/bin/vim

注意:如果命令写的越简单,代表用户具有的权限越大。比如说上面的命令没有写-r now代表用户可以执行shutdown的所有参数。即命令可以根据需求,进行修改。

sudo -l可查看拥有的权限

9.文件系统管理 ​

9.1 分区和文件系统 ​

1.分区类型 ​

分区有三种类型:

  • 主分区: 总共最多只能分四个
  • 扩展分区:只能有一个,也算作主分区的一种 ,也就是说主分区加扩展分区最多有四个。但是扩展分区不能存储数据和格式化,必须再划分成逻辑分区才能使用。
  • 逻辑分区:逻辑分区是在扩展分区中划分的, 如果是IDE硬盘,Linux最多支持59个逻辑分区 ,如果是SCSI硬盘Linux最多支持11个逻辑分区 。

​ 分区可以理解为把一个大柜子分为几个小柜子,但是只允许打四个柜子,但当物品分类更多四个柜子不够用时,可以把其中一个小柜子再进行划分成更细致的柜子。这种分区方法的目的就是为了突破四个分区的限制。

分区表示方法:

设备文件名

分区名称文件名
主分区1/dev/sda1
主分区2/dev/sda2
主分区3/dev/sda3
扩展分区/dev/sda4
逻辑分区1/dev/sda5
逻辑分区2/dev/sda6
逻辑分区3/dev/sda7

注:sd代表SCSI或sdtype硬盘接口,a代表第一块硬盘,1 2 3 4代表四个主分区,只能给主分区使用,就算空下来也不能给逻辑分区使用。 从5开始代表逻辑分区。

文章配图

更习惯的分区方式是:

文章配图

2.文件系统 ​

有了分区之后,硬盘还不能使用,必须格式化之后才可以使用。格式化就是为了写入文件系统。

Linux默认文件系统分类:

  • ext2:是ext文件系统的升级版本,Red Hat Linux7.2版本以前的系统默认都是ext2 文件系统。1993年发布,最大支持16TB 的分区和最大2TB的文件 1TB=1024GB=1024*1024KB。
  • ext3:ext3文件系统是ext2文件系统的升 级版本,最大的区别就是带日志功能,以在系统突然停止时提高文件系统的可靠性 。支持最大16TB的分区和最大2TB的文件 。
  • ext4:它是ext3文件系统的升级版。ext4 在性能 、伸缩性和可靠性方面进行了大量改进。EXT4的变化可以说是翻天覆地的,比如向下兼容 EXT3、最大1EB文件系统和16TB文件、无限数量子目录、Extents连续数据块概念、多块分配 、延迟分配、持久预分配、快速FSCK、日志校 验、无日志模式、在线碎片整理、inode增强、 默认启用barrier等。1EB=1024PB=1024*1024TB

9.2 文件系统常用命令 ​

1. 挂载命令 ​

df ​

名称说明
命令名称df
原意
所在路径/usr/bin/df
功能描述统计文件系统的占用情况
语法df [选项] [挂载点]

选项说明:

  • -a:显示所有的文件系统信息,包括特殊文件系统,如 /proc、/sysfs
  • -h:使用习惯单位显示容量,如KB,MB或GB等
  • -T:显示文件系统类型
  • -m:以MB为单位显示容量
  • -k:以KB为单位显示容量。默认就是以KB为单位

du ​

名称说明
命令名称du
原意
所在路径/usr/bin/du
功能描述统计目录或文件大小
语法df [选项] [挂载点]

选项说明:

  • -a:显示每个子文件的磁盘占用量。默认只统计子目录的磁盘占用量
  • -h:使用习惯单位显示磁盘占用量,如KB,MB或GB等
  • -s:统计总占用量,而不列出子目录和子文件的占用量

注:此命令一般不用做统计文件大小,因为完全可用ls代替,但ls统计目录大小时,只会统计目录下一级子目录和文件的文件名所占用空间大小,而不会统计子目录和文件中的数据占用的空间多大。

shell
[root@262e395bc9e9 /]# ls -lh /
total 56K
-rw-r--r--   1 root root  12K Aug  4 22:05 anaconda-post.log
lrwxrwxrwx   1 root root    7 Aug  4 22:04 bin -> usr/bin
drwxr-xr-x   5 root root  360 Aug  8 09:30 dev
drwxr-xr-x   1 root root 4.0K Aug  9 13:06 etc
drwxr-xr-x   1 root root 4.0K Aug  9 07:39 home
lrwxrwxrwx   1 root root    7 Aug  4 22:04 lib -> usr/lib
lrwxrwxrwx   1 root root    9 Aug  4 22:04 lib64 -> usr/lib64
drwxr-xr-x   2 root root 4.0K Apr 11 04:59 media
drwxr-xr-x   2 root root 4.0K Apr 11 04:59 mnt
drwxr-xr-x   2 root root 4.0K Apr 11 04:59 opt
dr-xr-xr-x 166 root root    0 Aug  8 09:30 proc
dr-xr-x---   1 root root 4.0K Aug  8 09:30 root
drwxr-xr-x   1 root root 4.0K Aug 10 03:19 run
lrwxrwxrwx   1 root root    8 Aug  4 22:04 sbin -> usr/sbin
drwxr-xr-x   2 root root 4.0K Apr 11 04:59 srv
dr-xr-xr-x  13 root root    0 Aug 10 03:52 sys
drwxrwxrwt   1 root root 4.0K Aug  9 12:28 tmp
drwxr-xr-x   1 root root 4.0K Aug  4 22:04 usr
drwxr-xr-x   1 root root 4.0K Aug  4 22:04 var
shell
[root@262e395bc9e9 /]# du -sh /etc/
2.7M	/etc/

du命令和df命令的区别:

df命令是从文件系统考虑的,不光要考虑文件占用的空间,还要统计被命令或程序占用的空间(最常见的就是文件已经删除 ,但是程序并没有释放空间) ;du命令是面向文件的,只会计算文件或目录占用的空间。

fsck ​

系统在启动时会自动执行,不需要手动执行,是底层修复命令,自己执行有时候反而会出问题,了解就好

名称说明
命令名称fsck
原意
所在路径/usr/sbin/fsck
功能描述文件系统修复命令
语法df [选项] [挂载点]

选项说明:

  • -a:不用显示用户提示,自动修复文件系统
  • -y:自动修复。和-a作用一致,不过有些文件系统只支持-y

dumpe2fs ​

名称说明
命令名称dumpe2fs
原意
所在路径/usr/sbin/dumpe2fs
功能描述显示磁盘状态 (主要用来查看数据块大小)
语法dumpe2fs [选项] 分区设备文件名

2.挂载命令 ​

名称说明
命令名称mount
原意
所在路径/usr/bin/mount
功能描述查询和挂载
语法mount [-la][-t 文件系统][-L 卷标名][-o 特殊选项] 设备文件名 挂载点

选项说明:

  • -l:查询系统中已经挂载的设备时,会显示卷标名称。

  • -a:根据配置文件/etc/fstab的内容,自动挂载

  • -t 文件系统:加入文件系统类型来指定挂载的类型,可以ext3、ext4、iso9600等文件系统

  • -L 卷标名:挂载指定卷标的分区,而不是安装设备文件名挂载

  • -o 特殊选项:可以指定挂载的额外选项,用逗号隔开特殊选项,如:remount,noexec

    特殊选项说明:

    文章配图

把设备文件名和挂载点连接起来

使用:

shell
#重新挂载/boot分区,并使用noexec权限
[root@localhost sh]# mount -o remount,noexec /home
[root@localhost sh]# cd /home
[root@localhost boot]# vi hello.sh
[root@localhost boot]# ./hello.sh
[root@localhost boot]# chmod 755 hello.sh
hello world
[root@localhost boot]# mount -o remount,exec /home

3.挂载光盘与U盘 ​

mount挂载光盘 ​

shell
#建立挂载点
[root@localhost ~]# mkdir /mnt/cdrom/

#挂载光盘
[root@localhost ~]# mount -t iso9660 /dev/cdrom /mnt/cdrom/

[root@localhost ~]# mount /dev/sr0 /mnt/cdrom/

mount其实就是把设备文件和挂载点连接起来。上述就是把/dev/cdrom设备文件挂载到/mnt/cdrom。

挂载挂盘时,设备文件使用/dev/cdrom和/dev/sr0效果相同,其实前者是后者的一个软链接。

shell
[root@localhost ~]# ll /dev/cdrom
lrwxrwxrwx. l root root 3 1月 14 17:26 /dev/cdrom -> sr0

访问数据的时候,直接去挂载点访问数据。

unmount卸载光盘 ​

shell
[root@localhost ~]# umount 设备文件名或挂载点
[root@localhost ~]# umount /mnt/cdrom

挂载U盘 ​

shell
# 查看U盘设备文件名
[root@localhost ~]# fdisk –l
[root@localhost ~]# mount -t vfat /dev/sdb1 /mnt/usb/

**注意:**Linux默认是不支持NTFS文件系统的。在Linux中, 把fat和fat16分区识别为fat,把fat32分区识别为vfat。

4.fdisk分区 ​

1.fdisk命令分区过程 ​

shell
# 1. 添加新硬盘
# 2. 查看新硬盘
[root@localhost ~]# fdisk -l
# 3. 使用fdisk命令分区
[root@localhost ~]# fdisk /dev/sdb
# 4. 重新读取分区
[root@localhost ~]# partprobe

文章配图

2. ​