导航菜单

  • 0.api
  • 0.Async
  • 0.module
  • 1.ES2015
  • 2.Promise
  • 3.Node
  • 4.NodeInstall
  • 5.REPL
  • 6.NodeCore
  • 7.module&NPM
  • 8.Encoding
  • 9.Buffer
  • 10.fs
  • 11.Stream-1
  • 11.Stream-2
  • 11.Stream-3
  • 11.Stream-4
  • 12-Network-2
  • 12.NetWork-3
  • 12.Network-1
  • 13.tcp
  • 14.http-1
  • 14.http-2
  • 15.compress
  • 16.crypto
  • 17.process
  • 18.yargs
  • 19.cache
  • 20.action
  • 21.https
  • 22.cookie
  • 23.session
  • 24.express-1
  • 24.express-2
  • 24.express-3
  • 24.express-4
  • 25.koa-1
  • 26.webpack-1-basic
  • 26.webpack-2-optimize
  • 26.webpack-3-file
  • 26.webpack-4.tapable
  • 26.webpack-5-AST
  • 26.webpack-6-sources
  • 26.webpack-7-loader
  • 26.webpack-8-plugin
  • 26.webpack-9-hand
  • 26.webpack-10-prepare
  • 28.redux
  • 28.redux-jwt-back
  • 28.redux-jwt-front
  • 29.mongodb-1
  • 29.mongodb-2
  • 29.mongodb-3
  • 29.mongodb-4
  • 29.mongodb-5
  • 29.mongodb-6
  • 30.cms-1-mysql
  • 30.cms-2-mysql
  • 30.cms-3-mysql
  • 30.cms-4-nunjucks
  • 30.cms-5-mock
  • 30.cms-6-egg
  • 30.cms-7-api
  • 30.cms-8-roadhog
  • 30.cms-9-yaml
  • 30.cms-10-umi
  • 30.cms-12-dva
  • 30.cms-13-dva-ant
  • 30.cms-14-front
  • 30.cms-15-deploy
  • 31.dva
  • 31.cms-13-dva-antdesign
  • 33.redis
  • 34.unittest
  • 35.jwt
  • 36.websocket-1
  • 36.websocket-2
  • 38.chat-api-1
  • 38.chat-api-2
  • 38.chat-3
  • 38.chat-api-3
  • 38.chat
  • 38.chat2
  • 38.chat2
  • 39.crawl-0
  • 39.crawl-1
  • 39.crawl-2
  • 40.deploy
  • 41.safe
  • 42.test
  • 43.nginx
  • 44.enzyme
  • 45.docker
  • 46.elastic
  • 47.oauth
  • 48.wxpay
  • index
  • 52.UML
  • 53.design
  • index
  • 54.linux
  • 57.ts
  • 56.react-ssr
  • 58.ts_react
  • 59.ketang
  • 59.ketang2
  • 61.1.devops-linux
  • 61.2.devops-vi
  • 61.3.devops-user
  • 61.4.devops-auth
  • 61.5.devops-shell
  • 61.6.devops-install
  • 61.7.devops-system
  • 61.8.devops-service
  • 61.9.devops-network
  • 61.10.devops-nginx
  • 61.11.devops-docker
  • 61.12.devops-jekins
  • 61.13.devops-groovy
  • 61.14.devops-php
  • 61.15.devops-java
  • 61.16.devops-node
  • 61.17.devops-k8s
  • 62.1.react-basic
  • 62.2.react-state
  • 62.3.react-high
  • 62.4.react-optimize
  • 62.5.react-hooks
  • 62.6.react-immutable
  • 62.7.react-mobx
  • 62.8.react-source
  • 63.1.redux
  • 63.2.redux-middleware
  • 63.3.redux-hooks
  • 63.4.redux-saga
  • 63.5.redux-saga-hand
  • 64.1.router
  • 64.2.router-connected
  • 65.1.typescript
  • 65.2.typescript
  • 65.3.typescript
  • 65.4.antd
  • 65.4.definition
  • 66-1.vue-base
  • 66-2.vue-component
  • 66-3.vue-cli3.0
  • 66-4.$message组件
  • 66-5.Form组件
  • 66-6.tree
  • 66-7.vue-router-apply
  • 66-8.axios-apply
  • 66-9.vuex-apply
  • 66-10.jwt-vue
  • 66-11.vue-ssr
  • 66-12.nuxt-apply
  • 66-13.pwa
  • 66-14.vue单元测试
  • 66-15.权限校验
  • 67-1-network
  • 68-2-wireshark
  • 7.npm2
  • 69-hooks
  • 70-deploy
  • 71-hmr
  • 72.deploy
  • 73.import
  • 74.mobile
  • 75.webpack-1.文件分析
  • 75.webpack-2.loader
  • 75.webpack-3.源码流程
  • 75.webpack-4.tapable
  • 75.webpack-5.prepare
  • 75.webpack-6.resolve
  • 75.webpack-7.loader
  • 75.webpack-8.module
  • 75.webpack-9.chunk
  • 75.webpack-10.asset
  • 75.webpack-11.实现
  • 76.react_optimize
  • 77.ts_ketang_back
  • 77.ts_ketang_front
  • 78.vue-domdiff
  • 79.grammar
  • 80.tree
  • 81.axios
  • 82.1.react
  • 82.2.react-high
  • 82.3.react-router
  • 82.4.redux
  • 82.5.redux_middleware
  • 82.6.connected
  • 82.7.saga
  • 82.8.dva
  • 82.8.dva-source
  • 82.9.roadhog
  • 82.10.umi
  • 82.11.antdesign
  • 82.12.ketang-front
  • 82.12.ketang-back
  • 83.upload
  • 84.graphql
  • 85.antpro
  • 86.1.uml
  • 86.2.design
  • 87.postcss
  • 88.react16-1
  • 89.nextjs
  • 90.react-test
  • 91.react-ts
  • 92.rbac
  • 93.tsnode
  • 94.1.JavaScript
  • 94.2.JavaScript
  • 94.3.MODULE
  • 94.4.EventLoop
  • 94.5.文件上传
  • 94.6.https
  • 94.7. nginx
  • 95.1. react
  • 95.2.react
  • 96.1.react16
  • 96.2.fiber
  • 96.3.fiber
  • 97.serverless
  • 98.websocket
  • 100.1.react-basic
  • 101.1.monitor
  • 101.2.monitor
  • 102.java
  • 103.1.webpack-usage
  • 103.2.webpack-bundle
  • 103.3.webpack-ast
  • 103.4.webpack-flow
  • 103.5.webpack-loader
  • 103.6.webpack-tapable
  • 103.7.webpack-plugin
  • 103.8.webpack-optimize1
  • 103.9.webpack-optimize2
  • 103.10.webpack-hand
  • 103.11.webpack-hmr
  • 103.11.webpack5
  • 103.13.splitChunks
  • 103.14.webpack-sourcemap
  • 103.15.webpack-compiler1
  • 103.15.webpack-compiler2
  • 103.16.rollup.1
  • 103.16.rollup.2
  • 103.16.rollup.3
  • 103.16.vite.basic
  • 103.16.vite.source
  • 103.16.vite.plugin
  • 103.16.vite.1
  • 103.16.vite.2
  • 103.17.polyfill
  • 104.1.binary
  • 104.2.binary
  • 105.skeleton
  • 106.1.react
  • 106.2.react_hooks
  • 106.3.react_router
  • 106.4.redux
  • 106.5.redux_middleware
  • 106.6.connected-react-router
  • 106.6.redux-first-history
  • 106.7.redux-saga
  • 106.8.dva
  • 106.9.umi
  • 106.10.ketang
  • 106.11.antdesign
  • 106.12.antpro
  • 106.13.router-6
  • 106.14.ssr
  • 106.15.nextjs
  • 106.16.1.cms
  • 106.16.2.cms
  • 106.16.3.cms
  • 106.16.4.cms
  • 106.16.mobx
  • 106.17.fomily
  • 107.fiber
  • 108.http
  • 109.1.webpack_usage
  • 109.2.webpack_source
  • 109.3.dll
  • 110.nest.js
  • 111.xstate
  • 112.Form
  • 113.redux-saga
  • 114.react+typescript
  • 115.immer
  • 116.pro5
  • 117.css-loader
  • 118.1.umi-core
  • 119.2.module-federation
  • 119.1.module-federation
  • 120.create-react-app
  • 121.react-scripts
  • 122.react-optimize
  • 123.jsx-runtime
  • 124.next.js
  • 125.1.linux
  • 125.2.linux-vi
  • 125.3.linux-user
  • 125.4.linux-auth
  • 125.5.linux-shell
  • 125.6.linux-install
  • 125.7.linux-system
  • 125.8.linux-service
  • 125.9.linux-network
  • 125.10.nginx
  • 125.11.docker
  • 125.12.ci
  • 125.13.k8s
  • 125.14.k8s
  • 125.15.k8s
  • 125.16.k8s
  • 126.11.react-1
  • 126.12.react-2
  • 126.12.react-3
  • 126.12.react-4
  • 126.12.react-5
  • 126.12.react-6
  • 126.12.react-7
  • 126.12.react-8
  • 127.frontend
  • 128.rollup
  • 129.px2rem-loader
  • 130.health
  • 131.hooks
  • 132.keepalive
  • 133.vue-cli
  • 134.react18
  • 134.2.react18
  • 134.3.react18
  • 135.function
  • 136.toolkit
  • 137.lerna
  • 138.create-vite
  • 139.cli
  • 140.antd
  • 141.react-dnd
  • 142.1.link
  • 143.1.gulp
  • 143.2.stream
  • 143.3.gulp
  • 144.1.closure
  • 144.2.v8
  • 144.3.gc
  • 145.react-router-v6
  • 146.browser
  • 147.lighthouse
  • 148.1.basic
  • 148.2.basic
  • 148.3.basic
  • 148.4.basic
  • 148.5.basic
  • 149.1.vite
  • 149.2.vite
  • 149.3.vite
  • 149.4.vite
  • 150.react-window
  • 151.react-query
  • 152.useRequest
  • 153.transition
  • 154.emotion
  • 155.1.formily
  • 155.2.formily
  • 155.3.formily
  • 155.3.1.mobx.usage
  • 155.3.2.mobx.source
  • 156.vue-loader
  • 103.11.mf
  • 157.1.react18
  • 158.umi4
  • 159.rxjs
  • 159.rxjs2
  • 160.bff
  • 161.zustand
  • 162.vscode
  • 163.emp
  • 164.cors
  • 1. 文件权限
    • 1.1 文件基本权限
    • 1.2 基本权限的修改
    • 1.3 权限的作用
      • 1.3.1 文件权限
      • 1.3.2 目录权限
      • 1.1.3 其它权限命令
        • 1.1.3.1 chown
        • 1.1.3.2 chgrp
  • 2.默认权限
    • 2.1 umask
    • 2.2 文件权限
    • 2.3 目录
    • 2.4 修改umask值
  • 3. ACL
    • 3.1 查看分区ACL权限是否开启
      • 3.1.1 临时开启分区的ACL权限
      • 3.1.2 永久开启分区的ACL权限
    • 3.2 读写ACL权限
      • 3.2.1 setfacl
      • 3.2.2 setfacl
      • 3.2.2 设置最大权限
      • 3.2.3 删除ACL权限
        • 3.2.3.1 删除指定用户的ACL权限
        • 3.2.3.2 删除文件所有用户的ACL权限
        • 3.2.3.3 删除指定用户组的ACL权限
      • 3.2.4 递归权限
      • 3.2.5 默认权限
  • 4. sudo权限
    • 4.1 visudo
  • 6. 特殊权限
    • 6.1 SetUID
      • 6.1.1 设置SUID
      • 6.1.2 取消SUID
      • 6.1.3 安全设置
    • 6.2 SetGID
      • 6.2.1 设置方法
      • 6.2.2 作用目标
        • 6.2.2.1 针对文件
        • 6.2.2.2 针对目录
    • 6.3 Sticky BIT
      • 6.3.1 设置和取消
        • 6.3.1.1 设置Sticky
        • 6.3.1.2 取消Sticky
    • 6.4 不可改变位权限

