关于LINUX中的权限位S(设置用户ID)(有效用户ID)(实际用户ID)

getuid() 实际用户ID为 执行程序的实际用户ID
geteuid() 有效用户ID与设置用户ID有关,及权限中的S位

如果权限为rws 那么s位代表其他用户执行程序时改变为主用户权限。不安全
如:
  8 #include<stdio.h>
  9 #include<stdlib.h>
 10 #include <unistd.h>
 11 #include <sys/types.h>
 12 #include <sys/stat.h>
 13 #include <fcntl.h>
 14 
 15 int main(void)
 16 {
 17 
 18     int fd;
 19 
 20     fd = open("abc", O_CREAT | O_RDWR | O_EXCL, 0777);
 21     if(fd==-1)
 22     {
 23         perror("error:");
 24     }
 25     printf("uid %ld,euid %ld\n",getuid(),geteuid());
 26 
 27 
 28 }

程序放到root用户下,
-rwxr-xr-x   1 root root  8762 Feb 16 05:16 a.out
当前gaopeng用户
如果在gaopeng用户下执行这个程序正常情况下报错
gaopeng@bogon:/$ ./a.out 
error:: Permission denied
uid 1000,euid 1000

如果设置了 设置用户ID 如下:
chmod 4755 a.out 
-rwsr-xr-x   1 root root     8762 Feb 16 05:16 a.out
再次执行
gaopeng@bogon:/$ ./a.out 
uid 1000,euid 0

可以看到设置用户ID为0即位超级用户,并且没有任何报错文件建立完成

设置这个位过后不需要SUDO就可以或者切换到root用户下就能执行程序。不安全

如果是sudo
gaopeng@bogon:/$ sudo ./a.out 
uid 0,euid 0
可以看到
实际用户ID和有效用户ID都是 0

那么总结一下:
实际用户ID实际上是发起执行这个程序的用户ID
有效用户ID实际上是执行程序过程中,程序自身的用户ID,
如果没有设置S位实际上他是和实际用户ID一样的。
当然还有效用户组ID 组权限位也可以设置为S,和用户一样,执行时可以切换到其他组(如root组)用户权限下。

设置4***这里的4是设置用户s
设置2***这里的2设置组s
当然还有1为黏住位已经淘汰无用。
chmod 2755 a.out
-rwxr-sr-x   1 root root  8762 Feb 16 05:16 a.out
chmod 4755 a.out
-rwsr-xr-x   1 root root  8762 Feb 16 05:16 a.out
chmod 6755 a.out
-rwsr-sr-x 1 root root 8762 Feb 16 05:16 a.out

时间: 2024-09-20 00:23:33

关于LINUX中的权限位S(设置用户ID)(有效用户ID)(实际用户ID)的相关文章

Linux中文件权限目录权限的意义及权限对文件目录的意义_linux shell

linux中目录与文件权限的意义 一.文件权限的意义 r:可以读这个文件的具体内容: w:可以编辑这个文件的内容,包括增加删除文件的具体内容: x:文件就具有了可执行的权限-------注意:这里和window不一样,在win中,文件的可执行权限是通过扩展名表现出来的,如exe.bat等,但是在linux中文件的可执行权限是通过这个x决定的,与文件名没有什么关系. 二.目录权限的意义 r:可以查看此目录下的完整文件列表信息. w:可以对此目录下的所有的文件及目录进行相关的更改,也就是可以更改这个

linux 中配置apache 网站 编码设置为gb2312 浏览乱码

问题描述 linux 中配置apache 网站 编码设置为gb2312 浏览乱码 httpd.conf 添加了 AddDefaultCharset GB2312? 网页添加了 浏览器浏览的时候默认编码格式还是utf-8 显示乱码 解决方案 将环境变量LANG设置LANG="zh_CN GBK"

linux中swap交换分区分区设置教程

什么是swap分区 交换区可是看作是内存的一部分,只是它是从硬盘中划分出来的,它像windows下的虚拟内存,它的作用是缓存数据,划分它时,大小设成你的物理内存的大小的两倍. 设置swap交换分区 交换分区的大小分配推荐法则 内存小于4GB时,推荐不少于2GB的swap空间: 内存4GB~16GB,推荐不少于4GB的swap空间: 内存16GB~64GB,推荐不少于8GB的swap空间: 内存64GB~256GB,推荐不少于16GB的swap空间. 1.以root权限登录SSH,键入如下命令创建

linux中的权限

第1章 显示或设置网络相关信息 1.1 ip address 与ifconfig 类似 [root@znix ~]# ip address 1: lo: <LOOPBACK,UP,LOWER_UP> mtu 65536 qdisc noqueue state UNKNOWN     link/loopback 00:00:00:00:00:00 brd 00:00:00:00:00:00     inet 127.0.0.1/8 scope host lo     inet6 ::1/128

在Word中为三位数字设置带圈字符

从2000版本开始,Word提供了设置带圈字符的功能,选定相应的字符,执行"格式"菜单下的" 中文版式→带圈字符"命令,然后"带圈字符" 对话框中选择好圈号,单击"确定"按钮就可以了. 不过,最近笔者发现一个奇怪的现象,那就是Word只能为两位数字设置带圈字符,对三位数字会自动缩减为两位数字(如图1),这是怎么一回事呢?原来,Word中的带圈字符功能只适用 于一个中文字或两个数字的情况,超过这一范围就无能为力了. 图1 其实,

linux中centOS防火墙iptables的设置教程

  1.安装iptables防火墙 怎么知道系统是否安装了iptables?执行iptables -V,如果显示如: iptables v1.3.5 说明已经安装了iptables. 如果没有安装iptables需要先安装,执行: yum install iptables 在Linux中设置防火墙,以CentOS为例,打开iptables的配置文件: vi /etc/sysconfig/iptables   通过/etc/init.d/iptables status命令查询是否有打开80端口,如

unix/linux中显示文件权限代码

 代码如下 复制代码 <?php // 说明:用 unix/linux 格式显示文件权限 // 整理:   $perms = fileperms('/etc/passwd' );   if (($perms & 0xC000) == 0xC000) {     // Socket     $info = 's'; } elseif (( $perms & 0xA000) == 0xA000) {     // Symbolic Link     $info = 'l'; } else

Linux中Ubuntu/麒麟系统如何设置网络连接

Ubuntu系统设置网络连接 1.进入Ubuntu桌面,在桌面右上角找到下图所示的图标(未连接状态),单击鼠标左键: 2.使用鼠标左键点击"编辑链接-"选项; 3.创建ADSL拨号: (1)鼠标左键点击"DSL"选项,再次点击"添加"选项; (2)在"连接名称"中填写宽带连接名称,可随意填写,在""输入宽带账号,在"密码"处填写宽带密码,输入完成后点击"保存"; (3

一些Linux Shell中的权限相关知识总结

  这篇文章主要介绍了一些Linux Shell中的权限相关知识总结,使Linux入门学习中的基础知识,需要的朋友可以参考下 一个文件一经创建,就具有三种访问方式: 1) 读,可以显示该文件的内容. 2) 写,可以编辑或删除它. 3) 执行,如果该文件是一个s h e l l脚本或程序. 按照所针对的用户,文件的权限可分为三类: 1) 文件属主,创建该文件的用户. 2) 同组用户,拥有该文件的用户组中的任何用户. 3) 其他用户,即不属于拥有该文件的用户组的某一用户 文件的全部信息包括以下: 文