SUID的应用场景和简单见解

前言

在看到apue的进程的时候,我发现一个叫suid的概念,也就是"设置用户ID"。一开始对这个概念十分陌生,单凭从字面来看确实不容易理解,后面通过查阅资料并且了解到它的一些应用场景之后才逐步了解,本文就是简单记录一下我对suid的个人见解。

其实要了解一个抽象东西最好的方法就是:找到它的应用场景,并且获取一个应用的例子,通过例子来了解它。那么suid的应用例子是什么呢?最典型的就是passwd了。

passwd是如何运用suid的

相信有过一定开发或者运维经验的都知道,passwd就是一个可以用于修改用户密码的linux工具,如果再深入了解一点,就会知道这个工具其实是修改/etc/passwd这个文件的。让我们先简单看一看/etc/passwd这个文件:

-rw-r--r-- 1 root root 1537 Jan 12 16:18 /etc/passwd

这个文件存储的就是linux所有用户的一些密码信息,出于安全的要求,文件的所属用户和所属组均是root,并且只能让root去修改文件。

然而,作为一个普通用户,我就想改我自己的密码,难道还得取得root权限或者说让root管理员给我们去修改密码?这很明显是不人性化的。

当然,你可以想,那既然这样也可以把其他用户设置成可写嘛。那么这就问题大了,如果这个用户乱改怎么办呢?因此最好的解决办法就是我们开发一个程序,这个程序去验证执行用户的修改密码操作是否合法,如果合法则把它的新密码写到/etc/passwd这个文件的对应用户中去。

但是我们又忽略了这么一点,作为一个普通用户,我们确实可以执行修改密码程序,但是我们执行时候得实际用户id依然不是root,因此即使我们的操作合法,也不能让这个程序去修改/etc/passwd文件,因为这个文件仅仅运行root管理员去修改。

passwd很好的告诉我们应该怎么解决这个问题,且先看看passwd这个程序的信息:

-rwsr-xr-x 1 root root 47032 May 16  2017 /usr/bin/passwd*

我们知道第三个位置是执行位,但很奇怪的是,这次执行位不是常规的"x"而是"s"。其实这个"s"就是表示这个passwd程序具有suid的功能。因此,当普通用户执行这个passwd程序的时候,它就具备了root的权限,当具备了root权限的时候,当然也能去修改/etc/passwd文件了,这么一来,我们既让普通用户在非root权限下拥有了修改自己密码的能力,也能最大限度的保证了整个系统的安全,可以说是一举两得的。

总结

最后简单总结一句话:suid就是允许用户在执行程序的时候拥有这个程序属主的权限的一个机制,也可以理解为执行程序的时候被属主"灵魂上身",但执行结束后又会"打回原形"了。

你可能感兴趣的:(SUID的应用场景和简单见解)