相关疑难解决方法(0)

UNIX套接字权限(Linux)

我在C中使用UNIX套接字开发服务器。从手册中:

在Linux实现中,文件系统中可见的套接字使用per?所在目录的任务。可以更改其所有者,组和权限。如果进程在创建套接字所在的目录上没有写和搜索(执行)权限,则创建新套接字将失败。连接到套接字对象需要读/写权限。此行为与许多BSD衍生系统不同,后者忽略UNIX域套接字的权限。可移植程序不应依赖此功能来保证安全性。

我有一条世界可写的道路。

    $ ls -ld api
    drwxrwxrwx 2 root www-data 4096 Feb 15 21:57 api
Run Code Online (Sandbox Code Playgroud)

根目录下的进程在此路径中创建一个套接字:

    $  ls -l api/socket
    srwxr-xr-x 1 root root 0 Feb 15 21:57 api/socket
Run Code Online (Sandbox Code Playgroud)

由于权限问题,以用户身份运行的另一个进程无法连接到套接字。如果我手动将套接字权限更改为每个人都可写,则其他进程可以成功连接。

  1. 为什么像文档所说的那样,父级权限不足以使套接字可写?
  2. 在这种情况下,最佳做法是什么?

c unix sockets linux

3
推荐指数
2
解决办法
1万
查看次数

更改linux套接字文件权限

首先,是的,这与这个堆栈溢出问题有关,但我的情况略有不同,我的帖子没有得到答案。

因此,在我的 Dell 桌面工作站 Ubuntu 10.04 32 位上,我开发了一个服务器程序,旨在为 Apache 运行的 PHP“程序”提供 Unix 域套接字。(注意:umask = 0022)我将套接字文件命名为/home/wmiller/ACT/web_socket_file。(ACT 是对产品名称的引用)。/home/wmiller/ACT 的权限为 777。 /home/wmiller/ACT/web_socket_file 的创建权限为 777。

现在,我将程序复制到我的测试平台,一个 Q7 格式的 Intel 处理器板,它也有 Ubuntu 10.04 32 位和 umask = 0022。相同的目录,相同的 777 目录权限。但是,现在当我运行代码 /home/wmiller/ACT/web_socket_file 时,会出现 755 权限,而 Apache/PHP 无法打开 Unix 域套接字,因为它获取的是 rx 权限,而不是 rw- 或 rwx。Apache 正在 uid = www-data 中运行。

sockaddr_un       webServAddr;
remove( g_webSocketFileName.c_str() );       // to erase any lingering file from last time

memset(&webServAddr, 0, sizeof(webServAddr));
webServAddr.sun_family        = AF_UNIX;
snprintf( webServAddr.sun_path, UNIX_PATH_MAX, "%s", g_webSocketFileName.c_str() ); …
Run Code Online (Sandbox Code Playgroud)

c++ sockets unix-socket

1
推荐指数
1
解决办法
5699
查看次数

标签 统计

sockets ×2

c ×1

c++ ×1

linux ×1

unix ×1

unix-socket ×1