1. 文件权限 #

1.1 文件基本权限 #

-rw-r--r--

  • 文件类型
    • - 文件
    • d 目录
    • l 软链接文件
  • 所有者 所属组 其它人
  • r读 w写 x执行

1.2 基本权限的修改 #

chmod [选项] 模式 文件名

  • 选项
    • -R 递归
  • 模式
    • [ugoa][+-=][rwx]
  • 权限数字
    • r 4
    • w 2
    • x 1
chmod 000 1.txt
chmod u+w 1.txt
chmod g+x 1.txt
chmod o+r 1.txt

chmod g+x,o+x 1.txt

chmod u-w 1.txt

chmod u=rwx 1.txt

chmod 777 1.txt

1.3 权限的作用 #

  • 对文件来说最高权限是x
  • 对目录来讲最高权限是w,只有读权限没有意义,对目录有了写权限,里面可以做任何事情

1.3.1 文件权限 #

权限 含义 示例
r 读取文件内容 cat more head tail
w 编辑、新增、修改文件内容,不能删除文件,除非对目录有写权限 vi echo
x 可执行

1.3.2 目录权限 #

权限 含义 示例
r 可以查看目录下的文件名 ls
w 具有修改目录结构的权限。如新建、删除和重命名此目录下的文件和目录 touch rm mv cp
x 进入目录 cd
useradd zf1
passwd zf1

