安全要求程序应使用最小权限执行,然而有的程序由于特殊性,往往在执行某段代码的时候需要提高权限。
由于suid的容易使用特性,很多编程人员往往会直接使用它来实现提高权限的功能,而不是去做代码权限分离。这样子的代码被封装成一个可执行程序,且被设置了suid。从安全性上来看,这种代码是劣质的。但是有的时候处于某些原因(方便
性占大多数),这种程序还是会被创造出来。
其实,稍微注意一下,可以使得使用了suid的代码更加安全。原理很简单,代码很少,也为了方便苦逼的程序员使用。
毕竟为了一段需要权限提升的代码,大动干戈的重新修改设计很麻烦。
uid_t e_uid_initial; uid_t r_uid; int main(int argc, char * argv[]) { /*saves the different UIDS */ e_uid_initial = geteuid(); r_uid = getuid(); /*limits access rights to the ones of the * user launching the program*/ seteuid(r_uid); ... privileged_function(); .... } void privileged_function(void) { /* Gets initial priveleges back */ seteuid (e_uid_initial); ... /* portion needing priveleges */ ... seteuid (r_uid); }
很简单的代码,但是加上这段代码比直接使用suid的程序要安全很多。