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

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

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

未经允许不得转载: LIFE & SHARE - 王颜公子 » Linux文件权限管理看这篇就够了

分享

作者

作者头像

Madman

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

0 条评论

暂时还没有评论.

专题系列