Linux的用户在登录(login)之后,就带有一个用户身份(user ID, UID)和一个组身份(group ID, GID)。在Linux文件管理背景知识中,我们又看到,每个文件又有九位的权限说明,用来指明该文件允许哪些用户执行哪些操作(读、写或者执行)。

(参考Linux文件管理背景知识)
一般来说,Linux的用户信息保存在/etc/passwd中,组信息保存在/etc/group中,文件的每一行代表一个用户/组。早期的Linux将密码以名码的形式保存在/etc/passwd中,而现在则多以暗码(也就是加密之后的形式)的形式保存在/etc/shadow中。将密码存储在/etc/shadow中提高了密码的安全性,因为/etc/passwd允许所有人查看,而/etc/shadow只允许root用户查看。
进程权限
但是,在Linux中,用户的指令是在进程的范围内进行的。当我们向对某个文件进行操作的时候,我们需要在进程中运行一个程序,在进程中对文件打开,并进行读、写或者执行的操作。因此,我们需要将用户的权限传递给进程,以便进程真正去执行操作。例如我们有一个文件a.txt, 文件中为一个字符串:
Hello world!
我以用户Vamei的身份登录,并在shell中运行如下命令:
$cat a.txt
整个运行过程以及文件读取如下:
我们可以看到,整个过程中我们会有两个进程,一个是shell本身(2256),一个是shell复制自身,再运行/bin/cat (9913)。图中的fork, exec, PID可参看Linux进程基础。第二个进程总共对文件系统进行了两次操作,一次是执行(x)文件/bin/cat,另外一次是读取(r)文件a.txt。使用$ls -l 查看这两个文件的权限:
$ls -l /bin/cat -rwxr-xr-x 1 root root 46764 Apr 1 2012 /bin/cat $ls -l a.txt -rw-rw-r-- 1 Vamei Vamei 14 Oct 7 09:14 a.txt
从上面可以看到(参考Linux文件管理背景知识),/bin/cat让所有用户都享有执行的权利,而Vamei作为a.txt的拥有者,对a.txt享有读取的权利。
让我们进入更多的细节 (The devil is in the details)。在进行这两次操作的时候,尽管用户Vamei拥有相应的权限,但我们发现,真正做工作的是进程9913。我们要让这个进程得到相应的权限。实际上,每个进程会维护有如下6个ID:
真实身份:real UID, real GID
有效身份: effective UID, effective GID
存储身份:saved UID, saved GID
其中,真实身份是我们登录使用的身份,有效身份是当该进程真正去操作文件时所检查的身份,存储身份较为特殊,我们等一下再深入。当进程fork的时候,真实身份和有效身份都会复制给子进程。大部分情况下,真实身份和有效身份都相同。当Linux完成开机启动之后,init进程会执行一个login的子进程。我们将用户名和密码传递给login子进程。login在查询了/etc/passwd和/etc/shadow,并确定了其合法性之后,运行(利用exec)一个shell进程,shell进程真实身份被设置成为该用户的身份。由于此后fork此shell进程的子进程都会继承真实身份,所以该真实身份会持续下去,直到我们登出并以其他身份再次登录(当我们使用su成为root的时候,实际上就是以root身份再次登录,此后真实身份成为root)。
最小权限原则
每个进程为什么不简单地只维护真实身份,却选择费尽麻烦地去维护有效身份和存储身份呢?这牵涉到Linux的“最小特权”(least priviledge)的原则。Linux通常希望进程只拥有足够完成其工作的特权,而不希望赋予更多的特权给它。从设计上来说,最简单的是赋予每个进程以super user的特权,这样进程就可以想做什么做什么。然而,这对于系统来说是一个巨大的安全漏洞,特别是在多用户环境下,如果每个用户都享有无限制的特权,就很容易破坏其他用户的文件或者系统本身。“最小特权”就是收缩进程所享有的特权,以防进程滥用特权。
然而,进程的不同阶段可能需要不同的特权。比如一个进程最开始的有效身份是真实身份,但运行到中间的时候,需要以其他的用户身份读入某些配置文件,然后再进行其他的操作。为了防止其他的用户身份被滥用,我们需要在操作之前,让进程的有效身份变更回来成为真实身份。这样,进程需要在两个身份之间变化。
存储身份就是真实身份之外的另一个身份。当我们将一个程序文件执行成为进程的时候,该程序文件的拥有者(owner)和拥有组(owner group)可以被,存储成为进程的存储身份。在随后进程的运行过程中,进程就将可以选择将真实身份或者存储身份复制到有效身份,以拥有真实身份或者存储身份的权限。并不是所有的程序文件在执行的过程都设置存储身份的。需要这么做的程序文件会在其九位(bit)权限的执行位的x改为s。这时,这一位(bit)叫做set UID bit或者set GID bit。
$ls -l /usr/bin/uuidd -rwsr-sr-x 1 libuuid libuuid 17976 Mar 30 2012 /usr/sbin/uuidd
当我以root(UID), root(GID)的真实身份运行这个程序的时候,由于拥有者(owner)有s位的设定,所以saved UID被设置成为libuuid,saved GID被设置成为libuuid。这样,uuidd的进程就可以在两个身份之间切换。
我们通常使用chmod来修改set-UID bit和set-GID bit:
$chmod 4700 file
我们看到,这里的chmod后面不再只是三位的数字。最前面一位用于处理set-UID bit/set-GID bit,它可以被设置成为4/2/1以及或者上面数字的和。4表示为set UID bit, 2表示为set GID bit,1表示为sticky bit (暂时不介绍)。必须要先有x位的基础上,才能设置s位。
作为一个Linux用户来说,我们并不需要特别关心上面的机制。但是,当我们去编写一个Linux应用程序的时候,就要注意在程序中实现以上切换(有必要的前提下),以便让我们的程序符合"最小权限"的原则,不给系统留下可能的安全隐患。给你的程序过度的权限的话,就像是吃下去下面的汉堡:
容易让人吃伤的汉堡: 过度的“权限”
总结
real/effective/saved UID/GID
saved UID/GID bit
“最小权限”原则
以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持。
# Linux
# 用户
# 最小权限
# Linux用户配置sudo权限(visudo)的方法
# Linux 怎么实现添加FTP用户并设置权限的方法
# 详解Linux系统中设置SFTP服务用户目录权限的方法
# linux中如何添加用户并赋予root权限详解
# Linux给普通用户加超级用户权限的方法
# Linux下SFTP用户权限设置条件及实现命令
# 当我们
# 的是
# 是在
# 文件管理
# 让我们
# 其他的
# 两次
# 可以看到
# 我以
# 就可以
# 过程中
# 有一个
# 是一个
# 这一
# 让人
# 会有
# 基础上
# 做什么
# 又有
# 会在
相关文章:
c# 在高并发下使用反射发射(Reflection.Emit)的性能
制作假网页,招聘网的薪资待遇,会有靠谱的吗?一面试又各种折扣?
如何选择可靠的免备案建站服务器?
如何在七牛云存储上搭建网站并设置自定义域名?
宁波自助建站系统如何快速打造专业企业网站?
济南网站建设制作公司,室内设计网站一般都有哪些功能?
公司网站制作费用多少,为公司建立一个网站需要哪些费用?
*服务器网站为何频现安全漏洞?
制作宣传网站的软件,小红书可以宣传网站吗?
如何通过VPS搭建网站快速盈利?
网站制作专业公司有哪些,如何制作一个企业网站,建设网站的基本步骤有哪些?
寿县云建站:智能SEO优化与多行业模板快速上线指南
再谈Python中的字符串与字符编码(推荐)
官网建站费用明细查询_企业建站套餐价格及收费标准指南
网站海报制作教学视频教程,有什么免费的高清可商用图片网站,用于海报设计?
教学论文网站制作软件有哪些,写论文用什么软件
?
如何快速完成中国万网建站详细流程?
免费制作统计图的网站有哪些,如何看待现如今年轻人买房难的情况?
武汉网站制作费用多少,在武汉武昌,建面100平方左右的房子,想装暖气片,费用大概是多少啊?
如何在景安云服务器上绑定域名并配置虚拟主机?
已有域名和空间如何搭建网站?
电脑免费海报制作网站推荐,招聘海报哪个网站多?
微课制作网站有哪些,微课网怎么进?
学生网站制作软件,一个12岁的学生写小说,应该去什么样的网站?
定制建站流程步骤详解:一站式方案设计与开发指南
电商网站制作价格怎么算,网上拍卖流程以及规则?
Swift中switch语句区间和元组模式匹配
如何选择CMS系统实现快速建站与SEO优化?
建站主机功能解析:服务器选择与快速搭建指南
洛阳网站制作公司有哪些,洛阳的招聘网站都有哪些?
如何将凡科建站内容保存为本地文件?
黑客如何通过漏洞一步步攻陷网站服务器?
表情包在线制作网站免费,表情包怎么弄?
建站与域名管理如何高效结合?
c++如何打印函数堆栈信息_c++ backtrace函数与符号名解析【方法】
小视频制作网站有哪些,有什么看国内小视频的网站,求推荐?
网站规划与制作是什么,电子商务网站系统规划的内容及步骤是什么?
建站之星IIS配置教程:代码生成技巧与站点搭建指南
建站主机与服务器功能差异如何区分?
邀请函制作网站有哪些,有没有做年会邀请函的网站啊?在线制作,模板很多的那种?
Android滚轮选择时间控件使用详解
潍坊网站制作公司有哪些,潍坊哪家招聘网站好?
公司门户网站制作流程,华为官网怎么做?
西安制作网站公司有哪些,西安货运司机用的最多的app或者网站是什么?
制作营销网站公司,淘特是干什么用的?
制作网站的软件免费下载,免费制作app哪个平台好?
招贴海报怎么做,什么是海报招贴?
儿童网站界面设计图片,中国少年儿童教育网站-怎么去注册?
如何有效防御Web建站篡改攻击?
如何在云主机快速搭建网站站点?
*请认真填写需求信息,我们会在24小时内与您取得联系。