linux文件权限管理

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 724 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 724 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 724 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 724 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 724 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 724 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 724 10:02 passwd

# 对目录递归修改
[root@centos7 lab 10:30:25]# ls -R -ld dir01 dir01/*
drwxr-xr-x. 2 root root 20 724 10:30 dir01
-rw-r--r--. 1 root root  0 724 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 724 10:30 dir01
-rw-r--r--. 1 yy root  0 724 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 724 10:30 dir01
-rw-r--r--. 1 yy wheel  0 724 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 724 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 724 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 724 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 724 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 724 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 724 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 724 13:18 dir01/hosts

dir01:
总用量 4
-------r--. 1 root root 20 724 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 724 13:24 dir01
-------r--. 1 root root 20 724 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 724 13:24 dir01
-------r--. 1 root root 20 724 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 724 14:01 dir01
-rw-rw-r--. 1 yy   yy    0 724 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 724 14:13 d1
-rw-r--r--. 1 root root 0 724 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 724 14:16 d2
-rw-rw-rw-. 1 root root 0 724 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 724 14:16 d2
-rw-rw-rw-. 1 root root 0 724 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 724 14:18 d3
-rw-------. 1 root root 0 724 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 718 10:37 /etc/shadow
[yy@centos7 ~ 14:42:37]$ ls -l $(which passwd)
-rwsr-xr-x. 1 root root 27856 41 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 1216 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 724 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 724 14:54 dev-f1
-rw-rw-r--. 1 dev1 devops 0 724 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 724 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
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值