关于Linux权限的问题


以下是对Linux权限的一系列问题,通过问题来看看自己是否掌握了Linux权限的相关概念。
let’s go!

文件权限用多少个位来表示?

一共是12个bit。一共4组,每组用3个bit来表示。比如“4755”对应的二进制为100 111 101 101。每一部分表示的含义如下:

100:表示suid权限、sgid权限和粘滞位sticky权限

111:表示user权限,r/w/x

101:表示group权限,r/w/x

101:表示other权限,r/w/x

以上是十二位权限表示方法。

但我们常常用chmod指令修改文件权限的时候采用十位权限表示,比如下图中zine文件的权限为drwxrwxr-x

image-20210429200238709

drwxrwxr-x表示什么含义?

后九位为rwxrwxr-x,这和十二位权限表示法的后九位的含义相同,也是表示三个属组(usergroupother)的权限。其中具体字符的含义如下:

  • -表示没有权限
  • r表示读权限,read
  • w表示写权限,write
  • x表示执行权限,execute

第一位表示文件的类型,d表示为文件夹,更多的类型表示如下:

  • d表示文件夹,directory
  • -表示常规文件,regular file
  • s表示套接字文件,socket
  • p表示管道文件,pipe,或命名管道文件,named pipe
  • l表示文件或文件夹的符号链接,symbol link
  • b表示该文件是面向块的设备文件,block-oriented device file
  • c表示该文件是面向字符的设备文件,character-oriented device file

文件权限为0644,group可以向它写内容么?

不可以。因为0644的二进制表示为000 110 100 100,它的含义是:

000

110:user可以读写

100:group可以读

100:all可以读

任何人可以读这个文件,但是只有user可以对这个文件进行写操作。

操作系统是否关心你的用户名username?

操作系统并不care你的username,内核会根据user ID/gourp ID进行权限检查。用户名和组名的存在是为了让我们更方便识别和使用。

文件权限设为0666,这意味着所有人都可以进行读操作?

不一定!

读取位r设置为1,通常可以读取它。 但是, 如果该文件的任何父目录的执行位x都设置为0,则将阻止你读取该目录下的任何文件。

image-20210429211929443

你可以在Linux上尝试下,需要注意的是应该在普通用户模式下。

文件权限设置为0000,这表示没有人能进行读操作么?

不是的!

root用户仍然可以对权限为0000的文件进行读写。

image-20210429212342086

每个进程是否都有user id(UID))?

是的!

user ID与密码文件/etc/passwd中的每个用户登录名相关联。当你以用户名seaworth登录,几乎你启动的所有进程的UID都是用户seaworth的UID。

每个进程都有一个real user ID(UID),一个effective user ID(EUID),一个real user ID(GID)和一个effective group ID(EGID)。 用户组ID与进程组ID不同。

如何获取这些ID,可以通过id username得到。在程序中用函数的方法获取可以参考UNIX Processes

一个进程可以有多个group id(GID)?

可以!

进程有一个主GID和一个补充GID列表。文件权限检查将检查进程的所有GID是否与文件的所有者相匹配。

SUID有什么用呢?

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

SUID是一种对二进制程序进行设置的特殊权限,可以让二进制程序的执行者临时拥有属主的权限(仅对拥有执行权限的二进制程序有效)。例如,所有用户都可以执行passwd命令来修改自己的用户密码,而用户密码保存在/etc/shadow文件中。仔细查看这个文件就会发现它的默认权限是000,也就是说除了root管理员以外,所有用户都没有查看或编辑该文件的权限。但是,在使用passwd命令时如果加上SUID特殊权限位,就可让普通用户临时获得程序所有者的身份,把变更的密码信息写入到shadow文件中。这很像我们在古装剧中见到的手持尚方宝剑的钦差大臣,他手持的尚方宝剑代表的是皇上的权威,因此可以惩戒贪官,但这并不意味着他永久成为了皇上。因此这只是一种有条件的、临时的特殊权限授权方法。

查看passwd命令属性时发现所有者的权限由rwx变成了rws,其中x改变成s就意味着该文件被赋予了SUID权限。如果原本的权限是rw-呢?如果原先权限位上没有x执行权限,那么被赋予特殊权限后将变成大写的S。

——摘自《LinuxProbe》

image-20210430104227835

普通进程是否可以修改UID?

不可以!

你必须具有sudo用户特权才能更改你的UID。

为什么sudo可以让您以root用户身份运行命令?

它设置了setuid位!

sudo始终以root身份运行,如果/etc/sudoers表示允许你以root身份启动,则它将以root身份启动程序。

image-20210430105045224

参考文章:

Linux权限详解(chmod、600、644、666、700、711、755、777、4755、6755、7755

questions about unix permissions

UNIX Processes

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值