【配置与管理文件系统】


一、理解文件

在Linux中,一切皆文件,所有设备、目录和文件都被视为文件,并可以通过文件操作进行访问和管理。

文件是操作系统用来存储信息的基本结构,是一组信息的集合。文件通过文件名来唯一地标识。Linux中的文件名称最长可允许255个字符,这些字符可用AZ、09、.、_、-等符号来表示,并且Linux文件名区分大小写。与其他操作系统相比,Linux没有“扩展名”的概念,也就是说文件的名称和该文件的种类并没有直接的关联。

使用ls -l查看文件的详细信息,一共有7列。
在这里插入图片描述

  1. 第1组表示文件类型及权限
    每一行的第一个字符一般用来区分文件的类型。
  • -:普通文件
  • d:目录
  • l: 表示该文件是一个符号链接文件,实际上它指向另一个文件
  • b:块设备文件 c:字符设备文件
    是操作系统与设备提供连接的一种文件。在Linux系统中将设备作为文件来处理,操作设备就像是操作普通文件一 样。每一个设备对应一个设备文件,存放在 /dev 目录中。
  • p:管道文件,主要用于在进程间传递数据
  • s:套接字文件,主要用于不同计算机间网络通信

第2~10个字符表示文件的权限:

  • 2~4:文件所有者User的读、写、执行权限;
  • 5~7:文件所属组用户Group的读、写、执行权限;
  • 8~10:其他用户Others的读、写、执行权限。

特别注意,针对文件和目录的读、写、执行具有不同的含义。

文件目录
r具有读取文件内容权限具有浏览目录的权限
w具有新增、修改文件内容的权限具有删除、移动目录内文件的权限
x具有执行文件的权限具有进入目录的权限
-不具有该项权限不具有该项权限
  1. 第2组表示有多少文件名连接到此节点(inode)
    每个文件都会将其权限与属性记录到文件系统的i-node中,这个属性记录的就是有多少不同的文件名连接到相同的一个i-node。例如,“2”指该文件的硬链接数(或者说有2个文件名指向这个i-node)

  2. 第3组表示该文件的所属用户

  3. 第4组表示该文件的所属组群

  4. 第5组表示该文件的容量大小,单位默认为bytes

  5. 第6组表示该文件的创建日期或最近的修改日期

  6. 第7组表示该文件的名称

二、管理Linux文件权限

1. chmod命令修改文件、目录的权限信息
chmod [-R] 权限 文件或目录
-R:对目录内的全部内容应用同样的操作
只有文件、目录的所属用户或root用户才可以修改。

表示权限类型的方法:数字表示法和文字表示法。

  • 数字表示法
    将读(r)、写(w)和执行(x)分别用数字4、2、1来表示,没有对应位权限则为0,然后把所授予的权限相加而成。
[root@RHEL7-1 ~]# touch /etc/file
[root@RHEL7-1 ~]# chmod 664 /etc/file
[root@RHEL7-1 ~]# ll /etc/file
-rw-rw-r--. 1 root root 0 5月 20 23:15 /etc/file
  • 文字表示法
    使用4种字母表示不同的用户:
    (1)u:user,所有者
    (2)g:group,所属组群
    (3)o:others,其他用户
    (4)a:all,以上3种用户
    使用3种字符的组合表示设置操作权限:
    (1)r:read,可读
    (2)w:write,可写
    (3)x:execute,可执行
    操作符号:
    (1)+:添加某种权限
    (2)-:减去某种权限
    (3)=:赋予给定权限并取消原来的权限
[root@RHEL7-1 ~]# chmod a+w  .bashrc
[root@RHEL7-1 ~]# ls    -al    .bashrc
-rwxrwxrwx 1 root root 395 Jul 4 11:45.bashrc

2. chown命令修改文件、目录的所属用户和所属组群
chown [-R] [用户]:[用户组] 文件或目录
-R:对目录内全部内容应用同样的操作
普通用户无法修改所属为其他用户或组,该命令只适用于root用户执行。

示例:
chown root hello.txt
将hello.txt所属用户修改为root
chown :root hello.txt
将hello.txt所属用户组修改为root
chown root:test hello.txt
将hello.txt所属用户修改为root,用户组修改为test
chown -R root test
将文件夹test的所属用户修改为root并对文件夹内全部内容应用同样规则

3. chgrp命令修改文件、目录的所属组
chgrp [-R] 用户组 文件或目录

[root@RHEL7-1 ~]# chgrp root test.txt
[root@RHEL7-1 ~]#ls –al
-rwxrwxrwx 1 user1 root 551 5月 23 12:02 test.txt

三、默认权限umask

默认权限:用户在建立文件或目录时的默认权限值。
查看默认权限的方式:
(1)输入umask,可以看到数字形态的权限设定;
(2)加入-S选项,以符号类型的方式显示权限。
设置默认权限:
umask 权限

预设权限:对于文件为666(一般文件的建立是不具备执行的权限),目录为777。

创建文件或目录时的权限计算:预设权限-默认权限。
建立文件时:(-rw-rw-rw-) -(-----w–w-)=-rw-r–r–。
建立目录时:(drwxrwxrwx) -(d----w–w-)=drwxr-xr-x。

umask为003,所以去掉的权限为- - - - - - - -wx,因此相关权限如下。
文件:(-rw-rw-rw-) -(--------wx)=-rw-rw-r–。
目录:(drwxrwxrwx) -(d-------wx)=drwxrwxr–。

四、文件隐藏属性