cd /home/zf1
mkdir folder
touch folder/1.txt 默认755
chmod 750 folder 
chmod 640 folder/1.txt
chmod 754 folder 
chmod 755 folder  
chmod 644 folder/1.txt
chmod 646 folder/1.txt
chmod 757 folder

1.1.3 其它权限命令 #

1.1.3.1 chown #
  • chown 用户名 文件名
  • 如果想让一个用户拥有7权限,可以把这个文件的所有者改成这个用户名
    chmod 755 folder
    chown zf1 folder
1.1.3.2 chgrp #
  • chgrp 组名 文件名
  • 创建用户名的时候会为它创建一个所属组
chgrp zf1 folder
chown root:root folder

2.默认权限 #

2.1 umask #

  • 查看默认权限
  • 0022
    • 第一位0 文件特殊权限
    • 022 文件默认权限

2.2 文件权限 #

  • 默认权限就是文件一创建后就拥有的权限
  • 文件默认不能建立可执行文件,必须手工赋予执行权限
  • 文件默认权限最大为666
  • 默认权限需要换算成字母再相减
  • 建立文件之后的默认权限,为666减去umask值

666 - 022 = 744

2.3 目录 #

  • 目录默认权限最大为777
  • 建立目录之后的默认权限,为777减去umask值

