sendto permission denied, 为什么?

[复制链接]
查看11 | 回复5 | 2021-1-27 07:05:22 | 显示全部楼层 |阅读模式
写了一个简单的unix域通信的程序,是按照unix网络编程的格式写的,点对点通信,一个用作client一个用作server。用的是datagram方式的socket。
但运行时,client向server发包时,总是提示错误sendtopermissiondenied.
求助,非常急。。。

分 -->
回复

使用道具 举报

千问 | 2021-1-27 07:05:22 | 显示全部楼层
用root用户运行
回复

使用道具 举报

千问 | 2021-1-27 07:05:22 | 显示全部楼层
就是用root运行的
回复

使用道具 举报

千问 | 2021-1-27 07:05:22 | 显示全部楼层
unix域使用了一个文件作为其中介(当然数据流并不存在文件中,只是作为了一种标识和权限控制方法)
所以,你使用ls-l命令看下那个unix域中对应的文件的所属用户ID,组ID,,及权限。
你既然是使用的root用户运行的。
那么这个文件不管是什么属主你都是应试有权限的,,
但是:
若属主,和组ID都为root:root,
若此时用户权限没有写权限,则可能你发送不成功。如
ls-lunixfile
-r--rw-r--rootrootunixfile
但root没有写权限。
使用chmod更改下吧。

回复

使用道具 举报

千问 | 2021-1-27 07:05:22 | 显示全部楼层
弄了一下午,原来是程序里有一段代码调用了setguid,改变了用户的权限。
我不明白为什么程序里要调用setguid呢
回复

使用道具 举报

千问 | 2021-1-27 07:05:22 | 显示全部楼层
IntheLinuximplementation,socketswhicharevisibleinthefilesystemhonourthepermissionsofthedirectorytheyarein.Theirowner,groupandtheir
permissionscanbechanged.Creationofanewsocketwillfailiftheprocessdoesnothavewriteandsearch(execute)permissiononthedirectorythesocket
iscreatedin.Connectingtothesocketobjectrequiresread/writepermission.ThisbehaviordiffersfrommanyBSD-derivedsystemswhichignorepermissions
forUnixsockets.Portableprogramsshouldnotrelyonthisfeatureforsecurity.
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

主题

0

回帖

4882万

积分

论坛元老

Rank: 8Rank: 8

积分
48824836
热门排行