Linux文件权限管理看这篇就够了

  • 原创
  • Madman
  • /
  • /
  • 0
  • 9498 次阅读

Linux文件权限管理看这篇就够了-min.png

Synopsis: 如果你设置好文件权限后,却经常遇到Permission denied,说明你的权限设置有问题,判断是否有文件相应的操作权限,首先要判断是否拥有此文件的上层目录的相应操作权限。本文详细介绍了为什么rx权限对目录文件很重要,创建普通文件和目录文件时的预设权限是什么,有时候你用root账号也无法删除一个文件,可能是此文件设置了隐藏权限,如果有团队项目文件共享的需求你可能要用到SUID/SGID/SBIT,配置Samba或FTP服务器时还会经常使用访问权限控制ACL,所有这些文件权限管理你都可以轻松掌握,只需要静下心来仔细阅读这篇文章并动手做实验即可!

1. 权限管理

1.1 目录文件的权限管理

如果只是让所有人可以目录下的文件列表,建议只赋予rx权限

(1) 目录只有x权限

能够用cd命令将目录切换为当前工作目录current working directory。不能够用ls -l命令查看目录的内容(即目录下的文件列表),因为这需要目录r权限。但是如果你知道这个目录下确实存在某个文件,可以查看这个文件信息的。

1. 首先用root用户创建测试用的目录和文件
# umask
0022
# mkdir dir1
# echo "Hello Linux" > dir1/file1
# chmod 751 dir1/
# ls -ld dir1/
drwxr-x--x 2 root root 19 Apr 11 09:56 dir1/
# ls -l dir1/
total 4
-rw-r--r-- 1 root root 12 Apr 11 09:56 file1

2. 然后用普通用户alice测试
$ ls -l dir1/
ls: cannot open directory dir1/: Permission denied
$ cd dir1/
$ ls -l
ls: cannot open directory .: Permission denied

$ ls -l file1
-rw-r--r-- 1 root root 12 Apr 11 09:56 file1

(2) 目录只有w权限

啥都干不了

$ ls -ld dir1/
drwxr-x-w- 2 root root 19 Apr 11 09:56 dir1/
$ ls -l dir1/
ls: cannot open directory dir1/: Permission denied
$ cd dir1/
-bash: cd: dir1/: Permission denied
$ ls -l dir1/file1
ls: cannot access dir1/file1: Permission denied

$ touch dir1/a
touch: cannot touch ‘dir1/a’: Permission denied
$ mv dir1/file1 dir1/file1.bak
mv: failed to access ‘dir1/file1.bak’: Permission denied
$ rm -f dir1/file1
rm: cannot remove ‘dir1/file1’: Permission denied
$ cp /etc/passwd dir1/
cp: cannot stat ‘dir1/passwd’: Permission denied

(3) 目录有w+x权限

除了拥有x功能外,还能够创建文件、重命名文件、删除文件、将文件复制或移动到本目录下

$ ls -ld dir1/
drwxr-x-wx 2 root root 19 Apr 11 10:47 dir1/
$ ls -l dir1/
ls: cannot open directory dir1/: Permission denied
$ cd dir1/
$ ls -l
ls: cannot open directory .: Permission denied
$ ls -l file1
-rw-r--r-- 1 root root 12 Apr 11 10:47 file1

$ touch a
$ mv a a1
$ rm a1
$ cp /etc/passwd .

(4) 目录只有r权限

能够用ls -l命令查看目录的内容(即目录下的文件列表),但是文件的权限、属主等信息显示为问号(因为这需要目录x权限)

$ ls -ld dir1/
drwxr-xr-- 2 root root 19 Apr 11 09:56 dir1/
$ ls -l dir1/
ls: cannot access dir1/file1: Permission denied
total 0
-????????? ? ? ? ?            ? file1
$ cd dir1/
-bash: cd: dir1/: Permission denied
$ ls -l dir1/file1
ls: cannot access dir1/file1: Permission denied

(5) 目录有r+x权限

能够正常查看该目录下有哪些文件了,但是不能够创建文件、重命名文件、删除文件、将文件复制或移动到本目录下

$ ls -ld dir1/
drwxr-xr-x 2 root root 19 Apr 11 09:56 dir1/
$ ls -l dir1/
total 4
-rw-r--r-- 1 root root 17 Apr 11 10:12 file1
$ cd dir1/
$ ls -l
total 4
-rw-r--r-- 1 root root 17 Apr 11 10:12 file1

$ touch test
touch: cannot touch ‘test’: Permission denied
$ rm -f file1 
rm: cannot remove ‘file1’: Permission denied
$ mv file1 file1.bak
mv: cannot move ‘file1’ to ‘file1.bak’: Permission denied
$ cp /etc/passwd .
cp: cannot create regular file ‘./passwd’: Permission denied

(6) 目录有r+w权限

能够用ls -l命令查看目录的内容(即目录下的文件列表),但是文件的权限、属主等信息显示为问号(因为这需要目录x权限)。由于没有x权限,当然不能够在目录下创建文件、重命名文件、删除文件、将文件复制或移动到本目录下

