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

简介: getuid() 实际用户ID为 执行程序的实际用户ID geteuid() 有效用户ID与设置用户ID有关,及权限中的S位 如果权限为rws 那么s位代表其他用户执行程序时改变为主用户权限。


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
相关文章
|
2月前
|
Linux Shell
Linux系统文件默认权限
Linux系统文件默认权限
54 2
|
1月前
|
Linux 数据安全/隐私保护
linux特殊权限!!
本文介绍了Linux系统中的特殊权限,包括suid、sgid和sbit。suid使普通用户在执行特定命令时获得root权限;sgid使用户在创建文件时继承目录的用户组权限;sbit确保用户只能删除自己在共享目录中创建的文件。此外,文章还讲解了chattr和lsattr命令,用于更改和查看文件的扩展属性,以及umask的概念和计算方法,帮助理解文件和目录的默认权限。
45 1
linux特殊权限!!
|
1月前
|
监控 Oracle 关系型数据库
Linux平台Oracle开机自启动设置
【11月更文挑战第8天】在 Linux 平台设置 Oracle 开机自启动有多种方法,本文以 CentOS 为例,介绍了两种常见方法:使用 `rc.local` 文件(较简单但不推荐用于生产环境)和使用 `systemd` 服务(推荐)。具体步骤包括编写启动脚本、赋予执行权限、配置 `rc.local` 或创建 `systemd` 服务单元文件,并设置开机自启动。通过 `systemd` 方式可以更好地与系统启动过程集成,更规范和可靠。
|
1月前
|
Oracle Ubuntu 关系型数据库
Linux平台Oracle开机自启动设置
【11月更文挑战第7天】本文介绍了 Linux 系统中服务管理机制,并详细说明了如何在使用 systemd 和 System V 的系统上设置 Oracle 数据库的开机自启动。包括创建服务单元文件、编辑启动脚本、设置开机自启动和启动服务的具体步骤。最后建议重启系统验证设置是否成功。
|
1月前
|
关系型数据库 MySQL Linux
Linux系统如何设置自启动服务在MySQL数据库启动后执行?
【10月更文挑战第25天】Linux系统如何设置自启动服务在MySQL数据库启动后执行?
107 3
|
2月前
|
运维 监控 安全
Linux_权限理解(详细PLUS)
【10月更文挑战第3天】本文介绍了Linux系统中的权限管理基础,包括文件系统对象与权限关联、权限的继承性、字符与数字表示法的解读,以及用户、组与权限的动态交互。详细解析了`chmod`命令的高级用法和权限修改的风险,探讨了SUID、SGID和Sticky Bit等特殊权限的作用机制,并提出了基于角色的权限分配和定期权限审计的最佳实践。
75 11
|
2月前
|
Ubuntu Linux
Linux实践|设置静态 IP 地址
Linux实践|设置静态 IP 地址
74 0
Linux实践|设置静态 IP 地址
|
2月前
|
Linux 应用服务中间件 nginx
Linux下权限设置之suid、sgid、sticky
Linux下权限设置之suid、sgid、sticky
|
2月前
|
Linux 数据安全/隐私保护 Windows
Linux_权限理解(详细PLUS
Linux_权限理解(详细PLUS
|
2月前
|
网络协议 Linux 网络安全
【Linux】用户和权限及实用操作------迅速了解用户和权限及其实用操作
【Linux】用户和权限及实用操作------迅速了解用户和权限及其实用操作