是否有一种(兼容的)欺骗(作为根) unix套接字(文件系统套接字)对等凭据,可由getsockopt()获得,选项SO_PEERCRED
背景:
我需要连接到一个服务器应用程序(我不能修改),它检查通过UID连接到它的进程的SO_PEERCRED。我想欺骗这些信息,以便能够将与应用程序连接为根,也可以将连接到应用程序。
更新
澄清这个问题
我正在寻找一种非侵入性的方式,使服务器能够看到特定的对等方UID/GID。解决方案是不鼓励的,它需要修改内核(或使用内核模块),或者以任何方式更改服务器进程或其加载/链接进程 (LD_PRELOAD、系统调用拦截等)。
基本上,在没有任何特殊要求的任何linux (或unix )服务器上运行时,该解决方案都应该工作。服务器进程可能已经在运行。
发布于 2013-04-13 21:25:07
你在正确的线路上。根进程具有欺骗类似事情的权限,问题是SO_PEERCRED没有为进程提供任何机制或API来指定应该向对等方提供什么身份。
你可以做两件事:
setreuid(desired,-1)调用时暂时删除根( connect )。unix域连接在进程connect (和listen向相反方向发展)时使用对等方的凭据标记。SO_PEERCRED没有告诉您当前对等方的凭据。然后你可以继续根目录。struct cmsg调用struct cmsg。内核将忽略非特权用户指定的凭据,并始终确保对方看到实际身份,但特权进程可以伪装为其他任何人。这是一个更好的匹配您的需求,因为删除和恢复根是一个危险的活动,在这种情况下,没有必要。谷歌的"SCM_CREDENTIALS“(或"man -K”为它在您的系统),以获得代码样本。发布于 2013-04-12 15:26:27
不是的。原因是提供对等程序的UID和GID的机制是内核内部的,您不能欺骗内核!内核使用对等方的PID来推断对等方的有效凭据。当一方在套接字上执行connect时,就会发生这种情况。请参阅unix_stream_connect()在net/unix/af_unix.c中对net/unix/af_unix.c的调用。对等方不可能更改它发送的数据或套接字,从而使内核相信对等程序的PID不是它所做的。这与AF_INET套接字不同,后者内核对对等程序没有内部知识,只能看到对等方发送的IP数据包报头中的数据。
要获得此效果,唯一可以做的事情是将对等进程的有效UID设置为根或任何您想要的UID/GID,为此您需要根密码或sudo权限。
https://stackoverflow.com/questions/15974356
复制相似问题