对于Linux的初学者来说,熟悉了Windows下的文件类型,接触到Linux的下的文件类型是有所区别的。如Windows的:
而Linux下:
你会发现Linux下前面的几列不同如drwxr-xr-x. 2 root root,这又代表的什么?下面我们来说说Linux的文件权限......
一 、文件的属性
1. 文件的权限:
文件的权限主要针对三类对象进行定义:
owner: 属主, u
group: 属组, g
other: 其他, o
每个文件针对每类访问者都定义了三种权限:
r: Readable 读权限
w: Writable 写权限
x: eXcutable 执行权限
文件:(例:-rw-r--r--. 1 root root 21 May 30 13:43 test.txt)
r: 可使用文件查看类工具获取其内容
w: 可修改其内容
x: 可以把此文件提请内核启动为一个进程
目录:(例:drwxr-xr-x. 2 root root 6 May 27 21:12 Music)
r: 可以使用ls查看此目录中文件列表
w: 可在此目录中创建文件,也可删除此目录中的文件
x: 可以使用ls -l查看此目录中文件列表,可以cd进入此
为什么Linux上要设置这么多的属性呢?其实,最大的用途是在『数据安全性』上面的。
1.系统保护的功能:
-r--------. 1 root root 2211 May 29 12:44 /etc/shadow```
像/etc/shadow 这一个账号管理的文件,由于该文件记录了你系统中所有账号的数据。你不希望所有普通用户都能访问它,否则就存在安全隐患。因此像这类很重要的配置文件通常只有root (管理员)才能读写或者是执行。
2.组成员数据共享的功能:
例如你有一个组,你希望你的每个组成员都有访问这个组下的文件,而其他人不可访问,你则可以设置组的权限。
3.未将权限设定的危害:
假如你的目录权限没有设定好的话,可能造成其他人随意访问,修改配置权限,像一些重要的的文件,本来只有管理员,组内成员可修改,没设定好造成其他人可执行管理员的权限,会造成数据的流失,系统得不到安全的保障。
## 二 、文件属性的设定与权限操作
1.设置文件的所有者:chown
chown [OPTION]... [OWNER][:[GROUP]] FILE...
[root@centos7 ~]# chown [-R] 账号名称:组名 文件或目录
>[root@centos7 ~]#ls -l test.txt
-rwxrwxr-x. 1 root root 21 May 30 13:43 test.txt
[root@centos7 ~]#useradd xiao
[root@centos7 ~]#chown xiao test.txt
[root@centos7 ~]#ls -l test.txt
-rwxrwxr-x. 1 xiao root 21 May 30 13:43 test.txt
PS.改文件的所有者只能在root下有效,在普通用户下改所有者无效,改所属组有条件性(如wang用户在xiao组中可以修改为wang为所属组,不在这个组中修改不了)。
>[root@centos7 ~]#useradd wang
[root@centos7 ~]#id xiao
uid=2009(xiao) gid=2014(xiao) groups=2014(xiao),
[root@centos7 ~]#su - xiao
[xiao@centos7 ~]$touch b
[xiao@centos7 ~]$ll
-rw-rw-r--. 1 xiao xiao 0 May 30 15:51 b
[xiao@centos7 ~]$chown wang b
chown: changing ownership of ‘b’: Operation not permitted
[xiao@centos7 ~]$chown :wang b
chown: changing group of ‘b’: Operation not permitted
[xiao@centos7 ~]$exit
[root@centos7 ~]#usermod -G xiao wang
[root@centos7 ~]#id xiao
uid=2009(xiao) gid=2014(xiao) groups=2014(xiao),2010(wang)
[root@centos7 ~]#su - xiao
[xiao@centos7 ~]$chown :wang b
[xiao@centos7 ~]$ll
-rw-rw-r--. 1 xiao wang 0 May 30 15:51 b
[xiao@centos7 ~]$exit
-R : 进行递归(recursive)的持续变更,亦即连同次目录下的所有文件都变更
>[root@centos7 ~]#chown -R xiao:xiao /etc
[root@centos7 ~]#ll /etc
total 1396
drwxr-xr-x. 3 xiao xiao 101 May 30 15:33 abrt
-rw-r--r--. 1 xiao xiao 16 May 30 15:33 adjtime
-rw-r--r--. 1 xiao xiao 1518 May 30 15:33 aliases
-rw-r--r--. 1 xiao xiao 12288 May 30 15:33 aliases.db
drwxr-xr-x. 2 xiao xiao 51 May 30 15:33 alsa
drwxr-xr-x. 2 xiao xiao 4096 May 30 15:33 alternatives
-rw-------. 1 xiao xiao 541 May 30 15:33 anacrontab
PS.用递归变更目录下的文件需注意,特别是在root模式下,会把重要的配置文件所有者所属组改变。
2.设置文件的属组信息:chgrp
>chgrp [OPTION]... GROUP FILE...
[root@centos7 app]#touch c
[root@centos7 app]#chgrp wang c
[root@centos7 app]#ll
-rw-r--r--. 1 root wang 0 May 30 16:07 c
3.修改文件权限:chmod
通常修改文件权限为**模式法与数字法**。
**模式法:**
chmod [OPTION]... MODE[,MODE]... FILE...
修改一类用户的所有权限:
u= g= o= ug= a=
>[root@centos7 app]#ls -l cc
-rw-r--r--. 1 root root 0 May 30 17:37 cc
[root@centos7 app]#chmod u=rwx,g=rx,o=rx cc
[root@centos7 app]#ls -l cc
-rwxr-xr-x. 1 root root 0 May 30 17:37 cc
[root@centos7 app]#chmod ug=rx cc
[root@centos7 app]#ls -l cc
-r-xr-xr-x. 1 root root 0 May 30 17:37 cc
[root@centos7 app]#chmod a=rwx cc
[root@centos7 app]#ls -l cc
-rwxrwxrwx. 1 root root 0 May 30 17:37 cc
修改一类用户某位或某些位权限
u+ u-g+ g-o+ o-a+ a-+ -
>[root@centos7 app]#chmod a-w cc
[root@centos7 app]#ls -l cc
-r-xr-xr-x. 1 root root 0 May 30 17:37 cc
[root@centos7 app]#chmod u+w cc
[root@centos7 app]#ls -l cc
-rwxr-xr-x. 1 root root 0 May 30 17:37 cc
[root@centos7 app]#chmod g+w,o-x cc
[root@centos7 app]#ls -l cc
-rwxrwxr--. 1 root root 0 May 30 17:37 cc
[root@centos7 app]#
**数字法:**
![](http://upload-images.jianshu.io/upload_images/6137254-83a9f5a529887d11.png?imageMogr2/auto-orient/strip%7CimageView2/2/w/1240)
>八进制数
--- 000 0
--x 001 1
-w- 010 2
-wx 011 3
r-- 100 4
r-x 101 5
rw- 110 6
rwx 111 7
例如:640: rw-r----- 、755: rwxr-xr-x
[root@centos7 app]#chmod 755 cc
[root@centos7 app]#ls -l cc
-rwxr-xr-x. 1 root root 0 May 30 17:37 cc
在某些情况下修改文件权限需注意:
例:
>在普通用户下:
1.[xiao@centos7 ~]$touch a.txt
[xiao@centos7 ~]$nano a.txt
[xiao@centos7 ~]$ls -l a.txt
-rw-rw-r--. 1 xiao xiao 12 May 30 17:59 a.txt
[xiao@centos7 ~]$chmod u=,g=rw,o=rx a.txt
[xiao@centos7 ~]$cat a.txt
cat: a.txt: Permission denied
[xiao@centos7 ~]$chmod u=rwx a.txt
[xiao@centos7 ~]$cat a.txt
hello linux
[xiao@centos7 ~]$rm a.txt
对普通用户来说,把自己权限设为u=0,所有者没有任何权限,访问不了文件,但所有者有资格改所有者权限,亦可删除。
2.[root@centos7 ~]#groupadd g1
[root@centos7 ~]#useradd -g g1 xiaohong
[root@centos7 ~]#useradd -g g1 xiaoming
[root@centos7 ~]#useradd xiaodong
[root@centos7 ~]#touch ab.txt
[root@centos7 app]#cat>>ab.txt
hello linux
[root@centos7 app]#chown xiaoming:g1 ab.txt
[root@centos7 app]#chmod u=,g=r,o=rw ab.txt
[root@centos7 app]#su xiaoming
[xiaoming@centos7 app]$ cat ab.txt
cat: ab.txt: Permission denied
[xiaoming@centos7 app]$ exit
[root@centos7 app]#su xiaohong
[xiaohong@centos7 app]$ cat ab.txt
hello linux
[xiaohong@centos7 app]$ cat >>ab.txt
bash: ab.txt: Permission denied
[xiaohong@centos7 app]$ exit
[root@centos7 app]#su xiaodong
[xiaodong@centos7 app]$ cat ab.txt
hello linux
[xiaodong@centos7 app]$ cat >>ab.txt
abc
[xiaodong@centos7 app]$ cat ab.txt
hello linuxabc
用户访问一个文件,他的权限,执行过程为:先判断这个文件是否为所有者,如果是则匹配权限,后面则省略权限匹配,及使在别的组你对这个文件有更大的权限,如果不是所有者,判断是否为所属组,再然后是其他人。
匹配顺序为所有者--所属组---其他人,不是用户权限的累加。
3.
[root@centos7 app]#cp /usr/bin/cat /app
[root@centos7 app]#chmod a= /app/cat
[root@centos7 app]#/app/cat ab.txt
-bash: /app/cat: Permission denied
[root@centos7 app]#chmod g=x /app/cat
[root@centos7 app]#/app/cat ab.txt
hello linuxabc
对root用户来说rw权限不受影响,x权限受限制,如果u,g,o,只要一项有x权限,则root有x权限。
4.
chown [OPTION]... --reference=aFILE bFILE...
b文件参考a文件的权限来设。
[root@centos7 app]#ll
-r-xr-xr-x. 1 xiaoming g1 20 May 30 20:30 ab.txt
----------. 1 root root 26 May 30 20:47 ac.txt
[root@centos7 app]#chmod --reference ab.txt ac.txt
[root@centos7 app]#ll
-r-xr-xr-x. 1 xiaoming g1 20 May 30 20:30 ab.txt
-r-xr-xr-x. 1 root root 26 May 30 20:47 ac.txt
##三.目录的权限
目录的权限一般为```drwxr-xr-x. 2 root root 6 May 27 21:12 Videos```
但不排除特殊情况;例只有r或w或x权限时:
>[root@centos7 app]#mkdir test1
[root@centos7 app]#cd /app/test1
[root@centos7 test1]#touch a
[root@centos7 test1]#touch b
[root@centos7 app]#cp -rp /app/test1/ /app/test2
[root@centos7 app]#cp -rp /app/test1/ /app/test32
[root@centos7 app]#tree
├── test1
│ ├── a
│ └── b
├── test2
│ ├── a
│ └── b
├── test32
│ ├── a
│ └── b
[root@centos7 app]#chmod u=x,g=,o= test1
[root@centos7 app]#chmod u=w,g=,o= test2
[root@centos7 app]#chmod u=r,g=,o= test32
[root@centos7 app]#chown xiaoming: test1
[root@centos7 app]#chown xiaoming: test2
[root@centos7 app]#chown xiaoming: test32
[root@centos7 app]#su xiaoming
[xiaoming@centos7 app]$ ls /app/test32
ls: cannot access /app/test32/a: Permission denied
ls: cannot access /app/test32/b: Permission denied
a b
[xiaoming@centos7 app]$ cd /app/test32
bash: cd: /app/test32: Permission denied
[xiaoming@centos7 app]$ rm -rf /app/test32
rm: cannot remove ‘/app/test32/a’: Permission denied
rm: cannot remove ‘/app/test32/b’: Permission denied
[xiaoming@centos7 app]$ cd test1
[xiaoming@centos7 test1]$ ls
ls: cannot open directory .: Permission denied
[xiaoming@centos7 test1]$ cat a
只有读:只能查看目录文件列表,不能访问文件,也不能cd目录(查看,删除)
只有执行:可以cd,不能ls,可以访问目录中的文件。执行是基础权限
写权取:配合x权限才生效
[root@centos7 test1]#mkdir a
[root@centos7 test1]#mkdir b
[root@centos7 test1]#touch c
[root@centos7 test1]#chmod u=rw,g=rw,o=r a
[root@centos7 test1]#chmod u=rw,g=rw,o=r b
[root@centos7 test1]#chmod u=rw,g=rw,o=r c
[root@centos7 app]#ll /app/test1
-rw-rw-r--. 1 root root 0 May 30 21:26 a
-rw-rw-r--.. 1 root root 0 May 30 21:26 b
-rw-rw-r--. 1 root root 0 May 30 21:43 c
[root@centos7 app]#chmod -R a=rwX test1
[root@centos7 app]#ll /app/test1
-rwxrwxr-x. 1 root root 0 May 30 21:26 a
-rwxrwxr-x. 1 root root 0 May 30 21:26 b
-rw-rw-r--. 1 root root 0 May 30 21:43 c
[root@centos7 test1]#chmod u=rw,g=rw,o=rx c
[root@centos7 test1]#cd ..
[root@centos7 app]#chmod -R a=rwX test1
[root@centos7 app]#cd /app/test1
[root@centos7 test1]#ll
-rwxrwxrwx. 1 root root 0 May 30 21:26 a
-rwxrwxrwx. 1 root root 0 May 30 21:26 b
-rwxrwxrwx. 1 root root 0 May 30 21:43 c
X的作用(x权限特殊形式)
针对目录增加x权限
对文件
1 无执行的文件,不会增加x权限
2 任意三种人有执行权限,也会增加x权限