getuid、geteuid和setuid函数

Posted by 夏泽民

在linux中每个进程有三个[实际上有第4个]用户标识符. real uid : 真实用户ID. saved uid : 已保存用户ID , effective uid : 有效用户ID 真实用户ID(real uid)是login时的用户.而在运行过程中,用于所有的安全检查的是有效用户ID(effective uid). 一般情况下:real uid = saved uid = effective uid在某些场合下,使用用setuid,setruid函数可以改变effective uid,从而使得程序运行时具有特殊的权限.常见的例子是linux系统中的passwd命令,由于所有的用户信息包括用户密码都保存在/etc/passwd文件中,而/etc/passwd文件只有root权限可以读写,若想让每个用户都只可以修改自己的密码,就必须让普通用户暂时获得有限的读写/etc/passwd的权限.用setuid就可以解决这个 问题. Linux setuid(uid)函数: (1)如果由普通用户调用,将当前进程的有效ID设置为uid. (2)如果由有效用户ID符为0的进程调用,则将真实,有效和已保存用户ID都设 置为uid.



fpm 源码阅读

Posted by 夏泽民

FastCGI是Web服务器(如:Nginx、Apache)和处理程序之间的一种通信协议,它是与Http类似的一种应用层通信协议,注意:它只是一种协议! PHP只是一个脚本解析器,你可以把它理解为一个普通的函数,输入是PHP脚本。输出是执行结果,假如我们想用PHP代替shell,在命令行中执行一个文件,那么就可以写一个程序来嵌入PHP解析器,这就是cli模式,这种模式下PHP就是普通的一个命令工具。接着我们又想:能不能让PHP处理http请求呢?这时就涉及到了网络处理,PHP需要接收请求、解析协议,然后处理完成返回请求。在网络应用场景下,PHP并没有像Golang那样实现http网络库,而是实现了FastCGI协议,然后与web服务器配合实现了http的处理,web服务器来处理http请求,然后将解析的结果再通过FastCGI协议转发给处理程序,处理程序处理完成后将结果返回给web服务器,web服务器再返回给用户,如下图所示。



socketpair nginx 通信机制

Posted by 夏泽民

由于nginx使用的是多进程的模型,因此,进程间的通信或者同步很重要,为什么要进行进程同步呢?我们知道,nginx有master和worker进程。不过,在创建worker进程的时候,是需要对进程同步的。举个具体的例子,我们假设服务器共有4个worker进程,我们知道nginx有一个全局变量,是ngx_processes数组,他存储着所有进程的信息,在worker1创建的时候,worker2,worker3,worker4进程是没有创建的,因此,这个时候就牵扯到同步,最合理的方式是,在master创建一个进程的时候,就应该通知所有子进程有新的进程被fork了,以及这个进程的基本信息。



goroutine 泄露

Posted by 夏泽民

如果有goroutine因为ch没有接收动作而被一直阻塞在发送处,无法被回收。 发现goroutine 泄露工具:https://github.com/uber-go/goleak 产生原因分析 产生goroutine leak(协程泄露)的原因可能有以下几种: * goroutine由于channel的读/写端退出而一直阻塞,导致goroutine一直占用资源,而无法退出 * goroutine进入死循环中,导致资源一直无法释放



umask umask(0)

Posted by 夏泽民

当我们登录系统之后创建一个文件总是有一个默认权限的,那么这个权限是怎么来的呢?这就是umask干的事情。umask设置了用户创建文件的默认 权限,它与chmod的效果刚好相反,umask设置的是权限“补码”,而chmod设置的是文件权限码。一般在/etc/profile、$ [HOME]/.bash_profile或$[HOME]/.profile中设置umask值。



Search

Popular posts

Anything in here will be replaced on browsers that support the canvas element

Recent posts

This blog is maintained by 夏泽民

Get in touch with me at 465474307@qq.com

Subscribe to our mailing list

* indicates required