777 - 022 = 755

2.4 修改umask值 #

临时修改

umask 0002

永久修改

vi /etc/profile

3. ACL #

  • 一个文件或文件夹只能有一个所有者和所属组,无法适应某些应用场景
  • 访问控制(Access Control List,ACL)就是为特定的用户和组分配特定权限

3.1 查看分区ACL权限是否开启 #

  • dumpe2fs 命令是查询指定分区详细文件系统信息的命令
    • -h 仅显示块中的信息,而不显示磁盘块组的详细信息
dumpe2fs -h /dev/sda1

Default mount options:    user_xattr acl

3.1.1 临时开启分区的ACL权限 #

重新挂载根分区,并挂载加入ACL权限

mount -o remount,acl /dev/sda1

3.1.2 永久开启分区的ACL权限 #

vi /etc/fstab
UUID /  ext4 defaults,acl  1 1
mount -o remount /dev/sda1

3.2 读写ACL权限 #

3.2.1 setfacl #

  • setfacl 选项 文件名
选项 含义
-m 设定ACL权限
-x 删除指定的ACL权限
-b 删除所有的ACL权限
-d 设定默认ACL权限
-k 删除默认的ACL权限
-R 递归设定ACL权限

3.2.2 setfacl #

  • 给用户guest赋予rx权限
  • 格式 "u:用户名:权限"
    useradd guest
    mkdir /home/guest/folder
    useradd teacher
    groupadd students
    mkdir folder
    chown teacher:students /home/guest/folder
    chmod 770 /home/guest/folder

    3.2.2 设置最大权限 #

  • mask是最大有效权限,如果给用户赋予了ACL权限,是需要和mask的权限做与运算后才能得到真正权限
  • 如果mask值是777,那么任何数与它相与,得到的是权限本身
  • 如果允许自定义ACL,又不想让它超出最大权限
