
Eu tenho um sistema Linux embarcado construído usando Yocto. Recém-saído da construção, ele só tinha um usuário root. Criei um novo usuário. Este novo usuário não consegue abrir nenhuma porta no sistema, mesmo que sejam maiores que 1024.
Para um teste rápido quando executo python -m SimpleHTTPServer
como root
, simplesmente funciona.
~ # python -m SimpleHTTPServer
Serving HTTP on 0.0.0.0 port 8000 ...
No entanto, quando o executo usando o usuário não root, ele falha devido a problemas de acesso.
~ $ 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
Tentei portas diferentes para isso e o usuário não root não consegue abrir nenhuma delas.
Meu entendimento é que apenas o usuário root pode acessar portas <1024, mas outras portas podem ser usadas por usuários não root, desde que sejam gratuitas. No entanto, não consigo usar nenhuma porta. Qualquer indicação será realmente útil.
Responder1
Existe um grupo inet(3003)
que foi atribuído ao usuário, mas não a novos usuários. Depois de adicionar o usuário não root a este grupo, ele poderá abrir as portas e python -m SimpleHTTPServer
funcionar perfeitamente.
Consegui chegar a esses detalhes executando /sbin/ifconfig
como usuário não root. Executá-lo mencionou especificamente que inet
o soquete não estava disponível e mexer um pouco me levou à solução acima.