3

スクリプトに cap_net_bind_service Linux 機能を付与しようとしています。ただし、setcap の使用は機能していないようです。

$ cat listen.sh 
#!/bin/bash

python -m SimpleHTTPServer 80
$ getcap listen.sh 
listen.sh =
$ sudo setcap cap_net_bind_service=+eip ./listen.sh 
$ getcap listen.sh 
listen.sh = cap_net_bind_service+eip
$ ls -al listen.sh 
-rwxrwxr-x. 1 eric eric 43 Jul 11 23:01 listen.sh
$ ./listen.sh 
Traceback (most recent call last):
  File "/usr/lib64/python2.7/runpy.py", line 162, in _run_module_as_main
    "__main__", fname, loader, pkg_name)
  ...
  File "/usr/lib64/python2.7/SocketServer.py", line 434, in server_bind
    self.socket.bind(self.server_address)
  File "/usr/lib64/python2.7/socket.py", line 228, in meth
    return getattr(self._sock,name)(*args)
socket.error: [Errno 13] Permission denied

sudo を使用しても問題なく動作します。

$ sudo ./listen.sh 
Serving HTTP on 0.0.0.0 port 80 ...

これは Fedora 23 ワークステーションにあります。

$ cat /proc/version 
Linux version 4.4.9-300.fc23.x86_64 (mockbuild@bkernel02.phx2.fedoraproject.org) (gcc version 5.3.1 20160406 (Red Hat 5.3.1-6) (GCC) ) #1 SMP Wed May 4 23:56:27 UTC 2016

この時点で少し迷っており、firewalld をオフにしようとしても効果がなく、これをデバッグする方法がわかりません。

4

2 に答える 2