Linux基础(文件权限续篇)

文件的特殊权限

在复杂多变的生产环境中,单纯设置文件的rwx权限无法满足我们对安全和灵活性的需求,因此便有了SUID,SGID,SBIT的特殊权限位。这是一种对文件权限进行设置的特殊功能,可以与一般权限同时使用,以弥补一般权限不能实现的功能。

SUID

SUID是一种对二进制程序进行设置的特殊权限。可以让二进制程序的执行者临时拥有属主的权限(仅对拥有执行权限的二进制程序有效)。

例如:

所有用户都可以执行passwd命令来修改自己的用户密码,而用户密码保存在/etc/shadow文件中。仔细查看这个文件就会发现它默认权限是000,也就是说除了root管理员外,所有用户都没有查看或编辑这个文件的权限。但是,在使用passwd命令时如果加上SUID特殊权限位,就可让普通用户临时获得程序所有者的身份,把变更的密码信息写入到shadow文件中。

SGID

SGID主要实现如下两种功能:

①让执行者临时拥有属组的权限(对拥有执行权限的二进制程序进行设置);

②在某个目录中创建的文件自动继承该目录的用户组(只可以对目录进行设置)。

SGID的第一种功能是参考SUID而设计的,不同点在于执行程序的用户获取的不再是文件所有者的临时权限,而是获取到文件所属组的权限。举例来说,在早期的Linux系统中,/dev/kmem是一个字符设备文件,用于存储内核程序要访问的数据,权限为:

cr--r-----  1 root  system  2,  1 Feb 11  2017  kmem

除了root管理员或属于system组成员外,所有用户都没有读取该文件的权限。由于在平时我们需要查看系统的进程状态,为了能够获取到进程的状态信息,可在用于查看系统进程状态的ps命令文件上增加SGID特殊权限位,这样一来,由于ps命令被增加了SGID特殊权限位,所以当用户执行该命令时,也就临时获取到了system用户组的权限,从而可以顺利地读取设备文件了。

前面我们提到,每个文件都有其归属的所有者和所属组,当创建或传送一个文件后,这个文件就会自动归属于执行这个操作的用户(即该用户是文件的所有者),如果现在需要一个部门内设置共享目录,让部门内所有人员都能够读取目录中的内容,那么就可以创建部门共享目录后,在该目录上设置SGID特殊权限位。这样,部门内的任何人员在里面创建的任何文件都会归属于该目录的所属组,而不再是自己的基本用户组。此时,我们用到的就是SGID第二个功能,即在某个目录中创建的文件自动继承该目录的用户组(只可以对目录进行设置)

在使用上述命令设置好目录的777权限(确保普通用户可以向其中写入文件),并为该目录设置了SGID特殊权限位后,就可以切换一个普通用户,然后尝试在该目录中创建文件,并查看新创建的文件是否会继承新创建的文件所在的目录的所属组名称:

除了上面提到的SGID的这两个功能,我们再简单学习两个权限的命令:chmod和chown

chmod命令是一个非常有用的命令,能够用来设置文件或者目录的权限。

格式为:chomd 【参数】权限 文件或目录名称

如果要把一个文件的权限设置成其所有者可读可写可执行、所属组可读可写、其他人没有任何权限,则相应的字符法表示为rwxrw----,其对应的数字法表示为760.

通过前面的学习,可以体会到数字法的简捷度

除了设置文件或目录的权限外,还可以设置文件或目录的所有者和所属组,这里使用的命令为chown。

其格式为: chown 【参数】所有者:所属组 文件或目录名称

chmod和chown命令是用于修改文件和权限的最常用的命令

它们还有一个特别的共性,就是针对目录进行操作时需要加上大写参数 -R 来表示递归操作,即对目录内所有的文件进行整体操作。

SBIT

SBIT特殊权限位(也可以称之为特殊权限位之粘滞位)

SBIT特殊权限位可确保用户只能删除自己的文件,而不能删除其他用户的文件。

与前面所讲的SUID和SGID权限显示方法不同,当目录被设置SBIT特殊权限位后,文件的其他人权限部分的x执行权限就会被替换成t或者T,原本有x执行权限则会写成t,原本没有x执行权限则会被写成T

 其实,文件是否被删除并不取决于自身的权限,而是看其所在目录是否有写入权限。我们切换到另外一个普通用户,然后尝试删除这个其他人创建的文件就会发现,即便读、写、执行权限全开,但是由于SBIT特殊权限位的缘故,依然无法删除这个文件:

