问题标签 [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.
unix - 以“root”身份运行进程,setuid 位未按预期工作 - 不允许操作?
我有一个从网络接口捕获网络流量的程序。(这是一个 C 程序libpcap
。)
我正在运行 Fedora 26。
当我运行程序时root
,事情看起来很棒:
但是,当我以自己 ( craig
) 身份运行程序时,它会失败:
我想要的是任何运行该程序的用户以“root”身份运行它。我想我适当地设置了setuid
位和所有者/组:
但是行为没有改变——当我运行这个进程时craig
,它会因为权限相关的错误而失败。
我错过了一个步骤/设置吗?
permissions - cap_dac_override 是 cap_dac_read_search 的超集吗?
我正在努力限制现有的复杂应用程序的功能,并且我一直在寻找一个可靠的来源来证明其中包含的权限cap_dac_override
是cap_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
在这种情况下完全多余?
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 strace
ing 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.
linux - Linux 功能是否划分了可能的特权操作?
更准确地说,是否有任何操作可以使用多个功能来为进程提供必要的权限?
linux - 如何为我设计的 CPU 制作 Linux 操作系统?
关于架构的背景信息:我刚刚为要放入 FPGA 的 CPU 设计了一组指令,但我希望能够与 Linux(一个简单的 Linux 系统)兼容,但我刚开始这个,我对此了解不多,我确信Linux可以在我的CPU中服务。我认为 AVR 也支持 Linux,但我不知道这是不是真的,但如果这是真的,我认为我的 CPU 也可以。我的 CPU 是 16 位的,它有以下寄存器:
斧头
BX
CX
DX
前任
外汇
这可以支持多达 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 编译器。运行实时操作系统。这是一种更现实的方法。但是,这仍然是一个具有挑战性的任务。
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 不应该是必需的。
所以,总结一下我的问题:
- 如何获得使用 ext4 rootfs 映像制作的 sdcard 映像的功能?
- 我想使用一种不需要使用“sudo”的方式。
我正在使用 Yocto Krogoth,目前无法升级。
docker - 在运行 systemd 的 docker 容器中运行 gdb
我能够使用启动一个运行 systemd 的 docker 容器
但是,gdb 无法在此环境中调试 C 进程,因为它缺乏所需的SYS_PTRACE
功能。
我尝试添加--cap-add=SYS_PTRACE
到docker run
命令行,但随后systemd
似乎在启动时挂起(它没有向终端打印任何内容)。当我尝试通过时发生了同样的事情--privileged
。
gdb - gdb 如何在没有能力的情况下运行?
我试图理解为什么 gdb 能够调试一个进程,即使它在没有能力的情况下运行。
我的非 root 用户具有以下配置:
GDB 没有激活任何能力
但是我可以调试一个进程,设置一个断点等等。
我认为gdb需要
cap_sys_ptrace
至少为了正确地工作,但似乎我错了。你能解释一下为什么我能够调试一个进程吗?
install4j - install4j 可以用来允许应用程序绑定到特权端口吗?
当应用程序想要在“特权”端口(低于 1024 的端口号)上绑定(侦听传入数据)时,许多操作系统需要特殊处理。
有多种方法可以解决这个问题。
install4j 是否提供允许已安装(服务器)应用程序绑定到适用的平台上的特权端口的功能?
scheduling - Linux:设置进程优先级和动态加载库
我有一个 linux 应用程序,它使用修改后的rpath
(在安装期间设置)加载 *.so 库。它还需要以实时优先级运行。
为了获得实时优先级,它这样做:
但是sched_setscheduler
,它是一种特权方法,受CAP_SYS_NICE
功能保护。因此,为了在不以 root 身份运行的情况下获得实时优先级,我添加setcap
到我的postinst
:
但是,linux 决定rpath
如果程序具有额外的功能,则不应允许它们从中加载库。
有没有办法让我设置自己的优先级并加载 rpath 库?
注意:我更喜欢在应用程序或postinst
. 我想避免将脚本部署为启动应用程序的唯一方法。我知道sudo chrt -f -p 70 $!
可以从脚本中做到这一点。