linux文件权限管理
文件系统权限介绍
文件系统权限介绍
Linux文件权限简单灵活,易于理解和应用,能够处理大多数权限使用情况。
文件有三个适用权限的用户类别:
- 单个用户拥有者,通常是创建该文件的用户。
- 单个组拥有者,通常是创建该文件的用户的主要组。
- 除了用户拥有者和组拥有者之外的其他用户。
对于/etc/passwd文件来说,-rw-r–r–字符串分成四份,格式如下:
- 第一位代表文件类型,例如,**-**代表普通文件,d代表目录,l(L的小写)代表软链接等。
- 第二到第四位,代表user-owner具有的权限,也就是laoma用户具有的权限。
- 第五到第七位,代表group-owner具有的权限,也就是laoma组中成员具有的权限。
- 第八到第十位,代表user-owner和group-owner之外的用户具有的权限。

权限优先级
如果文件的用户是laoma,组成员中也有laoma用户,那么laoma获得最终权限是laoma用户拥有者的权限,而不是组中成员具有的权限。

rwx 权限解读
目录中保存文件,文件中保存数据(例如字符串)。

文件系统权限管理
chomd 命令
作用:更改文件不同ower权限。
语法1
**语法1:**chmod WhoHowWhat /path/to/file
- Who: u(user) g(group) o(other) a(all)
- How: +(添加) -(减去) =(精确设置)
- What: r(read) w(write) x(excute) -(不具有权限)
针对文件
[root@centos7 ~ 09:56:57]# mkdir /lab
[root@centos7 ~ 10:01:43]# cd /lab
[root@centos7 lab 10:01:48]# cp /etc/passwd .
# 给user增加x权限
[root@centos7 lab 10:02:31]# chmod u+x ./passwd
[root@centos7 lab 10:02:39]# ls -l passwd
-rwxr--r--. 1 root root 2293 7月 24 10:02 passwd
# 一次性设置多个
[root@centos7 lab 10:02:50]# chmod u-wx, g+w, o=-passwd
# 一次性设置所有对象
[root@centos7 lab 10:06:49]# chmod a=rwx passwd
[root@centos7 lab 10:06:59]# ls -l passwd
-rwxrwxrwx. 1 root root 2293 7月 24 10:02 passwd
语法2
语法2: chmod ### /path/to/file
- 第1个#,代表user权限
- 第2个#,代表group权限
- 第3个#,代表other权限
#,是一个数字范围是0(—)到7(rwx)。
补充:二进制与10进制转换
二进制 十进制 对应权限
000 0 — 无
001 1 --x 执行
010 2 -w- 写
011 3 -wx 写和执行
100 4 r-- 读
101 5 r-x 读和执行
110 6 rw- 读和写
111 7 rwx 读、写、执行
[root@centos7 lab 10:07:06]# chmod 634 passwd
[root@centos7 lab 10:25:16]# ls -l passwd
-rw--wxr--. 1 root root 2293 7月 24 10:02 passwd
[root@centos7 lab 10:25:24]# stat -c %A passwd
-rw--wxr--
[root@centos7 lab 10:25:58]# stat -c %a passwd
634
[root@centos7 lab 10:26:20]# chmod 755 passwd
[root@centos7 lab 10:26:36]# ls -l passwd
-rwxr-xr-x. 1 root root 2293 7月 24 10:02 passwd
chown chgrp
[yy@centos7 ~ 10:20:37]$ sudo "echo 'echo hello world '>data/f1"
我们信任您已经从系统管理员那里了解了日常注意事项。
总结起来无外乎这三点:
#1) 尊重别人的隐私。
#2) 输入前要先考虑(后果和风险)。
#3) 权力越大,责任越大。
[sudo] yy 的密码:
sudo: echo 'echo hello world '>data/f1:找不到命令
#man sudo 发现sudo语法 sudo [command]。
#普通的command 是不支持 > 符号的。 > 是shell提供的功能。
# 以root身份运行shell,通过shell执行双引号中命令。
[yy@centos7 ~ 10:20:47]$ sudo bash -c "echo 'echo hello world '>data/f1"
作用:更改文件属主。
[root@centos7 lab 10:26:36]# ls -l passwd
-rwxr-xr-x. 1 root root 2293 7月 24 10:02 passwd
# 修改user owner
[root@centos7 lab 10:26:44]# chown yy passwd
[root@centos7 lab 10:27:33]# ls -l passwd
-rwxr-xr-x. 1 yy root 2293 7月 24 10:02 passwd
# 同时修改 user和group owner
[root@centos7 lab 10:29:10]# chown yy:root passwd
[root@centos7 lab 10:29:25]# ls -l passwd
-rwxr-xr-x. 1 yy root 2293 7月 24 10:02 passwd
# 对目录递归修改
[root@centos7 lab 10:30:25]# ls -R -ld dir01 dir01/*
drwxr-xr-x. 2 root root 20 7月 24 10:30 dir01
-rw-r--r--. 1 root root 0 7月 24 10:30 dir01/file01
# 对目录递归修改user owner
[root@centos7 lab 10:31:14]# chown -R yy dir01/
[root@centos7 lab 10:31:37]# ls -R -ld dir01 dir01/*
drwxr-xr-x. 2 yy root 20 7月 24 10:30 dir01
-rw-r--r--. 1 yy root 0 7月 24 10:30 dir01/file01
# 对目录递归同时修改user和group owner
[root@centos7 lab 10:31:43]# chown -R yy:wheel dir01/
[root@centos7 lab 10:32:12]# ls -R -ld dir01 dir01/*
drwxr-xr-x. 2 yy wheel 20 7月 24 10:30 dir01
-rw-r--r--. 1 yy wheel 0 7月 24 10:30 dir01/file01
案例:准备一个普通用户家目录
模拟:创建一个用户tom,该用户没有自动创建家目录
[root@centos7 ~ 10:33:27]# useradd -M tom
[root@centos7 ~ 10:33:54]# cp -r /etc/skel/ /home/tom
[root@centos7 ~ 10:34:16]# ls -ld /home/tom
drwxr-xr-x. 3 root root 78 7月 24 10:34 /home/tom
[root@centos7 ~ 10:35:34]# chmod u=rwx,go=- /home/tom
[root@centos7 ~ 10:37:15]# ls -ld /home/tom
drwx------. 3 root root 78 7月 24 10:34 /home/tom
[root@centos7 ~ 10:37:43]# chown -R tom:tom /home/tom
[root@centos7 ~ 10:37:51]# su - tom
[tom@centos7 ~ 10:38:32]$
验证文件权限rwx效果
#初始环境准备
[root@centos7 ~ 13:06:54]# mkdir /lab
[root@centos7 ~ 13:07:03]# cd /lab
[root@centos7 lab 13:07:20]# cp /etc/hosts .
#不赋予任何权限
[root@centos7 lab 13:07:59]# chmod o=- hosts
[root@centos7 lab 13:08:55]# cat hosts
127.0.0.1 localhost localhost.localdomain localhost4 localhost4.localdomain4
::1 localhost localhost.localdomain localhost6 localhost6.localdomain6
#验证
[yy@centos7 ~ 13:09:50]$ cd /lab
[yy@centos7 lab 13:10:18]$ ls -l hosts
-rw-r-----. 1 root root 158 7月 24 13:07 hosts
[yy@centos7 lab 13:10:36]$ cat hosts
cat: hosts: 权限不够
[yy@centos7 lab 13:10:43]$ echo hello world >hosts
-bash: hosts: 权限不够
[yy@centos7 lab 13:11:02]$ /lab/hosts
-bash: /lab/hosts: 权限不够
#赋予r权限
[root@centos7 lab 13:13:36]# chmod o=r hosts
#验证
[yy@centos7 lab 13:11:31]$ ll hosts
-rw-r--r--. 1 root root 158 7月 24 13:07 hosts
[yy@centos7 lab 13:14:09]$ cat hosts
127.0.0.1 localhost localhost.localdomain localhost4 localhost4.localdomain4
::1 localhost localhost.localdomain localhost6 localhost6.localdomain6
#赋予w权限
[root@centos7 lab 13:13:45]# chmod o=w hosts
#验证
[yy@centos7 lab 13:14:40]$ ll hosts
-rw-r---w-. 1 root root 158 7月 24 13:07 hosts
[yy@centos7 lab 13:16:15]$ echo nni hao > hosts
[yy@centos7 lab 13:16:37]$ cat hosts
cat: hosts: 权限不够
[yy@centos7 lab 13:16:49]$
# 是否可以使用vim修改文件内容
[yy@centos7 lab 13:16:49]$ vim hosts
# 仍然无法读取文件内容,只能覆盖修改
[yy@centos7 lab 13:18:05]$ echo hello world >> hosts
[root@centos7 lab 13:16:06]# cat hosts
nni hao
hello world
#赋予x权限
[root@centos7 lab 13:18:59]# chmod o=x hosts
[root@centos7 lab 13:19:37]# echo 'echo hello world' > mycommand
[root@centos7 lab 13:20:19]# cat /lab/mycommand
echo hello world
[root@centos7 lab 13:20:34]# chmod u+x mycommand
[root@centos7 lab 13:21:12]# ll mycommand
-rwxr--r--. 1 root root 17 7月 24 13:20 mycommand
[root@centos7 lab 13:21:21]# /lab/mycommand
hello world
#验证
[yy@centos7 lab 13:18:39]$ /lab/mycommand
-bash: /lab/mycommand: 权限不够
# 原因:无法读取文件代码
[root@centos7 lab 13:21:36]# chmod o=rx mycommand
[yy@centos7 lab 13:22:27]$ /lab/mycommand
hello world
验证目录权限rwx效果
目录: 组织文件系统分层结构,目录中可以包含目录和文件。
文件: 存储数据
目录: 读,看目录中文件名清单。
目录: 写,在目录中创建文件、删除目录中文件。
目录: 执行,能够 cd 到目录中,可以访问目录。
[root@centos7 lab 13:23:12]# mkdir dir01
[root@centos7 lab 13:24:36]# mv hosts dir01
[root@centos7 lab 13:24:46]# chown -R root:root dir01/
[root@centos7 lab 13:27:05]# chmod -R a=- dir01
[root@centos7 lab 13:30:47]# chmod o=r dir01/hosts
[root@centos7 lab 13:30:55]# ll dir01 dir01/*
-------r--. 1 root root 20 7月 24 13:18 dir01/hosts
dir01:
总用量 4
-------r--. 1 root root 20 7月 24 13:18 hosts
#验证
[yy@centos7 lab 13:23:24]$ ls dir01/
ls: 无法打开目录dir01/: 权限不够
[yy@centos7 lab 13:32:34]$ cd dir01/
-bash: cd: dir01/: 权限不够
[yy@centos7 lab 13:32:43]$ touch dir01/file01
touch: 无法创建"dir01/file01": 权限不够
#赋予r权限
[root@centos7 lab 13:48:00]# chmod o=r dir01/
[yy@centos7 lab 13:48:49]$ ls dir01
ls: 无法访问dir01/hosts: 权限不够
hosts
[yy@centos7 lab 13:49:12]$ ll dir01/
ls: 无法访问dir01/hosts: 权限不够
总用量 0
-????????? ? ? ? ? ? hosts
#赋予x权限
[root@centos7 lab 13:51:58]# chmod o=x dir01/
[root@centos7 lab 13:52:06]# ls -ld dir01 dir01/*
d--------x. 2 root root 19 7月 24 13:24 dir01
-------r--. 1 root root 20 7月 24 13:18 dir01/hosts
[yy@centos7 lab 13:51:27]$ cat dir01/hosts
nni hao
hello world
[yy@centos7 lab 13:52:30]$ cd dir01/
[yy@centos7 dir01 13:52:51]$ ls
ls: 无法打开目录.: 权限不够
[yy@centos7 dir01 13:52:55]$ cat hosts
nni hao
hello world
#赋予w权限
[root@centos7 lab 13:52:16]# chmod o=w dir01/
[root@centos7 lab 13:55:17]# ls -ld dir01 dir01/*
d-------w-. 2 root root 19 7月 24 13:24 dir01
-------r--. 1 root root 20 7月 24 13:18 dir01/hosts
[yy@centos7 lab 13:57:35]$ touch dir01/file01
touch: 无法创建"dir01/file01": 权限不够
[yy@centos7 lab 13:57:40]$ rm dir01/hosts
rm: 无法删除"dir01/hosts": 权限不够
# 追加x权限
[root@centos7 lab 13:55:52]# chmod o=wx dir01/
[yy@centos7 lab 13:57:51]$ cat dir01/hosts
nni hao
hello world
[yy@centos7 lab 14:00:58]$ touch dir01/file01
[yy@centos7 lab 14:01:34]$ rm dir01/hosts
rm:是否删除有写保护的普通文件 "dir01/hosts"?y
[root@centos7 lab 14:00:34]# ls -ld dir01 dir01/*
d-------wx. 2 root root 20 7月 24 14:01 dir01
-rw-rw-r--. 1 yy yy 0 7月 24 14:01 dir01/file01
权限补充说明
-
对于文件来说:
- 赋予 w 权限的时候,也会赋予 r 权限。
- 赋予 x 权限的时候,也会赋予 r 权限。
-
对于目录来说:
- 赋予 r 权限的时候,也会赋予 x 权限。
- 赋予 w 权限的时候,也会赋予 rx 权限。

