问题标签 [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 投票
1 回答
343 浏览

linux - 在 Perl 中编辑 linux 功能

在 C 程序中,您可以使用cap_set_procfrom编辑您的功能libcap。我怎样才能在 Perl 程序中达到同样的效果?

0 投票
1 回答
4636 浏览

c - 更改用户 ID 以分配附加功能

我的自定义程序以非 root 权限执行,用户 ID 为:uid: 1000 euid: 0其中在 fork() 之后,在子进程中调用 execv() 以运行 SSH 客户端服务。由于我在非特权用户下启动程序,当尝试将套接字绑定到设备时,Linux 内核会执行所有权限检查,导致子程序sock_setbindtodevice()在检查CAP_NET_RAW功能时失败,如下所示。

我当时考虑的解决方案是先在子进程中获取root权限,进行设置所需能力等特权操作,然后回退到非root。

这里的一个问题是,需要下拉到非 root 用户,因为当执行 ssh 命令时,我希望生成的DSA/RSA密钥存储在$HOME/.ssh/known_hosts而不是root/.ssh/known_hosts.

请在下面找到代码片段:

结果显示 ssh 成功,但此时程序以 a 方式运行root,这是不正确的。如何返回 UID,uid: 1000 euid: 0以便将 ssh 密钥存储在正确的目录中。

请对我的解决方案发表评论和建议,它真的解决了问题吗?

0 投票
2 回答
5262 浏览

c - 使用 linux 功能是否会禁用 LD_PRELOAD

bind()在我的自定义环境中,预加载了一个拦截器库,它运行,connect()等调用的特殊实现。

我看到的问题是,每当应用程序使用 command 显式启用功能时setcap,执行应用程序无法预加载拦截器库并调用默认 libc connect()

这是预期的行为吗?如果是,禁用的原因可能是什么LD_PRELOAD

是否有任何调整或方法可以用来成功预加载启用功能的库?

0 投票
1 回答
1674 浏览

c - capset 因指向 struct 的指针而失败

我有两个代码示例:
首先,运行正确:

二、fail: Operation not permitted

我认为这两个代码示例是相同的。
当我运行第一个时,它正确执行(使用指向结构的指针)。
但第二个失败(使用结构实例)。
我不知道为什么。你能帮助我吗?

0 投票
2 回答
2061 浏览

python - 如何使用 Python 读取文件功能?

在 Linux 系统上,可以比使用文件功能添加 setuid 位更有选择性地授予 root 权限。详情请参阅capabilities(7)。这些是文件的属性,可以使用getcap程序读取。如何在 Python 中检索这些属性?

即使getcap使用例如来运行程序来subprocess回答这样的问题是可能的,但在检索非常多的能力时它是不可取的。

应该可以使用ctypes. 是否有这种方法的替代品,甚至有图书馆促进这项任务?

0 投票
1 回答
1802 浏览

c - 这是编辑 RLIMIT_NPROC 值的更好方法

我的应用程序创建每个连接线程。应用程序在非零用户 ID 下被破坏,有时线程数超过默认值 1024。我想编辑这个号码,所以我的选择很少

以root身份运行[非常糟糕的主意,还必须与安全性妥协,所以放弃它]

在特权不足的用户下运行,使用setcap并赋予能力CAP_SYS_RESOURCE。然后我可以在我的程序中添加代码

另一件事是编辑/etc/securitylimits.conf ,我可以简单地为开发用户输入并可以输入行,例如

哪里 10k 就足够了。所以我应该继续最后一个选项,所以不愿意更改源代码。而且我更想知道什么是更强大和更标准的方法。

征求你的意见,提前谢谢你:)

PS:如果单个进程的线程数超过 1k,会发生什么情况。我也有 32GB 的 Ram

0 投票
0 回答
1038 浏览

c - 在 linux 进程中设置一些功能然后删除超级用户权限?

在 C 程序中,我必须处理RLIMIT_NPROCRLIMIT_NOFILE限制并另外绑定到小于 1024 的端口。我正在考虑在非特权用户下运行它,因为我的程序只需要两个功能。

我在这里看到我可以为进程设置功能,然后使用setuid(). 现在,如果我在没有 root 权限的情况下分叉将保留功能集列表的进程,那么我的程序将以最低权限继续运行。我的计划的一个非常粗略的概述:

在这里,我缺乏使用任何系统调用来设置功能。对此类功能的任何想法都会有很大帮助。

PS:我可以通过命令实用程序分配大写字母setcap,也可以使用cap_set_file(),但我想以其他方式执行此操作,因为我并非每次都确定二进制文件的路径。

一些有用的 proc 命令来检查进程和子进程的状态cat /proc/<PID>/task/<PID>/statuscat /proc/<PID>/limits

0 投票
1 回答
478 浏览

android - 在 Linux Android 中获取文件的文件能力

我想知道如何获得 Android 文件系统上文件的授权功能。libcap 对我不可用,因此,我不能使用它的功能来获取它。

还有其他选择吗?

0 投票
0 回答
185 浏览

linux - Autoconf、setcap 和 checkinstall

我有一个 autoconf 项目,其中包含一个安装后挂钩,如下所示:

我使用 checkinstall 将其打包并安装在我的本地系统上,但是在 checkinstall 完成后,似乎 $(bindir)/myexecutable 没有任何功能,因为没有提供任何功能getcap /usr/local/bin/myexecuatble,而我期望/usr/local/bin/myexecutable = cap_net_raw+ep.

0 投票
2 回答
3630 浏览

python - 在没有 setcap cap_net_raw 的 Linux 中打开原始套接字

我想在不给 Python cap_net_raw 能力的情况下在 Linux(使用 Python)中打开一个原始套接字。我希望用户拥有这种能力,而不是程序。我正在使用 Ubuntu 12.4。