Angus's Blog
Please just enjoy your life!
Toggle navigation
Angus's Blog
Home
About Me
Archives
Tags
非root用户使用1024以下端口(Linux的Capabilities)
2023-03-28 10:56:49
18
0
0
admin
# 非root用户使用1024以下端口(Linux的Capabilities) ## 1. 问题背景 曾经的一个项目中用到需要Modbus TCP协议的502端口,但是我们使用的时候是非root用户,没有权限访问1024以下的端口。最简单的方法是将通讯的端口自定义为大于502的端口,但凑巧的是对方没有将自定义端口的功能调出来(就是懒的),就只能通过修改用户权限达到访问1024以下端口的目的。 ## 2. 解决方法 ### 2.1 进入root用户 在命令终端中输入 su root ``` $ su root password: $ ``` 分配用户权限,可以进入需要访问1024以内端口的程序所在的文件夹,输入以下指令,输入后该文件就可以调用1024以内端口了。 ``` /*filename为可执行程序的文件名, path为文件路径*/ # setcap cap_net_bind_service=+ep /path/filename ``` ## 3. 附 ### 3.1 Capabilities介绍 Capabilities是从 Linux2.2 内核之后开始引入的,旨在打破了系统中超级用户与普通用户的概念,由普通用户也可以做只有超级用户可以完成的工作。 Capabilites 作为线程(Linux 并不真正区分进程和线程)的属性存在,每个功能组都可以独立启用和禁用。其本质上就是将内核调用分门别类,具有相似功能的内核调用被分到同一组中。 在执行特权操作时,如果线程的有效身份不是 root,就去检查其是否具有该特权操作所对应的 capabilities,并以此为依据,决定是否可以执行特权操作。Capabilities 可以在进程执行时赋予,也可以直接从父进程继承。 ### 3.2 Capabilities其他功能名称 |capability 名称 |capability 描述 | |---|---| |CAP_AUDIT_CONTROL|启用和禁用内核审计;改变审计过滤规则;检索审计状态和过滤规则 | |CAP_AUDIT_READ| 允许通过 multicast netlink 套接字读取审计日志| |CAP_AUDIT_WRITE| 将记录写入内核审计日志| |CAP_BLOCK_SUSPEND| 使用可以阻止系统挂起的特性| |CAP_CHOWN| 修改文件所有者的权限| |CAP_DAC_OVERRIDE| 忽略文件的 DAC 访问限制| |CAP_DAC_READ_SEARCH| 忽略文件读及目录搜索的 DAC 访问限制| |CAP_FOWNER| 忽略文件属主 ID 必须和进程用户 ID 相匹配的限制| |CAP_FSETID| 允许设置文件的 setuid 位| |CAP_IPC_LOCK| 允许锁定共享内存片段| |CAP_IPC_OWNER| 忽略 IPC 所有权检查| |CAP_KILL| 允许对不属于自己的进程发送信号| |CAP_LEASE| 允许修改文件锁的 FL_LEASE 标志| |CAP_LINUX_IMMUTABLE| 允许修改文件的 IMMUTABLE 和 APPEND 属性标志| |CAP_MAC_ADMIN| 允许 MAC 配置或状态更改| |CAP_MAC_OVERRIDE| 忽略文件的 DAC 访问限制| |CAP_MKNOD| 允许使用 mknod() 系统调用| |CAP_NET_ADMIN| 允许执行网络管理任务| |CAP_NET_BIND_SERVICE| 允许绑定到小于 1024 的端口| |CAP_NET_BROADCAST| 允许网络广播和多播访问| |CAP_NET_RAW| 允许使用原始套接字| |CAP_SETGID| 允许改变进程的 GID| |CAP_SETFCAP| 允许为文件设置任意的 capabilities| |CAP_SETPCAP| 参考 capabilities man page| |CAP_SETUID| 允许改变进程的 UID| |CAP_SYS_ADMIN| 允许执行系统管理任务,如加载或卸载文件系统、设置磁盘配额等|| |CAP_SYS_BOOT| 允许重新启动系统| |CAP_SYS_CHROOT| 允许使用 chroot() 系统调用| |CAP_SYS_MODULE| 允许插入和删除内核模块| |CAP_SYS_NICE| 允许提升优先级及设置其他进程的优先级| |CAP_SYS_PACCT| 允许执行进程的 BSD 式审计| |CAP_SYS_PTRACE| 允许跟踪任何进程| |CAP_SYS_RAWIO| 允许直接访问 /devport、/dev/mem、/dev/kmem 及原始块设备| |CAP_SYS_RESOURCE| 忽略资源限制| |CAP_SYS_TIME| 允许改变系统时钟| |CAP_SYS_TTY_CONFIG| 允许配置 TTY 设备| |CAP_SYSLOG| 允许使用 syslog() 系统调用| |CAP_WAKE_ALARM| 允许触发一些能唤醒系统的东西(比如 CLOCK_BOOTTIME_ALARM 计时器)| ### 3.3 Capabilities的使用方法 getcap 命令和 setcap 命令分别用来查看和设置程序文件的 capabilities 属性。 在执行特权操作时,如果线程的有效身份不是 root,就去检查其是否具有该特权操作所对应的 capabilities,并以此为依据,决定是否可以执行特权操作。Capabilities 可以在进程执行时赋予,也可以直接从父进程继承。 ``` /*setcap设置文件capabilities属性*/ # setcap ‘cap_net_bind_service=+eip’ /path/filename /*setcap撤销文件capabilities属性*/ # setcap 'cap_net_bind_service=-ep' /path/to/program /*getcap查看文件capabilities属性*/ # getcap /path/to/program ```
Pre:
快速排序算法和二分查找算法整合
Next:
OpenSSL 自签发证书
0
likes
18
Weibo
Wechat
Tencent Weibo
QQ Zone
RenRen
Table of content