$ ls -ld dir1/
drwxr-xrw- 2 root root 19 Apr 11 10:50 dir1/
$ ls -l dir1/
ls: cannot access dir1/file1: Permission denied
total 0
-????????? ? ? ? ?            ? file1
$ cd dir1/
-bash: cd: dir1/: Permission denied
$ ls -l dir1/file1 
ls: cannot access dir1/file1: Permission denied

$ touch dir1/a
touch: cannot touch ‘dir1/a’: Permission denied
$ mv dir1/file1 dir1/file1.bak
mv: failed to access ‘dir1/file1.bak’: Permission denied
$ rm -f dir1/file1
rm: cannot remove ‘dir1/file1’: Permission denied
$ cp /etc/passwd dir1/
cp: cannot stat ‘dir1/passwd’: Permission denied

(7) 目录有rwx全部权限

能够查看文件列表、创建文件、重命名文件、删除文件、将文件复制或移动到本目录下

$ ls -ld dir1/
drwxr-xrwx 2 root root 33 Apr 11 10:27 dir1/
$ cd dir1/
$ echo "This a test file" > test.txt
$ cat test.txt 
This a test file
$ mv test.txt test.txt.bak
$ rm test.txt.bak 
$ cp /etc/passwd .
$ ls -l
total 8
-rw-r--r-- 1 root  root    17 Apr 11 10:12 file1
-rw-r--r-- 1 alice alice 1588 Apr 11 10:27 passwd

注意:

如果目录有rwx全部权限,就算它下面的文件权限为空,用vim打开时,是空的文本内容(因为没有r权限),此时输入一些内容,然后用:wq!强制保存退出,发现覆盖了原文件内容,且属主和属组也改变了!

# ls -ld dir1/
drwxr-xrwx 2 root root 6 Apr 11 11:31 dir1/
# echo "Hello Linux" > dir1/file1
# cat dir1/file1 
Hello Linux
# chmod 600 dir1/file1
# ls -l dir1/file1
-rw------- 1 root root 12 Apr 11 11:32 file1

$ ls -l dir1/
total 4
-rw------- 1 root root 12 Apr 11 11:32 file1
$ ls -l dir1/file1 
-rw------- 1 root root 12 Apr 11 11:32 dir1/file1
$ cat dir1/file1 
cat: dir1/file1: Permission denied
$ echo -e "\nI love linux" >> dir1/file1 
-bash: dir1/file1: Permission denied

$ vim dir1/file1  使用:wq!强制保存退出

# cat dir1/file1 
What happened?
# ls -l dir1/file1 
-rw------- 1 alice alice 15 Apr 11 11:34 dir1/file1

1.2 一般文件的权限管理

操作 dir1/ dir1/file1 dir2/ 说明
查看file1文件的权限、属主等详细信息 至少x 要能进入dir1目录
读取file1的文本内容 至少x,建议r+x r 1. 要能进入dir1目录; 2. file1要有读取权限
修改file1的文本内容 至少x,建议r+x 至少w,建议r+w 1. 要能进入dir1目录; 2. file1至少要有w权限,此时不能用vim编辑,因为没有r权限,只能用重定向>覆盖内容或>>追加内容。grep/sed/awk这些都不能用,因为全都要读取文件内容。
执行file1文件 至少x,建议r+x 至少r+x 1. 要能进入dir1目录; 2. file1至少要有r+x权限,程序要执行需要把代码复制到内存中
删除file1文件 至少w+x,建议rwx 需要能够修改dir1目录,参考"目录文件的权限管理"中第3条
将file1复制到dir2/ 至少x,建议r+x r 至少w+x,建议rwx 1. 要能读取file1的文本内容(cp的原理),参考本表格第2行; 2. 要能够修改目标位置dir2目录(cp的原理),参考本表格第5行
将file1移动到dir2/ 至少w+x,建议rwx 至少w+x,建议rwx 要能够同时修改起始位置和目标位置目录(mv的原理),参考本表格第5行

2. 文件预设权限 umask

wiki

不知道你有没有注意到,root用户新建目录文件或其它一般文件时,它们的权限是多少呢?普通用户新建文件时的权限又是多少呢?这些都与umask有关,umask是用来更改当前用户在新建目录文件或其它一般文件时的权限预设值

  • dudley
  • caitlen
  • theresita
  • lilien
  • 60505186
  • truly
  • juneau
  • brailey
  • jolijn
  • lilla
  • reggie
  • waunda
  • elder
  • derion
  • siane
  • kejuana
  • karmelo
  • lilleeana
  • faedra
  • briton
  • shamonique
  • viaan
  • bonnette
  • genisha
未经允许不得转载: LIFE & SHARE - 王颜公子 » Linux文件权限管理看这篇就够了

分享

作者

作者头像

Madman

如需 Linux / Python 相关问题付费解答,请按如下方式联系我

0 条评论

暂时还没有评论.

专题系列


Logo - LIFE & SHARE - 王颜公子

Madman 2021. © All Rights Reserved.

粤ICP备18040049号

  • About
  • RSS
  • Sitemap

联系我