当然,要是也想对其他目录来设置SBIT特殊权限位,用chomd命令就可以了。对应的参数o+t代表设置SBIT粘滞位权限:

文件的隐藏属性

chattr命令

chattr命令用于设置文件的隐藏权限

格式位 chattr 【参数】文件

如果想要把某个隐藏功能添加到文件上,则需要再命令后面追加“+参数”,如果想要把某个隐藏功能移出文件,则要追加“-参数”。

chattr命令可供选择的隐藏权限参数非常丰富

参数作用
i无法对文件进行修改;若对目录设置了该参数,则仅能修改其中的子文件内容而不能新建删除文件
a仅允许补充内容,无法覆盖/删除内容
S文件内容在变更后立即同步到硬盘(sync)
s彻底从硬盘中删除,不可恢复(0填充原文件所在的硬盘区域)
A不再修改这个文件或目录的最后访问时间
b不再修改文件或目录的存取时间
D检查压缩文件中的错误
d使用dump目录备份时忽略本文件/目录
c默认将文件或目录进行压缩
u当删除该文件后依然保留其在硬盘中的数据,方便日后恢复
t让文件系统支持尾部合并(tail-merging)
x可以直接访问压缩文件中的内容

 我们来简单实验一下

我们先删除一个普通文件,在删除一个加权的普通文件,作为对比

lsattr命令

lsattr命令用于显示文件的隐藏权限

格式为 lsattr 【参数】 文件

在Linux系统中,文件的隐藏权限必须使用lsattr命令来查看,平时使用的ls之类的命令则看不出细节

文件访问控制列表

权限一般是针对某一类用户设置的。

如果希望对某个指定的用户进行单独的权限控制,那么就需要用到文件中的访问控制列表(ACL)了。通俗来讲,基于普通文件或目录文件设置ACL其实就是针对指定的用户或用户组设置文件或目录的操作权限。另外。如果针对某个目录设置ACL,则目录中的文件就会继承其ACL;若针对文件设置了ACL,则文件不再继承其所在目录的ACL。

我们来简单实验一下,看看效果

setfacl命令

setfacl命令用于管理文件的ACL规则

格式为 setfacl 【参数】文件名称

文件的ACL提供的是在所有者、所属组、其他人的读/写/执行的权限之外的特殊权限控制,使用setfacl命令可以针对单一用户或者用户组,单一文件或者目录来进行读/写执行权限的控制。其中,针对目录文件需要用到-R递归参数;针对普通文件则使用-m参数;如果想要删除某个文件的ACL则可以使用-b参数

我们来简单演示一下设置root目录上的权限

常用的ls命令是看不到ACL表的信息的,但却可以看到文件的权限最后一个点(.)变成加号(+),这就意味着该文件已经设置了ACL了

getfacl命令

getfacl命令用于显示文件上设置的ACL信息

格式为:getfacl 文件名称

Linux系统中的命令有一定的规律

设置ACL  setfacl

查看ACL  getfacl

su命令和sudo命令

su命令可以解决切换用户身份的需求

su - 用户名 之间的减号(-)代表完全切换到新的用户

即把环境变量信息也变更为新用户的相应信息,而不是保留原有的信息。

root管理员切换到普通用户是不需要密码的,而普通用户切换到root管理员则需要密码

sudo命令用于给普通用户提供额外的权限来完成原本root管理员才能完成的任务

格式: sudo 【参数】命令名称

参数作用
-h列出帮助信息
-l列出当前用户可执行的命令
-u 用户名或UID值以指定的用户身份执行命令
-k清空密码的有效时间,下次执行sudo时需要再次进行密码验证
-b在后台执行指定的命令
-p更改询问密码的提示语

sudo命令有以下几个功能:

①限制用户执行指定命令

②记录用户执行的每一条命令

③配置文件(/etc/sudoers)提供集中的用户管理、权限和主机等参数

④验证密码的后5分钟内(默认值)无须再让用户再次验证密码

如果担心直接修改配置文件会出现问题,我们可以使用sudo命令提供的visudo命令来配置用户权限。

这条命令在配置用户权限时将禁止多个用户同时修改sudoers配置文件,还可对配置文件内的参数进行语法检查,并发现参数错误时进行报错。

只有root管理员才可以使用visudo命令编辑sudo服务的配置文件

[root@DongFang ~]# visudo

 我们切换到普通用户,执行sudo -l 查看所有可执行命令(下面验证的是该普通用户的密码,而不是root管理员的密码)

 作为一个普通用户,是肯定看不到root用户的家目录的,但是,经过修改配置文件后,我们只需要在想执行的命令前面加上sudo命令就可以了