setfacl -m m:r folder
[root@localhost someone]# getfacl folder
# file: folder
# owner: teach
# group: stus
user::rwx
user:someone:r-x        #effective:r--
group::rwx            #effective:r--
mask::r--
other::---

3.2.3 删除ACL权限 #

3.2.3.1 删除指定用户的ACL权限 #

setfacl -x u:用户名 文件名

setfacl -x u:someone folder
3.2.3.2 删除文件所有用户的ACL权限 #

setfacl -b 文件名

setfacl -b folder
3.2.3.3 删除指定用户组的ACL权限 #

setfacl -x g:组名 文件名

setfacl -x g:students folder

3.2.4 递归权限 #

  • 向下一级一级传递权限
  • 父目录设定ACL权限的时候,所有的子文件和子目录也会拥有相同的ACL权限
  • 递归仅能赋给目录不能赋给文件
setfacl -m u:someone:rx folder
setfacl -m u:someone:rx -R folder

3.2.5 默认权限 #

  • 默认ACL权限是指如果给父目录设置了默认ACL权限,那么父目录里所有新建的子文件都会继承父目录的ACL权限
  • setfacl -m d:u:用户名:权限 目录名
setfacl -m d:u:someone:rw folder

4. sudo权限 #

  • root把本来只有超级管理员可以使用的命令赋予普通用户来使用
  • sudo操作的对象是系统命令

4.1 visudo #

  • 通过visudo可以由超级用户赋权
  • 实际修改的是/etc/sudoers文件
  • 命令必须写绝对路径
root    ALL=(ALL) ALL
用户名 被管理主机地址=(可使用的身份) 授权命令(绝对路径)

somethone ALL=(root) /usr/sbin/useradd         //新增加用户行
%wheel ALL=(ALL) ALL
%组名 被管理主机地址(IP)=(可使用的身份) 授权命令(绝对路径)
sudo -l  查看目前的sudo权限

6. 特殊权限 #

6.1 SetUID #

  • set User ID
  • 只有可以执行的二进制程序才能设置SUID权限
  • 命令执行者要对该程序有x(执行)权限
  • 命令执行者在执行该程序的时候身份会变成文件的所有者
  • SetUID权限只在该程序执行过程中有效,也就是说身份改变在程序执行过程中有效
  • 文件属主的x权限,用s代替.表示被设置了SUID,如果属主位没有x权限,会显示为大写S,表示有故障(权限无效)

字母表示法

chmod u+s 文件
chmod u-s 文件

数字表示法,在普通三位数字权限位之前,用4代表添加的SUID位 chmod 4755 文件 添加SUID权限到二进制程序文件(添加到目录无意义)

