问题标签 [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.

0 投票
0 回答
1195 浏览

unix - 以“root”身份运行进程,setuid 位未按预期工作 - 不允许操作?

我有一个从网络接口捕获网络流量的程序。(这是一个 C 程序libpcap。)

我正在运行 Fedora 26。

当我运行程序时root,事情看起来很棒:

但是,当我以自己 ( craig) 身份运行程序时,它会失败:

我想要的是任何运行该程序的用户以“root”身份运行它。我我适当地设置了setuid位和所有者/组:

但是行为没有改变——当我运行这个进程时craig,它会因为权限相关的错误而失败。

我错过了一个步骤/设置吗?

0 投票
2 回答
1541 浏览

permissions - cap_dac_override 是 cap_dac_read_search 的超集吗?

我正在努力限制现有的复杂应用程序的功能,并且我一直在寻找一个可靠的来源来证明其中包含的权限cap_dac_overridecap_dac_read_search.

根据以下情况,情况确实如此,这似乎是合乎逻辑的capabilities(7)

CAP_DAC_OVERRIDE
* 绕过文件读取、写入和执行权限检查。

CAP_DAC_READ_SEARCH
* 绕过文件读取权限检查和目录读取和执行权限检查;
* 调用 open_by_handle_at(2);
* 使用 linkat(2) AT_EMPTY_PATH 标志创建指向由文件描述符引用的文件的链接。

此外,我对能力检查跟踪器的实验证实这cap_dac_override应该足够了。cap_dac_read_search似乎在cap_dac_override每次执行读取访问之前都会进行检查。

我还在grsecurity 论坛上找到了以下帖子,不幸的是,这些帖子仅涉及/proc

对于这种情况,上游内核的工作方式是首先检查 CAP_DAC_OVERRIDE,然后检查 CAP_DAC_READ_SEARCH。

cap_dac_read_search如果我想授予我的应用程序对整个文件系统的完全读取访问权限,我仍然不确定是否完全安全。我完全知道cap_dac_override另外授予写权限,我想要那个。

是否有可能在内核的某个地方有一个地方只检查 forcap_dac_read_search而不是 for cap_dac_override

为了安全起见,我应该同时包含这两种功能还是cap_dac_read_search在这种情况下完全多余?

0 投票
1 回答
857 浏览

linux - Which capabilities are needed for statx to stop giving EPERM

I have a Qt project that uses a plugin interface which compiles fine on my system. However, when the same project is compiled inside docker it stopped working with Qt 5.10.1, giving the messageError: Undefined interface. After some straceing the moc run, it turned out that a header file that defines the interface is not found because the statx call on the include's filepath always returns EPERM. The documentation does not even mention how this error can be generated.

docker run --privileged fixes this problem but I would like to avoid excessive permissions so I wanted to set only the necessary ones.

So far I tried to add all of these capabilities (even at the same time) without success:

  • CAP_DAC_OVERRIDE
  • CAP_DAC_READ_SEARCH
  • CAP_FOWNER
  • CAP_SETFCAP

Am I missing something here?

UPDATE

A pull request for this is pending.

0 投票
1 回答
130 浏览

linux - Linux 功能是否划分了可能的特权操作?

更准确地说,是否有任何操作可以使用多个功能来为进程提供必要的权限?

0 投票
1 回答
114 浏览

linux - 如何为我设计的 CPU 制作 Linux 操作系统?

关于架构的背景信息:我刚刚为要放入 FPGA 的 CPU 设计了一组指令,但我希望能够与 Linux(一个简单的 Linux 系统)兼容,但我刚开始这个,我对此了解不多,我确信Linux可以在我的CPU中服务。我认为 AVR 也支持 Linux,但我不知道这是不是真的,但如果这是真的,我认为我的 CPU 也可以。我的 CPU 是 16 位的,它有以下寄存器:

  1. 斧头

  2. BX

  3. CX

  4. DX

  5. 前任

  6. 外汇

这可以支持多达 256 个(16 位寄存器),我也只放了几个寄存器,因为我不知道它是否会给我的 FPGA 中的 VGA 驱动程序空间,认为寄存器文件中可以容纳更多的 8 个寄存器. 我的 FPGA 板有一个 Cyclone IV。我的 CPU 的程序计数器或(PC)是 16 位的。我的 CPU 使用指向两个寄存器的指针(ARP、BRP)处理数据,并将寄存器的值传递给可用于放置 ALU 的值(A、B)的两个输出。为了将数据保存在寄存器中,我也使用了两个指针(CRP,DRP),这些指针指向将存储值的寄存器,指令说明是否要使用指针来保存值,否则,值会被错误地保存在两个寄存器中。我不知道如果我' 我将能够在我的设计中使用 Linux。非常感谢!☺</p>

问题:是否可以将 Linux 移植到 16 位架构?

编辑:在获得嵌入式系统近 3 年的经验之后,我看到这个问题是多么无知。我无法提供这个问题的答案,因为这个问题被标记为不接受答案。但我将尝试解释为什么将 Linux 本地移植到 16 位 CPU 几乎是不可能的。

  • Real Linux 需要 MMU 才能工作,尽管有 uClinux 不需要 MMU。MMU 需要为用户空间程序提供自己的内存地址空间,而不受其他程序的干扰。

  • 16 位地址空间太有限,甚至无法运行所需的内容。由于我见过的较小的 Linux 安装需要 8MB,这与 16 位地址空间(64 KB)相差甚远。

  • Linux内核需要Binutils和GCC来编译!

  • 移植 GCC 将非常棘手和棘手,因为 GCC 旨在针对 32 位架构。

  • 我之前提到这几乎是不可能的,但是,您可以进行仿真,并且在外部硬件的帮助下,您可以仿真另一种架构。但那是作弊,不是吗? http://dmitry.gr/index.php?r=05.Projects&proj=07.%20Linux%20on%208bit

  • 最后,如果您真的想在自定义 CPU 上运行 Linux,请从 RISCV 开始。它支持 GCC 和所有必需的工具,再加上 RISCV 就是未来!

如果您真的想在自定义 CPU 中运行操作系统,可以将其移植到 LCC 编译器。运行实时操作系统。这是一种更现实的方法。但是,这仍然是一个具有挑战性的任务。

0 投票
1 回答
1037 浏览

linux - 在 Yocto ext4 映像中设置 Linux 功能

我打算使用“setcap”在 Yocto 映像中包含的二进制文件上设置一些功能。出于某种原因,这里提到的解决方案对我不起作用: Linux 功能与 yocto 。我通过在 rootfs 创建目录中的二进制文件上运行“getcap”来检查这一点:

不返回任何东西。我也没有在最终运行的 sdcard 映像中找到这些功能。

接下来我尝试了使用 IMAGE_PREPROCESS_COMMAND 的方法。我将 setcap 命令封装在小的 shell 函数中,例如:

并将函数名称附加到 IMAGE_PREPROCESS_COMMAND。这适用于现在在 {IMAGE_ROOTFS} 目录中的我的二进制文件上运行 getcap 确实显示正确的大写设置。但是我仍然没有获得最终运行的 sdcard 映像中的功能。

此外,如果我使用 -o 循环将 rootfs ext4(用于创建最终的 sdcard 映像)安装在目录上,我看不到二进制文件的功能。在我看来,当使用 mkfs.ext4 创建 ext4 时,这些功能会以某种方式丢失。

我必须将 sudo 附加到 setcap,否则它会抱怨说“无法设置 CAP_SETFCAP 有效功能:不允许操作”。虽然我的理解是 IMAGE_PREPROCESS_COMMAND 命令是使用 fakeroot 运行的,所以这个 sudo 不应该是必需的。

所以,总结一下我的问题:

  1. 如何获得使用 ext4 rootfs 映像制作的 sdcard 映像的功能?
  2. 我想使用一种不需要使用“sudo”的方式。

我正在使用 Yocto Krogoth,目前无法升级。

0 投票
1 回答
1274 浏览

docker - 在运行 systemd 的 docker 容器中运行 gdb

我能够使用启动一个运行 systemd 的 docker 容器

但是,gdb 无法在此环境中调试 C 进程,因为它缺乏所需的SYS_PTRACE功能。

我尝试添加--cap-add=SYS_PTRACEdocker run命令行,但随后systemd似乎在启动时挂起(它没有向终端打印任何内容)。当我尝试通过时发生了同样的事情--privileged

0 投票
0 回答
355 浏览

gdb - gdb 如何在没有能力的情况下运行?

我试图理解为什么 gdb 能够调试一个进程,即使它在没有能力的情况下运行。

我的非 root 用户具有以下配置:

GDB 没有激活任何能力

但是我可以调试一个进程,设置一个断点等等。

我认为gdb需要

cap_sys_ptrace

至少为了正确地工作,但似乎我错了。你能解释一下为什么我能够调试一个进程吗?

0 投票
1 回答
39 浏览

install4j - install4j 可以用来允许应用程序绑定到特权端口吗?

当应用程序想要在“特权”端口(低于 1024 的端口号)上绑定(侦听传入数据)时,许多操作系统需要特殊处理。

多种方法可以解决这个问题。

install4j 是否提供允许已安装(服务器)应用程序绑定到适用的平台上的特权端口的功能?

0 投票
1 回答
629 浏览

scheduling - Linux:设置进程优先级和动态加载库

我有一个 linux 应用程序,它使用修改后的rpath(在安装期间设置)加载 *.so 库。它还需要以实时优先级运行。

为了获得实时优先级,它这样做:

但是sched_setscheduler,它是一种特权方法,受CAP_SYS_NICE功能保护。因此,为了在不以 root 身份运行的情况下获得实时优先级,我添加setcap到我的postinst

但是,linux 决定rpath如果程序具有额外的功能,则不应允许它们从中加载库。

有没有办法让我设置自己的优先级加载 rpath 库?

注意:我更喜欢在应用程序或postinst. 我想避免将脚本部署为启动应用程序的唯一方法。我知道sudo chrt -f -p 70 $!可以从脚本中做到这一点。