问题标签 [linux-capabilities]
For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.
linux - Raw capture capabilities (CAP_NET_RAW, CAP_NET_ADMIN) not working outside /usr/bin and friends for packet capture program using libpcap
TL;DR: Why are cap_net_raw
, cap_net_admin
capabilities only working in /usr/bin
(or /usr/sbin
), but not other places? Can this be configured someplace?
I'm having problems assigning capabilities to my C program utilizing libpcap in Ubuntu 14.04. Even after assigning capabilities using setcap(8)
and checking it using getcap(8)
, I still get a permission error. It seems capabilities only work for executables in \usr\bin
and friends.
My program test.c
looks as follows:
and is compiled with
generating a.out
executable. I set capabilities:
And check to see that it looks right:
which gives me
Running a.out
gives me:
Running with sudo
works as expected (program prints nothing and exits).
Here's the interesting part: If I move a.out
to /usr/bin
(and reapply the capabilities), it works. Vice versa: taking the capability-enabled /usr/bin/dumpcap
from wireshark
(which works fine for users in the wireshark
group) and moving it out of /usr/bin
, say to my home dir, reapplying the same capabilities, it doesn't work. Moving it back, it works.
SO: Why are these capabilities only working in /usr/bin
(and /usr/sbin
), but not other places? Can this be configured someplace?
linux-capabilities - 如何扫描进程能力
我想看看正在运行的进程的 linux 功能。
linux - Linux 功能可以与 binfmt_misc 一起使用吗?
我可能对将 Linux 功能用于程序(特别cap_net_bind_service
是允许程序绑定到小于 1024 的 TCP 端口)感兴趣。
但是,我想为在 Mono 下运行的 C# 程序执行此操作。通常,我认为这意味着 Mono 解释器本身需要设置功能,而不是whatever.exe
它运行的程序。
但是,Linux 也可以通过内核binfmt_misc机制支持 Mono 二进制内核。
那么,内核 binfmt_misc 机制是否适用于功能?也就是说,启用 binfmt_misc 的特定可执行文件可以使用特定的功能集运行。
linux - 较新版本的 docker 有 --cap-add,可以添加哪些 CAP?
较新版本的 docker(我认为是 1.2 及更高版本)有一个--cap-add
特性。
这提供了对特性功能的细粒度控制,而无需使用--privileged=true
.
我用谷歌搜索了它,但找不到功能列表及其含义。任何人都可以帮忙吗?
linux - 如何计算进程的最小能力集?
为任何进程计算最小的 Linux 功能集的最佳方法是什么?
假设您正在强化操作系统,其中一些工具可能需要CAP_NET_ADMIN
相关的网络权限,而其他工具可能需要CAP_SYS_NICE
. 应该有一种方法可以告诉每个可执行文件真正需要哪些功能。
python-2.7 - 无法让 CAP_CHOWN 和 CAP_DAC_OVERRIDE 为普通用户工作
我的要求
我的 python 服务器在 RHEL 上作为普通用户运行,但它需要在它无法访问的地方创建文件/目录。还需要使用随机 UID/GID 对那些文件进行 chown
我的方法
在仅功能环境中尝试此操作,没有 setuid。我正在尝试利用 cap_chown 和 cap_dac_override 功能。但是我完全不知道如何让它在 systemctl 那种环境中工作
目前我在服务文件中有以下内容:
并遵循二进制本身:
但是这里说,它永远不会在脚本上工作: 有没有办法让非 root 进程绑定到 Linux 上的“特权”端口?
在当前设置下,我对运行进程的能力是:
但是,如果我尝试从该脚本中在 /etc/ 中创建文件:
它因“权限被拒绝”而失败
对我来说,它不起作用是同样的情况吗?我可以在这里使用 python-prctl 模块让它工作吗?
java - 将 linux 功能分配给一个 java 进程
我运行了许多 java 进程,但我只想将 cap_net_raw linux 功能分配给一个 java 进程。目前,如果我执行此“setcap cap_net_raw=ep /usr/java/default/bin/java”,则此功能将分配给所有 java 进程。
在做了一些研究之后,我认为我将不得不编写 ac 包装程序并将上述功能赋予该程序,java 进程将在 execv 中继承。另一项研究表明,可以通过 systemd 分配能力。
我不确定如何使用 systemd 功能选项,以及它是否是一个可行的选项。
有人可以指导我走哪条路以及该怎么做吗?谢谢
linux - Linux Cap_Kill 需要帮助
学校作业需要演示 cap_kill 功能的使用。据我了解,此功能应该允许给定程序向任何进程发送任何信号并成功。
我使用了以下行:
因此,kill 命令应该能够发送 SIGKILL 例如到任何进程。但是,添加此功能后,我仍然只能杀死自己的进程,因此无法看到添加该功能的任何效果。我想我什至应该能够kill -9 1
拥有这种能力,但我收到了bash: kill: (1) - Operation not permitted
我应该如何展示这种能力?谢谢你。
docker - 减少 SYS_ADMIN Linux 功能
我正在创建一个 Docker 容器,我不想为其保持“特权”标志为真。这是为了使其更安全并更好地控制。我的容器主要从事以下任务(这将帮助我定义它的资源访问范围并相应地强制执行访问控制) 1. 在容器上挂载 gluster 文件 sys 2. 运行 SSH 守护进程以接受传入的 SSH 连接 3. 运行一些通常可用的 bash 命令
我在运行 docker 容器时使用了“--cap-add=SYS_ADMIN”选项来实现这一点。但是,由于 SYS_ADMIN 添加了比我需要的更多的权限(如下所列)。如何仅实现 SYS_ADMIN 功能的子集?
SYS_ADMIN:
执行一系列系统管理操作,包括:quotactl(2)、mount(2)、umount(2)、swapon(2)、swapoff(2)、sethostname(2) 和 setdomainname(2)。
执行特权系统日志(2)
操作(从 Linux 2.6.37 开始,应该使用 CAP_SYSLOG 来允许
此类操作)。执行 VM86_REQUEST_IRQ vm86(2) 命令;对任意 System V IPC 对象执行 IPC_SET 和 IPC_RMID 操作
对可信和安全的扩展属性执行操作(参见
attr(5))- 使用lookup_dcookie(2)。
使用 ioprio_set(2) 分配
IOPRIO_CLASS_RT 和(Linux 2.6.25 之前)IOPRIO_CLASS_IDLE I/O
调度类。传递套接字凭据时伪造 UID。
超过 /proc/sys/fs/file-max,系统范围内打开文件数量的限制,在打开文件的系统调用中(例如,accept(2)、execve(2)、open(2)、pipe( 2))。
- 使用 CLONE_* 标志,使用 clone(2) 和 unshare(2) 创建新的命名空间。
- 调用 perf_event_open(2)。
- 访问特权性能事件信息。
- 调用 setns(2)。
- 调用 fanotify_init(2)。
- 执行 KEYCTL_CHOWN 和 KEYCTL_SETPERM keyctl(2) 操作。
- 执行 madvise(2) MADV_HWPISON 操作。
- 使用 TIOCSTI ioctl(2) 将字符插入到终端的输入队列中,而不是调用者的控制终端。使用过时的 nfsservctl(2) 系统调用。
- 使用过时的 bdflush(2) 系统调用。
- 执行各种特权块设备 ioctl(2) 操作。
- 执行各种特权文件系统 ioctl(2) 操作。
- 在许多设备驱动程序上执行管理操作。
linux - 为什么 CAP_NET_RAW 不适用于 SO_BINDTODEVICE?
我有以下简单的测试程序来创建一个 UDP 套接字并将其绑定到一个特定的接口,SO_BINDTODEVICE
这样我就可以bind()
在INADDR_ANY
该接口上专门接收 UDP 广播。
当我以非 root 用户身份运行该程序时,我得到以下输出:
这是非常合乎逻辑的,因为我不是root
而且SO_BINDTODEVICE
是特权操作。但正如我从 Linux 内核的这段代码中CAP_NET_RAW
所理解的那样,它包含在功能中:
好吧,当我这样做时:
我得到相同的错误输出:
当然它的工作原理是root
:
那么为什么他们不按预期工作呢?