我有一个使用 Yocto 构建的嵌入式 Linux 系统。刚构建完成时,它只有一个 root 用户。我创建了一个新用户。该新用户无法打开系统上的任何端口,即使这些端口大于 1024。
python -m SimpleHTTPServer
当我运行时进行快速测试root
,它就可以工作。
~ # python -m SimpleHTTPServer
Serving HTTP on 0.0.0.0 port 8000 ...
但是,当我使用非 root 用户运行它时,由于访问问题而失败。
~ $ python -m SimpleHTTPServer
Traceback (most recent call last):
File "/usr/lib/python2.7/runpy.py", line 174, in _run_module_as_main
"__main__", fname, loader, pkg_name)
File "/usr/lib/python2.7/runpy.py", line 72, in _run_code
exec code in run_globals
File "/usr/lib/python2.7/SimpleHTTPServer.py", line 235, in <module>
test()
File "/usr/lib/python2.7/SimpleHTTPServer.py", line 231, in test
BaseHTTPServer.test(HandlerClass, ServerClass)
File "/usr/lib/python2.7/BaseHTTPServer.py", line 606, in test
httpd = ServerClass(server_address, HandlerClass)
File "/usr/lib/python2.7/SocketServer.py", line 414, in __init__
self.socket_type)
File "/usr/lib/python2.7/socket.py", line 191, in __init__
_sock = _realsocket(family, type, proto)
socket.error: [Errno 13] Permission denied
我为此尝试了不同的端口,非 root 用户无法打开其中任何一个。
我的理解是只有 root 用户可以访问 < 1024 的端口,但其他端口只要空闲就可以由非 root 用户使用。但是,我根本无法使用任何端口。任何指示都会非常有帮助。
答案1
有一个组inet(3003)
,已分配给用户但未分配给任何新用户。一旦我将非 root 用户添加到该组中,他们就能够打开端口并python -m SimpleHTTPServer
运行得很好。
/sbin/ifconfig
通过以非 root 用户身份运行,我能够了解这一细节。运行它时特别提到inet
套接字不可用,并且摆弄了一下让我找到了上述解决方案。