博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
Linux中的setuid简介
阅读量:4286 次
发布时间:2019-05-27

本文共 972 字,大约阅读时间需要 3 分钟。

最近在项目中有一个需要给root权限的脚本, 因此详细看了一下关于Linux中setuid的使用方法, 在此做一下整理.

关于ruid和euid

首先需要明确一下Linux进程中ruid和euid的概念.

每一个Linux进程都会包含这两个uid.

ruid(real user ID):

ruid可以理解为哪个用户执行了这个程序或者文件, ruid就是谁.

euid(effective user ID):

当进程执行时间, 操作系统会对euid进行识别, 以此来判断到底用什么权限来执行这个进程.

也就是说操作系统实际是通过判断进程的euid而不是ruid来给予其权限,只是在大多数情况下, euid和ruid是相等的.

setuid

setuid是类unix系统提供的一个标志位, 其实际意义是set一个process的euid为这个可执行文件或程序的拥有者(比如root)的uid, 也就是说当setuid位被设置之后, 当文件或程序(统称为executable)被执行时, 操作系统会赋予文件所有者的权限, 因为其euid是文件所有者的uid.

举个例子

setuid的方法是使用Linux的chmod指令,我们都习惯给予一个文件类似“0750” “0644” 之类的权限,它们的最高位0就是setuid的位置, 我们可以通过将其设为4来设置setuid位。(tips:设置为2为setgid,同setuid类似,即赋予文件所在组的权限)。

chmod 4750 文件名

or
chmod u+s 文件名

    1

    2
    3

在这个命令执行之后, 我们再通过ls -l命令查看文件时, 可以发现文件owner权限的x 位变成了s ,这就说明setuid权限已经被设置, 之后任何user执行这个文件时(user需要有文件的执行权限), 都会以root的权限运行(此文件的owner为root)。 所以,针对一个需要被很多user以root权限执行的文件, 我们可以通过setuid来进行操作, 这样就不必为所有user都添加sudo 命令。

tips

在使用setuid时, 需要保证此文件有被执行的权限(x), 如果没有执行权限。 在使用ls -l查看权限时, 会发现setuid位被设置为了大写的S, 这说明setuid位没有被设置成功。

转载地址:http://xupgi.baihongyu.com/

你可能感兴趣的文章
SpringMvc前端提交多个对象,后台接收
查看>>
关于Request
查看>>
AJAX——核心XMLHttpRequest对象
查看>>
Java处理js输入特殊字符(如“+、@、¥”)
查看>>
Mysql注释
查看>>
MySQL(root用户)密码重置
查看>>
grant授权
查看>>
MySQL创建用户与授权方法
查看>>
MySql数据类型
查看>>
MySql简单sql使用
查看>>
"未能加载文件或程序集“MySql.Data, Version=6.9.3.0”或它的某一个依赖项。
查看>>
CodeFirst for MySql
查看>>
Code Frist for Mysql 实例
查看>>
Visual Studio 开源控件扩展 NuGet 常用命令及常用组件
查看>>
mysql局域网访问设置
查看>>
UEditor 编辑器跨域上传解决方法
查看>>
VisualSVN Server搭建SVN服务器
查看>>
AngularJs directive指令详解
查看>>
AngularJs directive-scope
查看>>
AngularJs directive-link实例
查看>>