1、文件的普通属性与权限
在Linux系统中将文件可存取访问的身份分为3个类别,分别为:所有者(owner)、所属组(group)、其他人(other),并其三种身份各有read、write、execute等权限。
当执行 ls -l 命令时,系统输出格式如下:
-rw-r--r-- 1 root root 42304 Sep 4 18:26 install.log
第一列:表示这个文件的类型与权限
第一个字符表示文件的类型,如下:
[d]表示目录
[-]表示普通文件
[l]表示链接文件
[b]表示块设备,如光驱,硬盘,U盘等设备文件
[c]表示字符设备,如打印机,终端等设备文件
后面九个字符分别表示owner,group,others对该文件或目录的访问权限
第二列:表示有多少个文件名链接到此节点 (i-node)
第三列:表示该文件或目录的所有者账号
第四列:表示文件或目录的所属组
第五列:表示文件或目录的容量大小
第六列:表示文件或目录的创建日期货最近修改日期
第七列:表示文件或目录名
![](https://i-blog.csdnimg.cn/blog_migrate/de10c507972c5ac34eb1312a96ce43a1.jpeg)
例子:a目录下有一个文件a.txt
若a具有drwxr-xr-x权限,a.txt具有-rwxrwxrwx 则同组用户及其他用户无法删除该文件。
若a具有drwxrwxrwx权限,a.txt具有-rw-r--r--,则这个文件任何用户都可以删除。
文件或目录在创建时,会有一个默认的权限,使用umask命令,可以查看默认权限,例如umask命令输出
为0022,第一个字符为特殊权限位,后三位为默认权限的补码022,则系统的默认权限为777-022=755,对于文件,系统会默认去掉执行权限则为644.
2、文件的特殊属性
![](https://i-blog.csdnimg.cn/blog_migrate/1d8c6542a8f1d75679371c9ef9cea555.jpeg)
为了方便大家看明白上图,我举个简单的例子说明一下:
有个问题:大家都知道linux中将用户的密码信息已加密的形式存放在/etc/shadow文件中,该文件的默认权限为
400,普通用户对该文件是没有读写权限的,但为何普通用户可以修改自己的密码呢?
如果要解决这个问题就需要跟文件的特殊属性有关联了,修改密码的命令为passwd,该命令的执行权限位
-rwsr-xr-x,其中s为特殊权限,表示setuid权限,当一个可执行程序具有SetUID权限时,其他用户再执行该命令时就可以程序所有者的身份执行该命令,既以root的身份执行passwd命令,所以就可以修改密码了。
授予SetUID权限的方式为:
chmod u+s /bin/touch 或 chmod 4755 /bin/touch
假如给touch命令赋予了setuid权限,任何用户执行该命令时都会以root的身份执行该命令,如果切换到普通用户
执行touch命令创建一个文件,会发现该文件的所有者为root。除非必要情况特殊属性还是要慎用的。
3、文件的隐藏属性
![](https://i-blog.csdnimg.cn/blog_migrate/274bce371fd5275ec48d30c909f25826.jpeg)
隐藏属性平时用的比较少,简单说下使用chattr命令可以设置文件的隐藏属性,使用lsattr可以查看文件的隐藏属性。
执行chattr +i a.txt 命令,在删除隐藏属性之前,a.txt这个文件就无法删除和修改了。
在Linux系统中将文件可存取访问的身份分为3个类别,分别为:所有者(owner)、所属组(group)、其他人(other),并其三种身份各有read、write、execute等权限。
当执行 ls -l 命令时,系统输出格式如下:
-rw-r--r-- 1 root root 42304 Sep 4 18:26 install.log
第一列:表示这个文件的类型与权限
第一个字符表示文件的类型,如下:
[d]表示目录
[-]表示普通文件
[l]表示链接文件
[b]表示块设备,如光驱,硬盘,U盘等设备文件
[c]表示字符设备,如打印机,终端等设备文件
后面九个字符分别表示owner,group,others对该文件或目录的访问权限
第二列:表示有多少个文件名链接到此节点 (i-node)
第三列:表示该文件或目录的所有者账号
第四列:表示文件或目录的所属组
第五列:表示文件或目录的容量大小
第六列:表示文件或目录的创建日期货最近修改日期
第七列:表示文件或目录名
![](https://i-blog.csdnimg.cn/blog_migrate/85003a77259a5cb430e15c27dd0e795d.jpeg)
![](https://i-blog.csdnimg.cn/blog_migrate/de10c507972c5ac34eb1312a96ce43a1.jpeg)
例子:a目录下有一个文件a.txt
若a具有drwxr-xr-x权限,a.txt具有-rwxrwxrwx 则同组用户及其他用户无法删除该文件。
若a具有drwxrwxrwx权限,a.txt具有-rw-r--r--,则这个文件任何用户都可以删除。
文件或目录在创建时,会有一个默认的权限,使用umask命令,可以查看默认权限,例如umask命令输出
为0022,第一个字符为特殊权限位,后三位为默认权限的补码022,则系统的默认权限为777-022=755,对于文件,系统会默认去掉执行权限则为644.
2、文件的特殊属性
![](https://i-blog.csdnimg.cn/blog_migrate/1d8c6542a8f1d75679371c9ef9cea555.jpeg)
为了方便大家看明白上图,我举个简单的例子说明一下:
有个问题:大家都知道linux中将用户的密码信息已加密的形式存放在/etc/shadow文件中,该文件的默认权限为
400,普通用户对该文件是没有读写权限的,但为何普通用户可以修改自己的密码呢?
如果要解决这个问题就需要跟文件的特殊属性有关联了,修改密码的命令为passwd,该命令的执行权限位
-rwsr-xr-x,其中s为特殊权限,表示setuid权限,当一个可执行程序具有SetUID权限时,其他用户再执行该命令时就可以程序所有者的身份执行该命令,既以root的身份执行passwd命令,所以就可以修改密码了。
授予SetUID权限的方式为:
chmod u+s /bin/touch 或 chmod 4755 /bin/touch
假如给touch命令赋予了setuid权限,任何用户执行该命令时都会以root的身份执行该命令,如果切换到普通用户
执行touch命令创建一个文件,会发现该文件的所有者为root。除非必要情况特殊属性还是要慎用的。
3、文件的隐藏属性
![](https://i-blog.csdnimg.cn/blog_migrate/274bce371fd5275ec48d30c909f25826.jpeg)
隐藏属性平时用的比较少,简单说下使用chattr命令可以设置文件的隐藏属性,使用lsattr可以查看文件的隐藏属性。
执行chattr +i a.txt 命令,在删除隐藏属性之前,a.txt这个文件就无法删除和修改了。