小视频笔记(三)
# 小视频笔记(三)
# 8 权限管理
# 8.1 ACL权限
# 1.权限简介
Linux的文件有所有者,所属组,其他人三种权限,但这是远远不够的,比如说,有一个project,项目管理员将所有项目人员添加到该项目的所属组中,分配权限770,有一天,临时来了一个成员,该成员需要先进行学习,然后才能工作,这时我们需要对该成员对project分配读和可执行的权限,不能将其他人权限设为5,文件只有一个所属组,所以对project分配两个所属组的方式不成立,显然此时的权限管理方式无法满足要求,这时候就用到ACL权限了,所谓的ACL权限,可以简单的理解为为某一用户或某一组分配不属于所有,所属组,其他人的额外权限。
# 2.查看分区ACL权限是否开启
# 查看分区使用状况
~ 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 仅显示超级块中信息,而不显示磁盘块组的详细信息
dumpe2fs -h /dev/sda3
# 3.临时开启分区ACL权限
# 重新挂载根分区,并挂载加入acl权限
[root@localhost ~]# mount -o remount,acl /
# 4.永久开启分区ACL权限
[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权限
准备工作,创建需要的用户和用户组
[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权限
# 给用户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权限
[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的权限“相与”才能得到用户的真正权限 。
[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权限
# 删除指定用户的ACL权限
[root@localhost /]# setfacl -x u:用户名 文件名
# 删除指定用户组的ACL权限
[root@localhost /]# setfacl -x g:组名 文件名
使用:
[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权限。
setfacl -m u:用户名:权限 -R 目录
注:-R
只能在这个位置,其他位置会报错
使用:
[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权限,需要使用递归赋予权限。
setfacl -m d:u:用户名:权限 文件名
注:d
指的是default
使用:
[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 系统命令 |
使用:
- 赋予普通用户权限或用户组权限
# 实际修改的是/etc/sudoers文件 直接用vi修改这个文件也可以
[root@262e395bc9e9 tmp]# visudo
# 用户名 被管理主机的地址=(可使用的身份) 授权命令(绝对路径)
root ALL=(ALL) ALL
# %组名 被管理主机的地址=(可使用的身份) 授权命令(绝对路径)
%wheel ALL=(ALL) ALL
ALL=(ALL)
第一个ALL
并不是定义允许哪个ip地址或网络允许访问我们,而是定义允许哪一个用户在哪一台计算机上执行某一条命令,即写的是被管理主机的地址。限制的是访问IP而不是来源IP。第二个ALL
指的是可使用的用户。第三个ALL
标识授权命令,写ALL其实是不合理的,赋予的能力过于强大,正常来讲,应该写具体哪个命令,使用的是绝对路径。
[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
统计目录大小时,只会统计目录下一级子目录和文件的文件名所占用空间大小,而不会统计子目录和文件中的数据占用的空间多大。
[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
[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
特殊选项说明:
把设备文件名和挂载点连接起来
使用:
#重新挂载/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挂载光盘
#建立挂载点
[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
效果相同,其实前者是后者的一个软链接。
[root@localhost ~]# ll /dev/cdrom
lrwxrwxrwx. l root root 3 1月 14 17:26 /dev/cdrom -> sr0
访问数据的时候,直接去挂载点访问数据。
# unmount卸载光盘
[root@localhost ~]# umount 设备文件名或挂载点
[root@localhost ~]# umount /mnt/cdrom
# 挂载U盘
# 查看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命令分区过程
# 1. 添加新硬盘
# 2. 查看新硬盘
[root@localhost ~]# fdisk -l
# 3. 使用fdisk命令分区
[root@localhost ~]# fdisk /dev/sdb
# 4. 重新读取分区
[root@localhost ~]# partprobe