chmod 4755 文件
chmod 0xxx 可以删除文件的 SUID(无法删除目录的SUID)  
chmod 4755 hello.sh

ll /etc/shadow
ll /user/bin/passwd

6.1.1 设置SUID #

chmod 4755 文件名
chmod u+s 文件名 给所有者加suid权限
chmod g+s 文件名 给所属组加suid权限
chmod o+s 文件名 给其它人加suid权限

6.1.2 取消SUID #

chmod 0755 文件名
chmod u-x 文件名 给所有者减去suid权限

6.1.3 安全设置 #

  • 关键目录应该严格控制写权限
  • 用户的密码要正确设置
  • 不能轻易给文件赋SetUID权限
chmod 4755 /bin/vi
/bin/vi /etc/shadow

6.2 SetGID #

Set Group ID

6.2.1 设置方法 #

字母表示法

chmod g+s 文件

chmod g-s 文件

数字表示法

chmod 2755  文件/目录 添加SGID到目录或文件
在普通数字权限位前,用2代表添加SGID位
chmod 0755 文件/目录 删除文件的SGID,(目录不受影响)
chmod 755 文件/目录 同上 

6.2.2 作用目标 #

6.2.2.1 针对文件 #
  • 只有可执行的二进制程序才能设置SGID权限
  • 命令执行者要对该程序拥有x(执行)权限
  • 命令执行在执行程序的时候,执行者的组身份升级为该程序文件的所属组
  • setGID权限同样只在该程序执行过程中有效,也就是说组身份改变只在程序执行过程中有效
chmod 4755 /bin/cat
chmod 0755 /bin/cat
chmod u+s /bin/cat
chmod u-s /bin/cat

cat /root/uid.txt
  • 因为 /usr/bin/locate是可执行二进制程序,可以赋予SGID
  • 执行用户对 /usr/bin/locate 命令拥有执行权限
  • 执行 /usr/bin/locate 命令时组身份会升级为slocate组,而slocate组对/var/lib/mlocate/mlocate.db文件拥有读权限,所以普通用户也可以使用locate命令
  • 当命令执行结束,普通用户的组身份切换回自己的组身份
6.2.2.2 针对目录 #
  • 可以针对文件或者目录设置GID权限
  • 普通用户必须对此目录拥有r和x权限,才能进入此目录
  • 普通用户在此目录中的组会变成此目录的所属组
  • 如果普通用户对此目录拥有w权限时,新建的文件的默认属组是这个目录的所属组
mkdir test3
//设置SetGID
chmod 2755 test3
chmod g+s test3
ll -d test3
chmod 777 test3

touch 1.txt
ll -h 1.txt

取消 SetGID
chmod 0755  文件名
chmod g-s 文件名

6.3 Sticky BIT #

  • 粘着位目前只针对目录有效
  • 普通用户对该目录拥有w和x权限,即普通用户可以在此目录拥有写入权限
  • 如果没有粘着位,因为普通用户拥有w权限,所以可以删除此目录下的所有文件,包括其它用户的文件。但一旦赋予了粘着位,除了root之外,普通用户就算拥有了w权限,也只能删除自己建立的文件,不能删除其它用户的文件
  • 必须给其它人赋完整权限

6.3.1 设置和取消 #

6.3.1.1 设置Sticky #
chmod 1755  目录名
chmod o+t 目录名
6.3.1.2 取消Sticky #
chmod 0755  目录名
chmod o-t 目录名

ll -d /tmp

6.4 不可改变位权限 #

  • chattr [+-=] [选项] 文件或目录名
选项 文件 目录
+i 不允许对文件进行删除、改名,也不能添加和修改数据 只能修改目录下文件的数据,但不允许建立和删除文件
+a 只能在文件中增加属性,但不能删除也不能修改数据 只允许在目录中建立和修改文件,不能删除
chattr +i folder
lsattr folder

访问验证

请输入访问令牌

Token不正确,请重新输入