当我们使用 ls -l 命令查看详细文件内容时,可以看到查询出的内容如下:
1 | root@CHJ-20190520VPS:/usr/lib# ls -l |
一共查询出七列内容,分别表示:
文件属性(占10个字符空间)、拥有的文件数量、文件的创建者、所属的group、文件大小、建档日期、文件名
文件属性
Linux的文件基本上分为三个属性:可读(r),可写(w),可执行(x)
但是这里有十个格子可以填(具体程序实现时,实际上是十个bit位)
文件类型
第一个小格是特殊表示格,表示目录或连结文件等等
d 表示目录,这个是在创建下来文件的类型就固定了下来,不可以人为进行更改
l 表示链接文件,类似于快捷方式
- 表示这是普通文件
b 块特殊文件,其实是指的是设备,比如我们插入一个移动硬盘,插入一个硬盘之后,Linux系统就会把他当成一个特出文件块文件来表示
c 字符特殊文件,就是终端
f 命名管道
s 套接字文件
文件权限表示方法
字符权限表示方法:
r 读
w 写
x 执行
数字权限的表示方法(8进制数字表示):
r=4
w=2
x=1
其余剩下的格子就以每3格为一个单位,因为Linux是多用户多任务系统,所以一个文件可能同时被许多人使用,所以我们一定要设好每个文件的权限,其文件的权限位置排列顺序是(以-rwxr-xr-x为例):
rwx(Owner)r-x(Group)r-x(Other)
这个例子表示的权限是:使用者自己可读,可写,可执行;同一组的用户可读,不可写,可执行;其它用户可读,不可写,可执行。
另外,有一些程序属性的执行部分不是X,而是S,这表示执行这个程序的使用者,临时可以有和拥有者一样权力的身份来执行该程序。一般出现在系统管理之类的指令或程序,让使用者执行时,拥有root身份。
文件权限的修改
修改权限命令
chown命令
修改属主或数组命令,使用方法:
修改属主:chown 用户名称 文件名称
修改属组:chown :用户组名称 文件名称
修改文件、目录权限。Linux/Unix 的文件调用权限分为三级 : 文件拥有者、群组、其他。利用 chmod 可以藉以控制文件如何被他人所调用
首先我们新创建一个目录,查看root用户新创建目录的默认权限,如下:
1 | root@CHJ-20190520VPS:/tmp# ls -ld testdir/ |
表示文件的属主是root用户,root用户可以读写删除等,所属用户组不能删除,其他其他用户不能删除
这里我们需要了解,Linux权限限制是非root用户的,这里既是我们将文件或目录的权限给root修改了,但是root用户还是不受限制的
所以为了方便测试我们不要用root用户来操作,命令使用示例如下:
1 | # 修改属主 |
可以看到文件的属主和属组已经改变
chgrp命令
修改属组命令,使用方法:chgrp 用户组名称 文件名称
使用示例:
1 | root@CHJ-20190520VPS:/tmp# chgrp root testdir |
可以看到文件的属组已经被修改回为root分组
创建文件的默认权限
我们创建一个新的文件,默认的权限如下所示:
1 | root@CHJ-20190520VPS:/tmp/testdir# ls -l |
那它是怎么来的呢?其实创建新的文件默认的权限是数字表示法:666,表示属主属组其他都是拥有读写权限,但它会根据数字权限表示减去一个uumask,umask表示如下:
1 | root@CHJ-20190520VPS:/tmp/testdir# umask |
所以这就是我们创建文件的默认权限的由来,是使用 666 减去 umask 得到的默认权限
chmod命令
chmod是Linux/Unix中修改文件或者目录权限的命令,通过修改权限可以让指定的人对文件可读、可写、可运行,极大地保证了数据的安全性
使用方法:chmod [修改内容 修改符号 权限] 文件
修改字符权限
参数详解
修改内容
u 修改文件属主的权限
g 修改文件属组的权限
r 修改其他以外的权限
a 以上三者都修改
具体权限修改
+ 增加权限
- 取消权限
= 直接设定权限
此三条具体设置的权限就是我们之前了解的:r、w、x
使用示例:
1 | root@CHJ-20190520VPS:/tmp/testdir# ls -l |
修改数字权限
修改方法:chmod [数字] 文件
注意:以上参数中数字为3位数
参数详解
三位数字第一位代表属主权限,第二位代表属组权限,第三位代表其他权限
数字则分别用 1、2、4 来分别表示 执行、写、读
使用示例:
1 | root@CHJ-20190520VPS:/tmp/testdir# ls -l |
特殊权限
SUID
用于二进制可执行文件,执行命令时取得文件的属主权限,例如 /usr/bin/password
1 | wangjia3@CHJ-20190520VPS:/tmp/testdir$ ls -l /usr/bin/passwd |
如上示例中:属主权限是 ws,s 之前是我们没有解释过的,它表示的是不管是root用户还是普通用户,它在执行这条命令时,它都会以文件的属主的这种身份来进行操作
它的作用就是,我们有些文件用户是没有任何权限的,例如保存用户账户密码的文件,/etc/shadow:
1 | wangjia3@CHJ-20190520VPS:/tmp/testdir$ ls -l /etc/shadow |
我们当前登录的用户是没有此文件的任何权限的,而root用户有此文件的权限,那我们普通用户为什么能修改密码呢,就是我们在修改密码例如passwd文件的时候,它能以root用户的身份来执行,这样就避免了我们需要主动去切换用户的修改密码的问题。
SGID
用于目录,在该目录下创建新的文件和目录,权限自动更改为该目录的数组,一般是我们在文件共享的时候,一般会用到SET GID
SBIT
用于目录,该目录下新建的文件和目录,仅root和自己可以删除,如/tmp
1 | wangjia3@CHJ-20190520VPS:/$ ls -ld /tmp |
注意在其他位有一个t,这样就可以防止自己创建的文件被其他的普通用户修改或删除
设置特殊权限
使用的也是 chmod命令,用法与上述修改权限用法一致,只不过多了由三位数变为了四位数,第一位为特殊权限的表示数字
特殊权限数字表示:
- 4 SET UID
1 | root@CHJ-20190520VPS:/tmp/testdir# ls -l |
- 1 SET BIT
1 | root@CHJ-20190520VPS:/tmp/testdir# chmod 1644 demoFile |
- 2 SET GID
1 | root@CHJ-20190520VPS:/tmp/testdir# chmod 2644 demoFile |
注意特殊权限一般不要去自己随便指定,使用系统默认就行