3. Linux基础权限
3.1 查看权限
位数 | 解释 |
第1位 | 文件类型,d表示目录,-表示普通文件,l表示软链接文件 |
第2-4位 | 所属用户权限,用u表示 |
第5-7位 | 所属组权限,用g表示 |
第8-10位 | 不在root组之内的其他用户权限,用o表示 |
第2-10位 | 表示所有权限,用a表示 |
取值 | 解释 |
r | r表示可读 read |
w | w表示可写 write |
x | x表示可执行 executable |
- | 表示无权限 |
3.2 默认权限
刚刚创建出来的文件,默认权限为
刚刚创建出来的目录,默认权限为
3.3 chmod
修改文件权限
命令 | 解释 |
chmod u=rwx 1.txt | 覆盖1.txt的用户权限为rwx |
chmod g=rx 1.txt | 覆盖1.txt的组权限为r-x |
chmod u-x 1.txt | 撤销1.txt的用户权限中的x |
chmod a+w | 为1.txt的所有权限追加w |
chmod ug+rw 1.txt | 为1.txt的用户权限和组权限追加rw权限 |
利用数字模式修改文件权限,r代表数字4,w代表数字2,x代表数字1
命令 | 解释 |
chmod 444 1.txt | 设置1.txt的所有权限为 -r--r--r-- |
chmod 222 1.txt | 设置1.txt的所有权限为 --w--w--w- |
chmod 111 1.txt | 设置1.txt的所有权限为 ---x--x--x |
chmod 551 1.txt | 设置1.txt的所有权限为 -r-xr-x--x |
chmod 755 1.txt | 设置1.txt的所有权限为 -rwxr-xr-x |
chmod 644 1.txt | 设置1.txt的所有权限为 -rw-r--r-- |
修改目录权限
命令 | 解释 |
chmod 755 kk | 设置kk文件夹的权限为 drwxr-xr-x |
chmod -R 755 kk | 设置kk文件夹的权限为 drwxr-xr-x,同时递归修改子文件 |
3.4 权限对目录的作用
可读、可写、可执行对于文件和目录而言是有不同作用的,我们先学习权限对目录的作用。
创建账户:zs/123
useradd zs
passwd 123
使用zs账户登录
使用root用户创建一个目录,注意不能把目录创建在root家目录下,因为超级管理员可以进入普通用户家,而普通用户无法进入超级管理员的家!
以下让超级管理员进入zs的家目录,创建一个kk文件夹,并在kk文件夹下创建一个abc文件,可以发现kk文件夹的所属组和所属用户都是root
通过root,撤销其他用户对kk文件夹的所有权限
此时zs对于kk目录而言就是其他用户,使用zs用户测试进入kk目录,发现无法进入
使用zs用户查看kk文件夹本身的信息是可以的,但是无法查看kk里面的子文件的信息
使用zs用户在kk文件夹中创建foo文件,发现权限不够
结论:用户对于一个目录,没有任何权限的情况下:
操作 | 权限 |
查看目录本身的信息 | 允许 |
进入目录 | 不允许 |
查看目录中子文件的信息 | 不允许 |
在目录中创建文件和删除文件 | 不允许 |
通过root账户,为kk文件夹的其他用户分配只读权限
使用zs查看kk目录本身的信息,发现可以
使用zs进入目录,发现无法进入
使用zs查看kk中子文件的信息,发现只能查看子文件的名字,其他详细信息看不到
使用zs在kk中创建文件,发现无法创建
结论:用户对于一个目录,只有只读权限的情况下:
操作 | 权限 |
查看目录本身的信息 | 允许 |
进入目录 | 不允许 |
查看目录中子文件的信息 | 只能看到子文件的名字,看不到详细信息 |
在目录中创建文件和删除文件 | 不允许 |
通过root账户,为kk文件夹的其他用户分配读写权限
使用zs查看kk目录本身的信息,发现可以
使用zs进入kk目录,发现不可以
使用zs查看kk目录中中子文件的信息,发现只能看到子文件的名字
使用zs在kk目录中创建文件,发现不可以
结论:用户对于一个目录,有读写权限的情况下:
操作 | 权限 |
查看目录本身的信息 | 允许 |
进入目录 | 不允许 |
查看目录中子文件的信息 | 只能看到子文件的名字,看不到详细信息 |
在目录中创建文件和删除文件 | 不允许 |
所以用户对于一个目录而言,拥有读权限和拥有读写权限,效果一样!
通过root账户,为kk文件夹的其他用户分配读写执行权限
使用zs查看目录本身的信息,可以
使用zs进入kk目录,可以
使用zs查看kk目录中子文件的信息,可以
使用zs在kk目录中创建文件,删除文件,可以
结论:用户对于一个目录,有读写执行权限的情况下:
操作 | 权限 |
查看目录本身的信息 | 允许 |
进入目录 | 允许 |
查看目录中子文件的信息 | 允许 |
在目录中创建文件和删除文件 | 允许 |
通过root账户,为kk文件夹的其他用户分配读、执行权限(注意没有写权限)
使用zs用户查看kk目录本身的信息,可以
使用zs用户进入kk目录,可以
使用zs用户查看kk目录下的子文件信息,可以
使用zs用户在目录中创建和删除文件,不行
结论:用户对于一个目录,有读、执行权限权限的情况下:
操作 | 权限 |
查看目录本身的信息 | 允许 |
进入目录 | 允许 |
查看目录中子文件的信息 | 允许 |
在目录中创建文件和删除文件 | 不允许 |
所以,对于目录而言,执行权就是能进入目录的权限,写权限就是能在目录中创建和删除文件的权限,而在用户对目录只有写权限,却没有执行权的时候,用户仍然无法在目录中创建和删除文件!总之,一个用户想能够在目录中创建和删除文件,该用户必须同时拥有对于该目录的w和x权限。
通过root账户,为kk文件夹的其他用户分配写、执行权限(注意没有读权限)
使用zs用户查看kk目录本身的信息,可以
使用zs用户进入kk目录,可以
使用zs用户查看目录中子文件的信息,不允许
使用zs用户在kk目录在目录中创建文件和删除文件,可以,但是就算文件是zs自己创建的,zs也看不了kk中的自己创建的文件
结论:用户对于一个目录,有写、执行权限的情况下:
操作 | 权限 |
查看目录本身的信息 | 允许 |
进入目录 | 允许 |
查看目录中子文件的信息 | 不允许 |
在目录中创建文件和删除文件 | 允许 |
此处应该有一个报表。大家自己动手画一下。
3.5 权限对文件的作用
上面已经测试完了权限对于kk目录的影响,下面要测试权限对于kk下abc文件的影响,所以此时应该把kk其他用户的权限全部放开:
因为root账户对于kk/abc文件有读写权限,所以我们可以使用root账户,在kk目录下的abc文件中写入一个echo命令,再使用root用户读取这个文件的内容:
因为root账户对于kk/abc文件有执行权限,所以root账户可以执行这个文件,如下:
使用root账户,撤销其他用户对于kk/abc文件的所有权限
使用zs用户读取kk/abc文件的内容,不允许
使用zs用户编辑kk/abc文件的内容,不允许
使用zs用户执行kk/abc文件,不允许
结论:用户对于一个文件,没有任何权限
操作 | 权限 |
读取文件内容 | 不允许 |
编辑文件内容 | 不允许 |
执行文件 | 不允许 |
删除文件 | 由文件所在目录决定,如果用户对于目录有wx权限,则用户就能对文件进行删除 |
通过root账户,为kk/abc文件的其他用户分配读权限
使用zs用户读取kk/abc文件内容,可以
使用zs用户编辑kk/abc文件内容, 不可以
使用zs用户执行文件,不可以
结论:用户对于一个文件,有读权限
操作 | 权限 |
读取文件内容 | 允许 |
编辑文件内容 | 不允许 |
执行文件 | 不允许 |
删除文件 | 由文件所在目录决定,如果用户对于目录有wx权限,则用户就能对文件进行删除 |
通过root账户,为kk/abc文件的其他用户分配读写权限
使用zs用户读取kk/abc文件内容,可以
使用zs用户编辑kk/abc文件内容, 可以
使用zs用户执行文件,不可以
结论:用户对于一个文件,有读写权限
操作 | 权限 |
读取文件内容 | 允许 |
编辑文件内容 | 允许 |
执行文件 | 不允许 |
删除文件 | 由文件所在目录决定,如果用户对于目录有wx权限,则用户就能对文件进行删除 |
通过root账户,为kk/abc文件的其他用户分配读写执行权限
使用zs用户读取kk/abc文件内容,可以
使用zs用户编辑kk/abc文件内容, 可以
使用zs用户执行kk/abc文件,可以
结论:用户对于一个文件,有读写执行权限
操作 | 权限 |
读取文件内容 | 允许 |
编辑文件内容 | 允许 |
执行文件 | 允许 |
删除文件 | 由文件所在目录决定,如果用户对于目录有wx权限,则用户就能对文件进行删除 |
通过root账户,为kk/abc的其他用户分配写、执行权限(注意没有读权限)
使用zs账户读取kk/abc的内容,不可以
使用zs账户编辑kk/abc文件,不可以
使用zs账户执行kk/abc文件,不可以
结论:用户对于一个文件,有写、执行权限(注意没有读权限)
操作 | 权限 |
读取文件内容 | 不允许 |
编辑文件内容 | 不允许 |
执行文件 | 不允许 |
删除文件 | 由文件所在目录决定,如果用户对于目录有wx权限,则用户就能对文件进行删除 |
注意,如果用户对于一个文件没有读权限,则什么操作都做不了,不能写,也不能执行!
通过root账户,为kk/abc的其他用户分配读、执行权限(注意没有写权限)
使用zs账户读取kk/abc的内容,可以
使用zs账户编辑kk/abc的内容,不可以
使用zs账户执行kk/abc文件,可以
结论:用户对于一个文件,有读、执行权限(注意没有写权限)
操作 | 权限 |
读取文件内容 | 允许 |
编辑文件内容 | 不允许 |
执行文件 | 允许 |
删除文件 | 由文件所在目录决定,如果用户对于目录有wx权限,则用户就能对文件进行删除 |
总结:
权限 | 目录 | 文件 |
r | 读取目录中子文件的名字 | 读取文件的内容 |
w | 在搭配x的情况下,可以在目录中创建和删除文件在没有x的情况下,不能在目录中创建和删除文件 | 可以编辑文件的内容(必须搭配r) |
x | 可以进行目录 | 可以执行文件(必须搭配r) |
3.6 chown
修改文件所有者和组
命令 | 解释 |
chown zs:zs kk/abc | 把1.txt的所有者,和所属组都改为zs |
3.7 umask(了解)
3.7.1 默认权限
一个文件创建好之后的默认权限为 644,一个目录创建好之后的默认权限为755
3.7.2 查看umask
umask的取值为:0022,其中第一列是文件的特殊权限,我们不学,我们把焦点放在后3位:022
3.7.3 文件的默认权限
☐ 刚刚创建好的文件,默认是不能被执行的,必须手动赋予执行权限
☐ 所以文件默认权限最大为666
☐ 默认权限需要换算成字母再相减(实际上是逻辑与)
☐ 建立文件之后的实际的默认权限,为666减去umask值
例如,文件默认最大权限为666 umask值为022
例如,文件默认最大权限为666 umask值为033
注意,虽然这里说的是减法,但是这里的减法是不会借位的
3.7.4 修改umask的值
命令 | 解释 |
umask 044 | 临时修改umask的值,linux重启之后,umask会恢复为022 |
3.7.4 创建文件夹
当我们创建文件时,文件的默认权限是666减去umask的值,而当我们创建目录时,目录的默认权限是使用777来减去umask的值的
3.7.5 永久修改umask
vi /etc/profile
注意:管理员用户的$UID是小于等于199的,普通用户的$UID是大于199的