进程的有效用户ID用于文件访问时的权限检查。通常,有效用户ID等于实际用户ID(也就是你登录是的用户ID),有效组ID等于实际组ID。

我们知道每个文件针对不同的user有不同的读、写、执行权限。当执行一个程序文件时,进程的有效用户ID通常就是实际用户ID。但是可以在文件模式字(st_mode)中设置一个特殊标志,其含义是“当执行此文件时,将进程的有效用户ID设置为文件所有者的用户ID”,这样进程就用了该文件所有者对该文件的权限了。例如,UNIX系统程序passwd允许任一用户改变其口令,该程序是一个设置用户ID程序。因为该程序应能够将用户的新口令写入口令文件中,而只有root才具有对该文件的写权限。

#设置了st_uid之后,所有者的执行位显示's'
-rwsr-xr-x 1 root root 51224 4月 21 2015 /usr/bin/passwd

为了验证前面所讲的,我写了个小程序。

首先,我以root权限新建了一个文件,root_file.lua

#! /usr/bin/lua
print("hello world")

然后,再以root权限写个程序(write_command)来改变这个.lua文件

#include<stdio.h>

int main()
{
FILE* fp = fopen("root_file.lua", "a+");
if (!fp) {
printf("open file error\n");
return -1;
}
fputs("print(\"I am root\")\n", fp);
fclose(fp);
return 0;
}

如果我们以普通用户的身份来运行这个程序,则会报错:

wuman@wuman-pc:~/APUE$ ll write_command
-rwxr-xr-x 1 root root 8720 11月 26 17:51 write_command
wuman@wuman-pc:~/APUE$ ./write_command
open file error

最后,我们再用chmod命令来设置它的用户ID

wuman@wuman-pc:~/APUE$ sudo chmod u+s write_command
wuman@wuman-pc:~/APUE$ ll write_command
-rwsr-xr-x 1 root root 8720 11月 26 17:51 write_command
wuman@wuman-pc:~/APUE$ ./write_command

此时我们的root_file.lua已经被更新了

#! /usr/bin/lua
print("hello world")
print("I am root")

linux进程的有效用户ID的更多相关文章

  1. Linux进程的实际用户ID和有效用户ID

    转自:https://blog.csdn.net/hulifangjiayou/article/details/47400943 在Linux中,每个文件都有其所属的用户和用户组,默认情况下是文件的创 ...

  2. 【转】linux 设置用户id 设置组id

    linux 设置用户id 设置组id   转自 linux 设置用户id 设置组id   最近看apue,简单记录对设置用户id理解(设置组id同理). 1. 相关的id好像很多,共有哪些? 文件2个 ...

  3. linux系统学习笔记:无死角理解保存的设置用户ID,设置用户ID位,有效用户ID,实际用户ID

    一.基本概念 实际用户ID(RUID):用于标识一个系统中用户是谁,一般是在登录之后,就被唯一的确定,就是登录的用户的uid. 有效用户ID(EUID):用于系统决定用户对系统资源的权限,也就是说当用 ...

  4. 进程控制之更改用户ID和组ID

    在UNIX系统中,特权(例如能改变当前日期的表示法以及访问控制(例如,能否读.写一特定文件))是基于用户ID和组ID的.当程序需要增加特权,或需要访问当前并不允许访问的资源时,我们需要更换自己的用户I ...

  5. linux保存的设置用户/组ID(set-user-ID)的测试

    直接贴代码和结果 // FileName: id.cpp #include <iostream> #include <unistd.h> using namespace std ...

  6. 进程的用户ID

    进程创建时,系统会在进程上设置几个用户相关的ID 实际用户ID,实际用户组ID,系统根据当前会话登陆的用户信息设置 有效用户ID,有效用户组ID,系统根据所打开的执行文件的模式位,进行设置.set_u ...

  7. UNIX文件的权限之“设置用户ID位”

    用stat函数可以获取一个文件的状态信息,原型是这样的: int stat(const char *path, struct stat *buf); 其中结构体stat的结构: struct stat ...

  8. Linux 进程(一):环境及其控制

    进程环境 main启动 当内核执行C程序时,在调用main前先调用一个特殊的启动例程.可执行程序将此启动例程指定为程序的起始地址,接着启动例程从内核中取出命令行参数和环境变量值,然后执行main函数. ...

  9. Linux进程控制(一)

    1. Linux进程概述 进程是一个程序一次执行的过程,它和程序有本质区别.程序是静态的,它是一些保存在磁盘上的指令的有序集合:而进程是一个动态的概念,它是一个运行着的程序,包含了进程的动态创建.调度 ...

随机推荐

  1. Robot Framework(二)测试数据语法

    2.1.1文件和目录 测试数据的层次结构安排如下: 测试数据在测试数据文件中创建. 测试数据文件会自动创建一个包含该文件中的测试数据的测试套件. 包含测试数据文件的目录构成了更高级别的测试套件.这样的 ...

  2. 跳出语句 break continue

    break 使用场景:终止switch或者循环 在选择结构switch语句中 在循环语句中 离开使用场景的存在是没有意义的 public static void main(String[] args) ...

  3. codeforces 468B two set(并查集)

    链接 B. Two Sets 题意 给两个集合A B,两个数a b,n个数x,分配n个数到两个集合,要求x , a-x在同一个集合,x , b-x在同一个集合,属于A集合的数输出0,B的输出1,无解输 ...

  4. 解决python3在sublim Text3中中文乱码的问题

    在Tool >> BulidingSystem 中  新建 python3 写入如下代码 { "cmd": ["C:/python3/python.exe&q ...

  5. idea使用lombok

    1.这玩意可以帮助我们自动实现set.get方法,实现过程有两处,只要理解了这两处,对其实际工作如何使用就非常简单了 2.第一点就是编译过程,比如使用gradle build 等编译工具进行编译时,会 ...

  6. Vue学习之路第十二篇:为页面元素设置内联样式

    1.有了上一篇的基础,接下来理解内联样式的设置会更简单一点,先看正常的css内联样式: <dvi id="app"> <p style="font-si ...

  7. Linux 获取帮助

    Linux中获取帮助的方法  方法:    COMMAND --help 或者 help COMMAND    whatis    man或info    本地帮助文档 /usr/share/doc/ ...

  8. js生产随机数

    var chars = "0123456789ABCDEFGHIJKLMNOPQRSTUVWXTZabcdefghiklmnopqrstuvwxyz"; var string_le ...

  9. android生成sdk.jar 小工具

    net.sf.fjep.fatjar_0.0.31.jar 生成jar的工具 把这个net.sf.fjep.fatjar_0.0.31.jar到Eclipse的plugins中,从启Eclipse.点 ...

  10. 【AIM Tech Round 5 (rated, Div. 1 + Div. 2) A】 Find Square

    [链接] 我是链接,点我呀:) [题意] 在这里输入题意 [题解] 找到左上角.往下一直走,往右一直走走到B边界就好. 中点的话.直接输出中位数 [代码] #include <bits/stdc ...