ALL参数不太合适,因此只能赋予普通用户具体的命令以满足工作的需求,这也受到了必要的约束

如果需要让某个用户只能使用root管理员的身份执行指定的命令,切记一定要给出该命令的绝对路径

否则系统识别不出来,我们可以先使用whereis命令找出命令所对应的保存路径,然后把配置文件的用户权限参数修改成相应的路径即可

 每次我们使用sudo前缀使用命令时。总是要验证普通用户的密码,接下来我们也可以解决这个繁琐的步骤

验证密码这个问题在Linux8上并未成功,上图解决频繁验证密码的方法是7版本,或许有不同把,另外,有大神发现了错误,请在评论区留言。学习学习!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/534315.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

Linux基础(存储结构和磁盘划分)

一切从“/”开始 在Linux系统中,目录、字符设备、块设备、套接字、打印机等都被抽象成了文件,一切皆为件 与windows操作系统不同,Linux系统内不存在C/D/E/F盘等,一切文件都是从根(/)目录开始的 Linux系统…

软件工程(需求分析)

需求分析 为了开发出真正满足用户需求的软件产品,首先必须知道用户的需求。对软件需求的深人理解是软件开发工作获得成功的前提条件,不论人们把设计和编码工作做得如何出色,不能真正满足用户需求的程序只会令用户失望.给开发者带来烦恼。 需求分析是软…

TensorFlow构建二维数据拟合模型(1)

知识图谱 TensorFlow运行机制 TensorFlow是基于计算图的深度学习编程模型 Tensor表示张量,其实质上是某种类型的多维数组 Flow表示基于数据流图的计算,实质上是张量在不同节点间的转化过程。 在TensorFlow中,计算图中的节点称为OP&…

Qt图形界面编程入门(标签与槽机制习题分享)

标签对象初始显示0&#xff0c;每次单击标签对象后&#xff0c;其显示内容就加1&#xff0c;依次变为1、2、3等。 #ifndef DIALOG_H #define DIALOG_H#include <QDialog> #include <QPushButton> //包含命令按钮类 #include "MyLabel.h"class Dialo…

js中执行到一个if就停止的代码_Node 中如何引入一个模块及其细节

在 node 环境中&#xff0c;有两个内置的全局变量无需引入即可直接使用&#xff0c;并且无处不见&#xff0c;它们构成了 nodejs 的模块体系: module 与 require。以下是一个简单的示例const fs require(fs)const add (x, y) > x ymodule.exports add虽然它们在平常使用…

二级MS Office公共基础知识错题本(1)

1&#xff0c;顺序程序具有顺序性、封闭性和可再现性的特点&#xff0c;不具备并发性 2&#xff0c;为了降低算法的空间复杂度&#xff0c;主要应减少输入数据所占的存储空间以及额外空间&#xff0c;通常采用压编存储技术。 3&#xff0c;树的总的结点数为树中所有结点的度数…

c++ file* 句柄泄漏_C++核心指南:P.8 勿泄漏任务资源

P.8: 勿泄漏任务资源原因随着时间的推移&#xff0c;即使是资源的缓慢增长也会耗尽这些资源的可用性&#xff0c;这对于长时间运行的程序特别重要&#xff0c;但也是负责任的编程行为的基本部分。糟糕的例子void f(char* name){ FILE* input fopen(name, "r"); // .…

数据规范化、实体-联系图、状态转换图、层次方框图、Warnier图、IPO图及验证软件需求

数据规范化 软件系统经常使用各种长期保存的信息&#xff0c;这些信息通常以一定方式组织并存储在数据库或文件中&#xff0c;为减少数据冗余&#xff0c;避免出现插入异常或删除异常&#xff0c;简化修改数据的过程,通常需要把数据结构规范化。 通常用“范式(normal forms)”…

Linux基础(iptables与firewalld防火墙)

iptables 在早期的Linux系统中&#xff0c;默认使用的是iptables防火墙管理服务来配置防火墙。尽管新型的fierwalld防火墙管理服务已经被投入使用多年&#xff0c;但是大量的企业在生产环境中依然出于各种原因而继续使用iptables。 策略与规则链 防火墙会从上至下的顺序来读…

虚拟跳线软件干什么用的_疯狂刷单!用违法软件生成虚拟手机号,“骑手”半年“刷单”牟利60余万,百米内竟有万笔订单 | 申晨间...

