我有一个应用程序需要打开端口80
。
据此,我提供了打开低端口的二进制功能。 我也赋予了gdb
本身的能力。
当我运行二进制文件时,端口已成功打开,但是当我使用 GDB 运行时,errno = 13
时出错。
重要提示:使用sudo
运行应用程序正是我想要避免的事情
我提供了打开低端口的二进制功能。
调试(跟踪(二进制文件时,内核会忽略其功能。这是一个合理的安全预防措施,因为可以使ptrace
d二进制文件执行任何操作。
我也为 gdb 本身提供了功能。
这不会改变上面的图片。
使用 sudo 运行应用程序正是我想要避免的事情
您不必使用sudo
运行应用程序,只需使用 GDB。
或者,让应用程序打开端口 8080,并设置端口转发。
我想提出一种使用authbind
调试应用程序的替代方法。 这在应用程序代码中无法/不应更改端口号的情况下可能会有所帮助。
使用本文中的信息,我执行以下操作(一次性过程(:
- 如果需要,请安装
authbind
- 须藤触摸
/etc/authbind/byport/80
- 须藤CHMOD 500
/etc/authbind/byport/80
- 须藤笃用户ID。用户标识
/etc/authbind/byport/80
(其中"userid"读取启动用户,很可能是您自己的用户(
从那里开始使用以下方法启动您的应用程序:authbind --deep /path/to/app
优点:无需更改代码中的端口号。
缺点:由于应用需要由authbind
启动,因此可能需要将调试器附加到进程,而不是直接从自己喜欢的 IDE 进行调试。
无需使用此方法设置应用程序的功能(setcap
(。