我在知乎上看见依云你这么说,https://www.zhihu.com/answer/30167345,
有点好奇所以想问下。
我查了http://man7.org/linux/man-pages/man7/unix.7.html
如果是pathname socket这种绑定到一个inode的可以取消某个UID对该socket的写入权限,导致对端无法connect,但是对CAP_DAC_OVERRIDE的进程有用吗?
而且如果我要监听abstract地址是不是这法子就不行了?
还有就是SO_PEERCRED这个socket option可以查到对端连接时的crendential,但是这个时候已经连上了,即使是查到了,想拒绝也只能关掉对吧,可是这也防不住人家已经成功connect 啊?
还有其他法子吗?你当时究竟是想说什么方法阻止别人连接呢?
反社会,精神极其不稳定,随时可能炸碎身边所有人
离线
就是关掉、不提供服务啊。
离线
pathname UDS 同普通的 file 一樣,RW permission check 事有 file system 提供的唷。CAP_DAC_OVERRIDE 可以 bypass file system 的 permission check。
但係如果您使用的係 SOCK_STREAM 的話 accept 後可以得到 client address。如果 client 的 socket 在 connect 之間也 bind 到一個 pathname, sockaddr_un 裡會有那個 path 唷。
當然了,您也可以通過 SO_PEERCRED 獲取 client 的 pid uid 和 gid。但係需要 client 啓用 SO_PASSCRED 才行唷。更常見的驗證方法是 COOKIES 或者 PSK。當然直接搞一個證書認證也不是不行哦。
离线