问题 和 解决方案
很多这样的情况,一个经典的例子是,开80端口的http server,在IDE中的调试。
以python pyCharm 为例,解决方法大致有三种:
用sudo 打开 IDE
缺点是IDE新建的文件owner将是root,并且和git 一起用可能会有问题新建脚本
sudo python
,然后在pycharm 中用此脚本作为解释器
缺点是调试时不能终止程序(调试器和IDE 一样是非root权限,所以无权终止程序)设置 capability 使程序在bind lower number port 时,不再需要root权限
感觉这个最靠谱
setcap
sudo setcap CAP_NET_BIND_SERVICE+ep /bin/nc.openbsd`
## 或者
sudo setcap 'cap_net_bind_service=+ep' ~/python35-setcap
这里用nc举例,因为 nc -l 80
立刻可以看到效果
当前的问题,可以把/bin/nc.openbsd
替换为需要的解释器或者可执行程序的绝对路径,不过只能是可执行文件,软连接是不可以的
参数中的+ep
:permitted(P
)和effective(E
)
还有另外一个是i
,inheritable(I
)、
查看文件的capability:
getcap xxx
参考:
这篇三种方法都有提:
https://stackoverflow.com/questions/14299509/debugging-in-pycharm-with-sudo-privileges
这篇是第二种方法的具体操作:
https://esmithy.net/2015/05/05/rundebug-as-root-in-pycharm/
capability参考:
https://blog.csdn.net/zhao_cancan/article/details/38366541