
У меня встроенная система Linux, собранная с помощью Yocto. Только что после сборки у нее был только пользователь root. Я создал нового пользователя. Этот новый пользователь не может открыть ни одного порта в системе, даже если они больше 1024.
Для быстрого теста, когда я запускаю python -m SimpleHTTPServer
как root
, это просто работает.
~ # python -m SimpleHTTPServer
Serving HTTP on 0.0.0.0 port 8000 ...
Однако когда я запускаю его с правами обычного пользователя, происходит сбой из-за проблем с доступом.
~ $ 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, но другие порты могут использовать и не-пользователи, если они свободны. Однако я вообще не могу использовать ни один порт. Любые указания будут очень полезны.
решение1
Есть группа inet(3003)
, которая была назначена пользователю, но не новым пользователям. Как только я добавляю в эту группу пользователя без прав root, они могут открывать порты и все python -m SimpleHTTPServer
работает нормально.
Мне удалось добраться до этой конкретики, запустив ее /sbin/ifconfig
как не-root пользователя. Запуск его специально упомянул, что inet
сокет недоступен, и немного повозившись, я нашел решение выше.