1. chattr命令
改变文件属性
chattr [-RV][-v<版本编号>][+/-/=<属性>][文件或目录…]
-R:递归处理,将指定目录下的所有文件及子目录一并处理。
-V:显示指令执行过程。
a:系统只允许在这个文件之后追加数据,不允许任何进程覆盖或截断这个文件。如果目录具有这个属性,系统将只允许在这个目录下建立和修改文件,而不允许删除任何文件。
i:不得任意改动文件或目录。
-v<版本编号>:设置文件或目录版本。
+<属性>:开启文件或目录的该项属性。
-<属性>:关闭文件或目录的该项属性。
=<属性>:指定文件或目录的该项属性。

例:请尝试在/tmp目录下建立文件,加入i参数,并尝试删除。

[root@RHEL7-1 ~]# cd    /tmp
[root@RHEL7-1 tmp]# touch attrtest     <==建立一个空文件
[root@RHEL7-1 tmp]# chattr  +i attrtest <==给予i属性
[root@RHEL7-1 tmp]# rm attrtest         <==尝试删除,查看结果
rm:remove write-protected regular empty file `attrtest'?y
rm:cannot remove `attrtest':Operation not permitted <==操作不允许
# 连root也没有办法将这个文件删除!需要解除设定

2. lsattr命令
显示文件隐藏属性
lsattr [-adR] 文件或目录
-a:将隐藏文件的属性也显示出来。
-d:如果是目录,仅列出目录本身的属性而非目录内的文件名。
-R:连同子目录的数据也一并列出来。

五、特殊权限

1.SetUID

对于/etc/shadow,普通用户是没有权限修改的,但是当普通用户去使用passwd设置口令的时候,该文件中的相应字段会改变,这是因为当用户执行passwd命令(二进制文件为/usr/bin/passwd,它具有SUID)时,临时拥有了SetUID权限,临时获得了root身份,以root身份去执行,是可以读取和修改/etc/shadow文件的。

SetUID的基本原理:

  • Suid通过S字符标识,存在于用户权限位的x权限对应位置
  • 如果某文件,用户权限位本身有x权限,给该文件设置suid权限时,则以小写s标识,否则就是大写的S字符。
  • 给文件设置s权限对应的数字表示法是4,八进制数下可以用4000 Suid同样也用chmod设置权限,可以以字符法、数字法两种标识。
  • SUID特殊权限仅适用于可执行文件(二进制命令,比如/user/bin下提供的命令,/usr/bin/ls /usr/bin/rm)
  • 只要用户对SUID的文件有执行权限,那么当用户执行此文件时,会以文件属主的身份去执行此文件
  • SetUID权限只在该程序执行过程中有效,也就是说身份改变只在程序执行过程中有效。

设定SetUID的方法

  • chmod 4755 文件名
  • chmod u+s 文件名

取消SetUID的方法

  • chmod 755 文件名
  • chmod u-s 文件名

2.SetGID

对于二进制命令来说,sgid的功能和suid基本一样,只不过suid是设置文件属主的x权限,sgid是设置属组的x权限

SetGID对文件的作用:

  • 只有可执行的二进制程序才能设置SGID权限
  • 命令执行者要对该程序拥有x(执行)权限
  • 命令执行在执行程序的时候,组身份升级为该程序文件的属组
  • SetGID权限同样只在该程序执行过程中有效,也就是说组身份改变只在程序执行过程中有效

SetGID对目录的作用:

  • 为某个目录设置sgid后,在该目录中创建的文件,都以目录的属组权限为准,而不属于创建该文件的用户权限。
  • 实现多个用户,可以共享一个目录的作用。
  • sgid主要用于目录

设定SetGID的方法

  • chmod 2755 文件名
  • chmod g+s 文件名

取消SetGID的方法

  • chmod 755 文件名
  • chmod g-s 文件名

例:创建一个共享目录/home/admins,要求该目录属组是adminuser, adminuser组内成员对该目录的权限是可读可写可执行,其他用户均无任何权限。进入/home/admins创建的文件,自动继承adminuser组的权限。
在这里插入图片描述

3.Sticky BIT

SBIT粘着位或粘滞位(Stickybit)作用

  • 粘着位目前只对目录有效
  • 出现在其他用户权限位x
  • 普通用户对该目录拥有w和x权限,即普通用户可以在此目录拥有写入权限
  • 如果没有粘着位,因为普通用户拥有w权限,所以可以删除此目录下所有文件,包括其他用户建立的文件(目录777权限)。一但赋予了粘着位,除了root可以删除所有文件,普通用户就算拥有w权限,也只能删除自己建立的文件,但是不能删除其他用户建立的文件。

设定粘着位的方法

  • chmod 1755 文件名
  • chmod o+t 文件名

取消粘着位的方法

  • chmod 755 文件名
  • chmod o-t 文件名

例:root用户创建/home/sbit,权限为777,zhangsan用户在/home/sbit下创建文件zhangsan.txt,lisi用户在/home/sbit下创建文件lisi.txt。分别在zhangsan用户下删除lisi.txt,在lisi用户下删除zhangsan.txt,观察结果?如果都删除了,如何避免删除其他用户的文件。
在这里插入图片描述

三种特殊权限总结:

类别SUIDSGIDSBIT
字符表示SST
出现位置用户权限位x用户组权限位x其他用户权限位x
基本权限位xsst
数字表示法421
八进制表示法400020001000
生效对象用户位用户组其他用户

利用chmod命令修改文件的特殊权限

# 同时具备SUID和SGID
[root@RHEL7-1 ~]# chmod 6664 /etc/file
[root@RHEL7-1 ~]# ll   /etc/file
-rwSrwSr--  1 root root 22 11-27 11:42 file
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值