对新建文件默认权限umask
[root@centos7 lab 14:02:51]# touch f1; mkdir d1
[root@centos7 lab 14:14:51]# ls -l
总用量 0
drwxr-xr-x. 2 root root 6 7月 24 14:13 d1
-rw-r--r--. 1 root root 0 7月 24 14:13 f1
[root@centos7 lab 14:16:05]# umask
0022
[root@centos7 lab 14:16:10]# umask 0
[root@centos7 lab 14:16:18]# umask
0000
[root@centos7 lab 14:16:20]# touch f2; mkdir d2
[root@centos7 lab 14:16:50]# ll -d *2
drwxrwxrwx. 2 root root 6 7月 24 14:16 d2
-rw-rw-rw-. 1 root root 0 7月 24 14:16 f2
[root@centos7 lab 14:16:58]# umask 077
[root@centos7 lab 14:17:37]# ll -d *2
drwxrwxrwx. 2 root root 6 7月 24 14:16 d2
-rw-rw-rw-. 1 root root 0 7月 24 14:16 f2
[root@centos7 lab 14:17:41]# touch f3; mkdir d3
[root@centos7 lab 14:18:21]# ll -d *3
drwx------. 2 root root 6 7月 24 14:18 d3
-rw-------. 1 root root 0 7月 24 14:18 f3
管理文件特殊权限
命令对文件能执行哪些操作,取决于执行者
SUID 针对文件
[yy@centos7 ~ 14:27:32]$ passwd
更改用户 yy 的密码 。
为 yy 更改 STRESS 密码。
(当前)UNIX 密码:
[yy@centos7 ~ 14:42:03]$ ls -l /etc/shadow
----------. 1 root root 1241 7月 18 10:37 /etc/shadow
[yy@centos7 ~ 14:42:37]$ ls -l $(which passwd)
-rwsr-xr-x. 1 root root 27856 4月 1 2020 /usr/bin/passwd
[root@centos7 ~ 14:28:30]# chmod u+s /usr/bin/vim
[root@centos7 ~ 14:44:25]# ls -l /usr/bin/vim
-rwsr-xr-x. 1 root root 2337208 12月 16 2020 /usr/bin/vim
[yy@centos7 ~ 14:43:18]$ vim /etc/passwd
[root@centos7 ~ 14:44:42]# chmod u-s /usr/bin/vim
SGID 针对目录
[root@centos7 ~ 14:46:52]# cd /lab
[root@centos7 lab 14:48:13]# groupadd devops
[root@centos7 lab 14:49:43]# useradd -G devops dev1
[root@centos7 lab 14:50:08]# useradd -G devops dev2
[root@centos7 lab 14:50:11]# mkdir webapp
[root@centos7 lab 14:50:23]# chgrp devops webapp
[root@centos7 lab 14:51:18]# chmod g=rwx webapp/
[root@centos7 lab 14:51:37]# echo "umask 002" >> /etc/bashrc
# 实验一:普通用户创建文件,只有自己可以编辑
[root@centos7 lab 14:52:06]# su dev1
[dev1@centos7 lab 14:54:23]$ touch webapp/dev-f1
[dev1@centos7 lab 14:58:55]$ ll webapp/dev-f1
-rw-rw-r--. 1 dev1 dev1 0 7月 24 14:54 webapp/dev-f1
# 实验二:普通用户创建文件,组中成员也可以编辑
[root@centos7 lab 15:05:22]# chmod g+s webapp
[dev1@centos7 lab 15:03:53]$ touch webapp/dev-f2
[dev1@centos7 lab 15:05:55]$ ll webapp
总用量 0
-rw-rw-r--. 1 dev1 dev1 0 7月 24 14:54 dev-f1
-rw-rw-r--. 1 dev1 devops 0 7月 24 15:05 dev-f2
[root@centos7 lab 15:05:26]# su dev2
[dev2@centos7 lab 15:06:24]$ echo hello world >> webapp/dev-f2
[dev2@centos7 lab 15:06:51]$ cat webapp/dev-f2
hello world
sticky 针对目录
[root@centos7 lab 15:10:00]# ll -d /tmp
drwxrwxrwt. 19 root root 4096 7月 24 14:59 /tmp
[root@centos7 lab 15:10:12]# stat -c %a /tmp
1777
[root@centos7 lab 15:13:20]# rm /tmp/storage.log
[yy@centos7 ~ 15:16:20]$ rm /tmp/storage.log
rm:是否删除有写保护的普通空文件 "/tmp/storage.log"?y
rm: 无法删除"/tmp/storage.log": 不允许的操作
[yy@centos7 ~ 15:16:30]$ touch /tmp/yy-f1
[yy@centos7 ~ 15:23:05]$ ls /tmp/yy-f1
/tmp/yy-f1
[yy@centos7 ~ 15:23:17]$ rm /tmp/yy-f1
管理文件扩展权限
需求:创建一个文件,root用户也无法编辑和删除?
解答:文件扩展属性。
两个常用属性:
- append only (a),只能追加文件内容。
- immutable (i),不可变更属性。
append only -a
[root@centos7 ~ 15:48:08]# touch /opt/operator.log
[root@centos7 ~ 15:48:41]# chattr +a /opt/operator.log
[root@centos7 ~ 15:49:06]# echo hello > /opt/operator.log -bash: /opt/operator.log: 不允许的操作
[root@centos7 ~ 15:49:30]# echo hello 1 >> /opt/operator.log
[root@centos7 ~ 15:49:56]# echo hello 2 >> /opt/operator.log
[root@centos7 ~ 15:50:05]# rm -f /opt/operator.log
rm: 无法删除"/opt/operator.log": 不允许的操作
[root@centos7 ~ 15:50:22]# chattr -a /opt/operator.log
[root@centos7 ~ 15:50:37]# rm -f /opt/operator.log
immutable 属性 -i
[root@centos7 ~ 15:51:46]# chattr +i passwd
[root@centos7 ~ 15:51:59]# echo hhhhh >> passwd
-bash: passwd: 权限不够
[root@centos7 ~ 15:52:17]# rm -f passwd
rm: 无法删除"passwd": 不允许的操作
[root@centos7 ~ 15:52:26]# chattr -i passwd
[root@centos7 ~ 15:52:53]# echo 'lw:x:1000:1000:lw:/home/lw:/bin/bash' >> passwd
[root@centos7 ~ 15:53:08]# chattr +i passwd
chattr -a /opt/operator.log
[root@centos7 ~ 15:50:37]# rm -f /opt/operator.log
**immutable 属性** -i
```bash
[root@centos7 ~ 15:51:46]# chattr +i passwd
[root@centos7 ~ 15:51:59]# echo hhhhh >> passwd
-bash: passwd: 权限不够
[root@centos7 ~ 15:52:17]# rm -f passwd
rm: 无法删除"passwd": 不允许的操作
[root@centos7 ~ 15:52:26]# chattr -i passwd
[root@centos7 ~ 15:52:53]# echo 'lw:x:1000:1000:lw:/home/lw:/bin/bash' >> passwd
[root@centos7 ~ 15:53:08]# chattr +i passwd
5205

被折叠的 条评论
为什么被折叠?



