Linux学习笔记3——设置用户ID和设置组ID
来源:互联网 发布:5.x unity3d 粒子系统 编辑:程序博客网 时间:2024/05/18 00:27
1,背景知识:
与一个进程相关联的ID有6个或更多。这里涉及到的有:
表征现在正在执行进程的是那个人、组:
- 实际用户ID
- 实际组ID
- 有效用户ID
- 有效组ID
2,如何用命令设置“设置用户ID位”
- chmod u+s file_name 将“设置用户ID位”设为有效
- chmod g+s file_name 将“设置组ID位”设为有效
- chmod u-s file_name 将“设置用户ID位”设为无效
- chmod g-s file_name 将“设置组ID位”设为无效
3,“设置用户ID位”与st_mode
上一节提到的文件属性结构体struct stat中的st_mode中包含了“设置用户ID位”和“设置组ID位”信息。st_mode的第11位和第12位分别代表的就是“设置组ID位”和“设置用户ID位”
常量S_ISUID(2048)和S_ISGID(1024)可用于在C代码中设置和获取这两个位.其用法如下:
struct stat file_info;if((lstat(file_name, &file_info)) < 0){printf("lstat error!\n");return 1;}//"设置用户ID"和"设置组ID"设为有效file_info.st_mode |= S_ISUID;file_info.st_mode |= S_ISGID;//"设置用户ID"和"设置组ID"设为无效file_info.st_mode &= ~S_ISUID;file_info.st_mode &= ~S_ISGID;//"获取用户ID"和"获取组ID"if(file_info.st_mode & S_ISUID)printf("set-usr-ID valid");elseprintf("set-usr-ID invalid");if(file_info.st_mode & S_ISGID)printf("set-group-ID valid");elseprintf("set-group-ID invalid");
4,例子
#include <stdio.h>#include <stdlib.h>#include <sys/stat.h>#include <unistd.h>#include <fcntl.h>int main(int argc, char* argv[]){struct stat file_info;if((lstat(argv[0], &file_info)) < 0){printf("lstat error!\n");return 1;}printf("s_uid = %d, s_gid = %d\n", S_ISUID & file_info.st_mode, S_ISGID & file_info.st_mode);printf("uid = %d,gid=%d, euid = %d, egid = %d\n",getuid(),getgid(),geteuid(),getegid());}
执行结果:
注:我们不能在进程中修改进程本身的可执行文件的“设置用户ID位”和“设置组ID位”
0 0
- Linux学习笔记3——设置用户ID和设置组ID
- linux 下设置用户ID 和 设置组ID 学习笔记
- linux 下设置用户ID 和 设置组ID 学习笔记
- APUE学习笔记——8.11 实际用户ID、有效用户ID、设置用户ID
- linux 设置用户id 设置组id
- linux 设置用户ID、设置组ID
- linux 设置用户id
- APUE学习笔记(5)-设置用户ID
- 设置用户ID位和设置组ID位
- Linux文件权限之设置用户ID和设置组ID(即SUID和SGID)
- 实际用户ID,有效用户ID和设置用户ID
- 实际用户ID,有效用户ID和设置用户ID
- 实际用户ID,有效用户ID和设置用户ID
- 实际用户ID,有效用户ID和设置用户ID
- 实际用户ID,有效用户ID和设置用户ID
- linux 中实际用户ID”、“有效用户ID”和“保存的设置用户ID”三个术语
- linux 中实际用户ID”、“有效用户ID”和“保存的设置用户ID”三个术语
- 小谈linux下实际用户ID,有效用户ID和设置用户ID
- (进程编程)共享内存总结(笔记整理)
- Ural1395&&Ural1452——Pascal vs. C++
- Mef
- Sublime Text 3使用SublimeLinter配置JS,CSS,HTML语法检查
- HttpURLConnection实现网络请求
- Linux学习笔记3——设置用户ID和设置组ID
- 为什么要重写hashcode()方法
- Leetcode349. Intersection of Two Arrays
- PacketiX VPN 搭建企业VPN服务器
- 两个blcok的使用问题
- Socket心跳包机制
- 关于护肤那点事
- LA4670 Dominating Patterns(AC自动机)
- 【NAS】NFS深入了解