Linux系统文件权限体系详解
改变权限属性的命令chmod
chmod是来改变文件或者目录权限的命令,但只有文件的属主和超级用户root才有这样的权限,通过chmod来改变文件或目录的权限有俩种方式,一种是通过权限字母和操作符表达式的方法,来设置权限,另一种是使用数字方法来设置权限。
chmod [数字组合] 文件名
r | read | 4 |
w | write | 2 |
x | execute | 1 |
- | 0 |
举例子:创建一个ett.txt文件,并查看文件的权限。
此文件的权限属主位代表的数字为4+2+0=6;属组位代表的数字为4+0+0=4,其他用户组代表的是4+0+0=4,所以数字组合为644
例一,用chmod命令的数字方法来设置权限,如下:(次数字方法最为常用)
例子二,用touch创建一个.sh文件,测试属主的权限,属组和其他用户组的权限不在一一测试。。。
权限字母和操作符表达式
标识 | u(user) | g(group) | o(others) | a(all) | + | - | = |
含义 | 用户 | 组 | 其他 | 所有用户 | 增减权限 | 减少权限 | 重新分配权限 |
小结:针对目录跟文件权限对比说明
文件 | 目录 | |
r(read)读取权限 | 表示具有读取阅读文件内容的权限 | 表示具有浏览目录的权限(注意:与进入目录的权限不同) |
w(write)写入权限 | 表示具有新增,修改文件内容的权限(注意:删除和移动文件和文件本身无关,看上级目录) | 表示具有新增,删除,移动目录的内文件权限(需要有x权限配合,要不没有r 有x ls -l 查看文件会显示文件名 ,但是文件属性都是一堆????) |
x(execute)(执行权限) | 表示具有执行文件权限(普通用户同时还需要r权限,root用户不用r也能执行,文件本身也能执行才可以哦) | 表示具有进入目录的权限 |
既然我们可以更改权限了,那么有没有想过我们创建的文件或目录默认权限呢?umask可以分配默认权限,文件的默认安全权限为644,目录为755(Linux)
在linux下我们查看的方式有两种,一种可以直接输入umask,就可以看到数字形态的权限设置分数,一种则是加-S(Symbolic)参数,就能以符号类型的方式来显示出权限了,如下:
Umask的设置很简单,只需要在umask命令后加想要拿掉的权限数字就行:
Linux下的etc/profile和etc/bashrc中都有默认的umask设置,我们来看一下:
1 if [ SUID -gt 99] && [ " 'id -gn' " =" 'id =un' "];then 2 umask 002 3 else 4 umask 022 5 fi
这个是在etc/profile中的一部分内容,可以看到根据不同的uid设置了不同的umask,其实在etc/bashrc文件中也有基本相同的这部分代码,我们可以在这两个文件中设置umask,那么二者有什么区别呢?如果实在etc/profile中修改,只有在重新登录用户的时候才会发生改变,而在etc/bashrc中修改的话要是切换目录就会发生改变,因为profile是在登录用户的时候调用的。一般不常永久改umask,只是临时更改用,没啥较大用途的命令(个人观点)
Linux系统是如何计算出文件或目录权限的呢?
默认最大权限 | umask值 | 用户创建文件的权限 | ||
文件 | 创建文件umask为偶数的时候 | 666[-rw-rw-rw-] | 022(全偶数)[-----w--w-] | 644 [-rw-r--r--](说明:偶数加减法 默认的最大权限 —umask 值=用户创建文件的权限) |
创建文件umask为奇数的时候 (umask部分或者全部都为奇数) |
666[-rw-rw-rw-] | 123(部分位为奇数) [--x--w--wx] | 644(以为umask的值123中又个都是奇数,因此在计算543的基础上加上101,即奇数对应的文件数字权限位分别加1即可) | |
目录 | umask为奇数偶数都一样 | 777[-rwxrwxrwx] | 022[-----w--w-] | 755[-rwxr-xr-x](说明:默认最大权限—umask值=用户创建目录的权限) |
可以看到上面在计算创建的文件和目录的默认权限的时候,我是这样认为的:666-022=644;777-022=755.,这样数字相减正好是用户创建的目录或文件的权限,(说明:如果是文件的话umask为奇数的话,需要在做减法后,奇数对应的文件数字权限上加1,目录则不需要,博主亲测望采纳!)更多计算方法请参考Linux默认权限的计算公式
如何设置UID、GID、STICK_BIT
SUID:置于 u 的 x 位,原位置有执行权限,就置为 s,没有了为 S .
chmod u+s xxx # 设置setuid权限
chmod 4551 file // 权限: r-sr-x—x
SGID:置于 g 的 x 位,原位置有执行权限,就置为 s,没有了为 S .
chmod g+s xxx # 设置setgid权限
chmod 2551 file // 权限: r-xr-s--x
STICKY:粘滞位,置于 o 的 x 位,原位置有执行权限,就置为 t ,否则为T .
chmod o+t xxx # 设置stick bit权限,针对目录
chmod 1551 file // 权限: r-xr-x--t
说明:suid修改的是执行命令,而不是处理的目标文件,且仅对二进制文件或程序有效,二进制命令或程序需要有可执行权限,
loading....