- ubuntu12.04环境下使用kvm ioctl接口实现最简单的虚拟机
- Ubuntu 通过无线网络安装Ubuntu Server启动系统后连接无线网络的方法
- 在Ubuntu上搭建网桥的方法
- ubuntu 虚拟机上网方式及相关配置详解
CFSDN坚持开源创造价值,我们致力于搭建一个资源共享平台,让每一个IT人在这里找到属于你的精彩世界.
这篇CFSDN的博客文章CentOS系统特殊权限SUID SGID STICKY讲解由作者收集整理,如果你对这篇文章有兴趣,记得点赞哟.
1.什么是特殊权限?
我们知道权限有r,w,x。其实除了这三个,还有特殊权限。比如:
[root@localhost~]#ls-l/usr/bin/passwd 。
-rwsr-xr-x1rootroot22960Jul172006/usr/bin/passwd 。
可以发现权限位,有个s。特殊权限有如下3种:
SUID 。
SGID 。
STICKY 。
2.关于suid 。
我们知道linux有一个进程安全模型的概念,比如Tom执行passwd来进行修改密码:
第一,注意到passwd的权限为:
[hadoop@localhost ~]$ ls -l `which passwd` 。
-rwsr-xr-x 1 root root 22960 Jul 17 2006 /usr/bin/passwd 。
第二,注意到Tom不是root用户,也不属于root组.
我们先不考虑什么特殊权限s。很显然,此时Tom只能以other(r-x)来运行passwd。Tom可以发起一个进程,这个进程是passwd,想修改自己的密码.
第三,用户Tom执行完passwd修改密码,其实就是保存至/etc/shadow中,下面我们看看/etc/shadow文件的权限情况.
[hadoop@localhost ~]$ ls -l /etc/shadow 。
-r-------- 1 root root 2713 Jun 13 16:34 /etc/shadow 。
[hadoop@localhost ~]$ 。
那个属于Tom的修改密码的进程应该要去修改/etc/shadow文件,但是根据上面的/etc/shadow的权限,除了root用户外,谁都不可以修改的!也就是说,根据进程安全模型,普通用户根本无法修改密码!但事实上,是可以修改的。原因就在于那个特殊权限s.
也就是说,suid表示运行某程序时,相应进程的属主是程序文件自身的属主,而不是启动者。也就是说普通用户去执行passwd修改密码,其实是发起了一个进程,这个进程的属主是root用户,那么很显然就可以修改shadow这个影子文件了.
3.关于sgid 。
根据suid的理解,可知sgid表示运行某程序时,相应进程的属组是程序文件自身的属组,而不是启动者的基本组。可以举例分析:
第一:root用户创建了一个项目目录 。
[root@localhost /]# 。
[root@localhost /]# ls -ld /project/cma 。
drwxrwxr-x 2 root develop 4096 Jun 14 22:14 /project/cma 。
第二:项目组成员java01,java02,...均属于develop组(他们的附加组),也就是说他们对/project/cma具有rwx权限.
[java02@localhost cma]$ ls -l 。
total 8 。
-rw-rw-r-- 1 java01 java01 0 Jun 14 22:24 01.java 。
-rw-rw-r-- 1 java02 java02 0 Jun 14 22:25 02.java 。
上面看到他们可以在/project/cma中创建文件,根据以前的理论:【谁创建的文件,文件的属主就是谁,属组就是他的基本组】,上面的没有问题。但是,我们希望这些项目组成员之间可以相互编辑其他人的文件,该如何做呢?
第三:由于项目组成员java02,并不属于java01的私有组,显然java02只对01.java具有r--权限,不可以编辑。此时我们可以使用sgid,来改变默认的这种行为~ 。
[root@localhost cma]# pwd 。
/project/cma 。
[root@localhost cma]# chmod -R g+s /project/cma 。
[root@localhost cma]# ls -ld 。
drwxrwsr-x 2 root develop 4096 Jun 14 22:25 . 。
[root@localhost cma]# 。
注意了,出现了特殊权限位s,但是有时候可能会显示S。【如果是s说明这个权限位上以前是具有x权限的】 。
第四:利用sgid后,以后我们的项目组成员便可以在此目录下编辑其他成员的文件了.
[java02@localhost cma]$ ls -l 。
total 16 。
-rw-rwSr-- 1 java01 java01 0 Jun 14 22:24 01.java 。
-rw-rw-r-- 1 java01 develop 0 Jun 14 22:33 01.txt 。
-rw-rwSr-- 1 java02 java02 0 Jun 14 22:25 02.java 。
-rw-rw-r-- 1 java02 develop 0 Jun 14 22:33 02.txt 。
[java02@localhost cma]$ 。
也就是说利用sgid可以帮我们达到这样的目的:
在目录下创建的文件的属组不在是用户的基本组,而是目录的属组.
4.关于sticky 。
此时此刻,我们的项目组成员已经可以相互编辑/project/cma下面的文件了,但是有个要求:我们希望用户只能删除自己的文件,而不可以删除别人的文件。这就要使用sticky了.
[root@localhost cma]# chmod -R o+t /project/cma 。
[java01@localhost cma]$ id 。
uid=5016(java01) gid=5016(java01) groups=5016(java01),5018(develop) context=root:system_r:unconfined_t:SystemLow-SystemHigh 。
[java01@localhost cma]$ rm 02.txt 。
rm: cannot remove `02.txt': Operation not permitted 。
5.串联 。
还记得umask吗,umask其实就是一个XYZW,四位数,其中X表示的就是suid/sgid/striky.
chmod xyzw file,其实同理.
000 nothing 。
001 only striky 。
010 only sgid 。
100 only suid 。
...... 。
最后此篇关于CentOS系统特殊权限SUID SGID STICKY讲解的文章就讲到这里了,如果你想了解更多关于CentOS系统特殊权限SUID SGID STICKY讲解的内容请搜索CFSDN的文章或继续浏览相关文章,希望大家以后支持我的博客! 。
我正在使用 CentOS 6 机器。我尝试遵循以下指南: How to open port in centOS http://ask.xmodulo.com/open-port-firewall-ce
我正在为 CentOS 7 创建一个脚本,但我正在努力根据变量连接值,这与我工作的其他发行版不同。例如,在下面的代码中: DIR_BKP=/tmp/_bkp_local PATH_LOG=$DIR_B
我从以下位置下载了文件: https://github.com/christiangalsterer/httpbeat/releaseshttpbeat-4.0.0-x86_64.rpm 并尝试通过以
我想在我的 Centos 8 中使用命令 mkimage。 我尝试使用命令 dnf install uboot-tools 以 root 身份安装 uboot-tools 但这不可用。 谁能指导我如何
我有一个 Centos 服务器。 结果 $ cat /etc/centos-release CentOS Linux release 7.9.2009 (Core) 和 $ yum list i
我在CentOs7 上安装Gitlab 后遇到了麻烦。我第一次被重定向到管理员密码创建页面,在输入管理员用户密码后,服务器发送错误。 422 The change you requested was
因此,我正在尝试从我的一个运行 centos 的邮箱中发送电子邮件,并且我已经安装并打开了 sendmail,但是发送一封电子邮件实际上需要几分钟时间。电子邮件不是应该几乎是即时的吗? 这是我的/et
我正在尝试在虚拟 Centos 7 发行版上构建一些 C++ 库。由于我还没有发现这个操作系统看不到/usr/local/lib 或/usr/local/lib64 的原因,这些库安装在其他 linu
我正在尝试通过以下网址在我的服务器(centos 7.1 minimal)上安装 imagemagick: imagemagick installation steps 在第 1 步得到这个错误: L
当我尝试安装 rpmforge(我需要安装 phpmyadmin)时出现此错误,将不胜感激任何帮助! [root@plasticarmy ~]# yum http://pkgs.repoforge.o
我需要安装一个centos 5 repo 来在centos 7 机器上下载用于el5 的dhclient,以便在centos 5 机器上传输dhclient rpms。有可能的 ? 谢谢! 最佳答案
我正在开发一个可以在 CentOS 8 和 CentOS 7 系统上运行的程序。在其中,我使用 gethostbyname 将 DNS 名称解析为 IP 地址。 为了尝试使代码可移植,我正在使用以下命
我想在 CentOS7(或 CentOS6)上安装 cgal 模块。它需要 pgrouting 才能使用 PostGIS。 我一直用 CGAL Manual Installation 安装 cgal
我在 CentOS 平台上使用 R/RStudio。我需要查看二进制日志文件(/var/log/messages)是否包含有关图形设备绘图问题的更多信息,但我无法从 RStudio 中读取它。 我在社
我正在尝试在我的 CentOS 上本地安装 Kubernetes。我正在关注这个博客 http://containertutorials.com/get_started_kubernetes/inde
来自 http://kubernetes.io/docs/getting-started-guides/kubeadm/ CentOS Linux 版本 7.2.1511(核心) (1/4) 在主机上
使用tcpdump监控网络流量时,发现很多dns反向查询记录。 像这样: A_IP.55276 > DNS_IP.domain: 9247+ PTR?查询 IP.in-addr.arpa。 (45)
我正在尝试在 CentOS 6.7 和 ./configure --prefix=$HOME/local 上安装 mutt运行良好,但在 make install步骤,我在下面遇到了这个错误,我不知道
如何在 CENTOS 中删除所有以 *0x0.jpg 结尾的文件?我需要删除嵌套在文件夹和子文件夹中的多个文件 最佳答案 我假设你有一个外壳 - 试试 find /mydirectory -type
我需要检索安装在我的 Linux (Centos) 主机上的所有软件包的软件包版本。 rpm -qa 给了我所有已安装软件包的列表。 我知道 rpm -qi "package name"给了我包信息。
我是一名优秀的程序员,十分优秀!