【发布时间】:2020-02-05 11:33:39
【问题描述】:
所以我有这个服务器:
import socket
sock = socket.socket(socket.AF_UNIX, socket.SOCK_STREAM)
sock.bind('/tmp/sock.sock')
sock.listen(1)
while True:
conn, ca = sock.accept()
print(conn.recv(1024))
还有这个客户:
import socket
sock = socket.socket(socket.AF_UNIX, socket.SOCK_STREAM)
sock.connect('/tmp/sock.sock')
sock.send('Hello, World')
实际的发送和接收有点复杂,但只要服务器和客户端都由 root 运行,就可以完美运行。当客户端以 root 身份运行并且服务器由普通用户运行时,它也可以工作。但是当我尝试由普通用户使用 root 和客户端运行服务器时,我得到了这个:
$ python3 client.py
connecting to /tmp/sock.sock
[Errno 13] Permission denied
我该如何解决这个问题?服务器需要以root身份运行,客户端需要以非特权用户身份运行。
我已经明白它与套接字文件的文件权限有关,但我不知道应该如何修复它。我看不到任何传递给套接字构造函数的选项来解决这个问题。
【问题讨论】:
-
套接字本身遵循正常的文件权限。
-
@Torxed 是的,我明白这一点,但我不知道应该如何解决。
标签: python python-3.x linux sockets python-sockets