非ルートユーザーはポートを開くことができません

非ルートユーザーはポートを開くことができません

私は Yocto を使用して構築した組み込み Linux システムを持っています。構築直後は、ルート ユーザーしかありませんでした。新しいユーザーを作成しました。この新しいユーザーは、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

これについてさまざまなポートを試しましたが、非ルートユーザーはいずれも開くことができません。

私の理解では、1024 未満のポートにアクセスできるのはルート ユーザーだけですが、他のポートは空いている限り、非ルート ユーザーでも使用できます。ただし、ポートをまったく使用できません。何かアドバイスがあれば、本当に助かります。

答え1

グループがありinet(3003)、これはユーザーには割り当てられていますが、新しいユーザーには割り当てられていません。このグループに非ルート ユーザーを追加すると、ポートを開いてpython -m SimpleHTTPServer正常に実行できるようになります。

/sbin/ifconfig非ルート ユーザーとして実行することで、この問題の詳細にたどり着くことができました。実行するとinet、ソケットが利用できないことが具体的に示され、少しいじくり回した結果、上記の解決策にたどり着きました。

関連情報