来源&#xff1a;新闻晨报 记者&#xff1a;吴艺璇借助违法软件生成虚拟手机号码&#xff0c;利用平台审核漏洞大量注册用户&#xff0c;大量“刷单”骗取平台的返现和购物补贴&#xff0c;半年内疯狂刷1.8万余单&#xff0c;累计牟利60余万元。近日&#xff0c;在市公安局刑侦…

ygo游戏王卡组_ACG大科普(7)游戏王

大家是否在小时候接触过一种卡片类似这种的 这就是今天的主角游戏王。 背景 1996年&#xff0c;《游戏王》漫画开始在集英社《周刊少年Jump》连载。 1998年&#xff0c;Bandai推出以《游戏王》原作中登场的集换卡牌游戏“M&W”为题材的集换卡牌。 采用Bandai的卡片自动贩卖…

Qt图形界面编程入门(基本窗口及控件)

基本窗口类QWidget QWidget是所有窗体部件的基类&#xff0c;例如对话框类&#xff0c;主窗体类&#xff0c;以及其他诸如按钮&#xff0c;编辑框&#xff0c;标签等等都是由QWidget派生得到&#xff0c;QWidget拥有的方法往往都可以在其他子类中使用。 窗体的几何尺寸分为包…

背景se_盘点那些RPG手游中主角的背景故事,越悲情越强大

RPG游戏一直以代入感超强的游戏方式来吸引玩家&#xff0c;用超越现实的艺术手段把玩家带入到虚拟的游戏世界&#xff0c;让玩家担任不同的社会角色来去经历不同的虚拟故事&#xff0c;体验多种人生经历&#xff0c;想要扮演任何角色都是有可能的。当然在RPG游戏中也有好坏之分…

TensorFlow构建二维数据拟合模型(2)

变量的定义和使用 变量的定义与初始化 TensorFlow中&#xff0c;变量是一种特殊的张量&#xff0c;其值可以是一个任意类型的形状的张量。 与其他张量不同&#xff0c;变量存在于单个回话调用的上下文之外&#xff0c;主要作用是保存和更新模型中的参数。 声明变量通常使用…

c++用牛顿法开多次根_望远镜的历史之三:大神出世,改变望远镜历史的竟然是牛顿...

上次我们说到格里高利望远镜有点画蛇添足&#xff0c;那么格里高利望远镜添了什么呢&#xff1f;格里高利望远镜格里高利望远镜观测的图像都是正立的&#xff0c;这就意味着要采用多个凹面反射镜&#xff0c;而当时凹面反射镜磨制不易&#xff0c;无论是多大的科学家都要亲自动…

如何把照片正面变成反面_各国签证照片要求大全 (含模板)

对于不是很熟悉签证的小伙伴来说&#xff0c;面对全球那么多国家的签证而且每张签证照片的规格不同为此我们为您整理了各国签证照片要求大全 东南亚国家的签证照要求基本相同&#xff0c;就以泰国为例&#xff0c;告诉大家签证照的注意事项。“泰国&#xff0c;新加坡&#xff…

TensorFlow实验(3)

模型的保存与恢复 我们来简单实现一下模型的保存与恢复 训练完TensorFlow模型后&#xff0c;可将其保存为文件&#xff0c;以便于预测新数据时直接加载使用。 TensorFlow模型主要包含网络的设计或者图以及已经训练好的网络参数的值。 TensorFlow提供的tf.train.Saver()函数…

ad域 禁用账号_IST-AD域信息同步平台来袭

IST的AD域信息同步系统是能帮助域管理员简化日常的一些管理工作&#xff0c;可以让AD域系统与其他的业务系统进行用户信息同步&#xff0c;实现自动的新旧用户帐户信息的同步修改、组织架构同步调整&#xff0c;并有简单易操作的配置页面系统与操作日志查询等。通过ODBC、Web S…

Linux基础(firewalld防火墙配置管理工具的图形用户界面)

firewall-config的界面如图所示 我们先将当前区域中请求http服务的流量设置为允许&#xff0c;但仅限当前生效。具体配置如图 尝试添加一条防火墙策略规则&#xff0c;使其放行访问8080-8088端口&#xff08;TCP协议&#xff09;的流量&#xff0c;并将其设置为永久生效&#x…

Linux基础(使用ssh服务管理远程主机1)

配置网络参数 使用nmtui命令配置网络参数&#xff0c;以及通过nmcli命令查看网络信息并管理网络会话服务。 执行nmtui命令运行网络配置工具 进入主界面 选中编辑连接并按下回车键 选中要编辑的网卡名称&#xff0c;然后按下Edit&#xff08;编辑&#xff09;按钮 把网络IPv4 …