问题标签 [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.
c - ubuntu 和 libcap(功能)未定义参考
我正在尝试在 ubuntu 10.10 上编译以下最小 C 代码:
这给了gcc -lcap test.c
我以下错误:
我安装了 libcap2-dev 和 libcap2-bin,版本 2.21
使用相同 gcc 命令的相同代码在 arch 和 gentoo 上成功构建
我应该怎么做才能让它也建立在 ubuntu 上?
c++ - 应用程序的网络功能
我正忙于在 Linux 计算机上用 C++ 开发应用程序。该应用程序使用使用以太网适配器和网络的第 3 方库。该库是 GigE Vision 相机的库。在启动时,我的应用程序尝试连接到相机,然后它返回有关相机的信息,然后它开始将视频流式传输到应用程序。
一段时间后,应用程序无法连接或从摄像头获取摄像头信息,但以 root (sudo) 身份运行应用程序可以解决问题。
我已经联系了图书馆的供应商,他们表示我应该做以下事情:
感觉以 root 身份运行会损害其系统安全性的用户可能会发现以下实现令人满意:
- 将可执行文件所有者设置为 root。
- 在可执行文件上设置“setuid”权限位
- 在代码中,当应用程序启动时,使用 capset() 释放除这些权限之外的所有权限:CAP_SYS_NICE、CAP_NET_ADMIN、CAP_NET_BROADCAST、CAP_NET_RAW 应用程序将以所有 root 权限启动,但在启动后会立即删除它们。
这确实有效,但是在不更改可执行文件的情况下,我是否有另一种方法可以做到这一点?我正在考虑将我的用户添加到允许我访问这些权限的某个组中,我们将不胜感激。
上述解决方案并不是最优的,因为每次编译后我都需要更改所有者并设置权限。该应用程序用于录制视频和捕获图像。对于上述解决方案,这些记录和捕获也归根用户所有,并且在分发文件时需要将用户改回。
操作系统:Ubuntu Linux 11.10 环境:C++ 和 Qt
linux - Linux 功能 (setcap) 似乎禁用了 LD_LIBRARY_PATH
我用来LD_LIBRARY_PATH
为应用程序设置某个用户库的路径。但是如果我在这个应用程序上设置功能
然后LD_LIBRARY_PATH
似乎被忽略了。当我启动该程序时,Linux 抱怨它找不到某个共享库。
我猜想有某种保护措施,以防止具有扩展权限的应用程序被劫持。有解决方法吗?
c - 如何在limits.conf 中为CAP_IPC_OWNER 添加Linux 功能?
我有一个/etc/security/limits.conf
文件如下
现在我希望用户“manu”能够使用shmctl
需要的功能CAP_IPC_OWNER
,我应该如何修改这个文件才能拥有这个功能?可能吗?
c - 在 setuid() 之后失去能力
试图设置cap_setgid
, cap_setuid
, cap_setpcap
.
执行在 root 用户下进行。跟踪程序显示了这一点
权限已设置但不起作用。任何建议如何解决这个问题?
更新:prctl
添加到代码
所以现在是
之后继承了setuid
大写,手动设置的大写仍然存在,但没有解决问题
UPDATE2:无法理解。我在 1st 之后添加了 2strs setuid
,以检查上限。
它回来了
未设置有效标志,但 cap_set_flag 返回 0
linux - FUSE 文件系统上的 Linux 功能
我有一个 FUSE 文件系统,我在其中编写了getxattr
和setxattr
这样的代码:
和
我已经对此进行了测试,除了功能之外它工作得很好:当我使用 setcap 为程序设置功能并运行它时,程序无法执行特权工作。尽管 getcap 返回了我之前设置的功能。
有人可以告诉我一种跟踪问题的方法或给我一些关于正在发生的事情的指示吗?
c - 在保留 CAP_SYS_NICE 的同时删除根 UID
我正在尝试编写一个守护进程,它将使用 setuid 位以 root 身份启动,但随后很快恢复为运行该进程的用户。然而,守护进程需要保留将新线程设置为“实时”优先级的能力。我用来设置优先级的代码如下(创建后在线程中运行):
但是,我遇到问题的部分是设置 uid,同时保留对sched_setscheduler
.
我有一些代码在我的应用程序的主线程中接近启动时运行:
问题是,在运行此代码后,我在调用时得到“不允许操作”,sched_setscheduler
正如上面评论中提到的那样。我究竟做错了什么?
c - 带有 setuid/功能的 stdbuf
我正在读取另一个生成输出(缓慢且无限)的进程的输出。因为我想实时读取这些数据,所以我使用“stdbuf -oL”(行缓冲,数据是文本)。我无法控制生成过程,因此我无法修改源以强制刷新。
到目前为止 stdbuf 工作得很好,但是该进程使用 SOCK_RAW 并且需要以 root 身份运行,具有 setuid(0) 或cap_net_raw
功能。当使用 setuid 或功能以非 root 身份运行时,stdbuf 似乎被忽略了。让我演示一下这个问题:
这是一个简单的作家:
和一个简单的读者:
正如预期的那样,./writer | ./reader
在缓冲区填满之前,什么都不显示。前置stdbuf -oL
启用行缓冲,我将这些行输入阅读器:
但是,如果我添加cap_net_raw+ep
它会停止工作:
使用 setuid 时观察到相同的行为:
我有兴趣了解为什么会发生这种情况以及如何在不以 root 身份运行的情况下继续使用 stdbuf。我承认我并不完全了解 setuid 在幕后所做的事情。
linux - Linux 功能如何与零/非零 UID 相关?
功能手册页相当长,我不完全理解某些内容。
例如,一个决定我们是否可以访问 CAP_NET_RAW 的函数会是什么样子?
输入:
- a = 有效 uid 为 0
- b = 有一些真实的/保存的/任何 uid 为 0
- c = CAP_NET_RAW 为 +e
- d = CAP_NET_RAW 为 +i
- e = CAP_NET_RAW 为 +p
- f = CAP_NET_RAW 被排除在“边界集”之外
输出:
- x = 我们现在可以调用
socket
而不是得到 EPERM - y = 经过一些诡计(不涉及基于文件系统
chmod +s
或setcap
访问提升或连接到外部助手),例如,capsetp
我们终于可以让自己打开原始套接字。
据我目前了解,它是这样的:
- x = !f && (a || c)
- y = !f && (b || a || c || e)
实际情况如何?
linux - 尽管缺少基于文件系统的功能,如何执行进程并保留功能?
我想让系统在没有setuid
文件“+p”功能的情况下可用,并且通常没有在我设置PR_SET_NO_NEW_PRIVS时被禁用的东西。
使用这种方法(init
集合PR_SET_NO_NEW_PRIVS
和基于文件系统的能力提升不再可能)你不能“重新填充”你的能力,只需要小心不要“飞溅”它们。
如何在execve
不“破坏”任何授予功能的情况下进行其他进程(例如,如果新程序的文件是setcap =ei
)?只是“我相信这个新过程,就像我相信自己一样”。例如,给用户一个能力(并且用户想在他启动的任何程序中锻炼它)......
我可以永久制作整个文件系统=ei
吗?我想保持文件系统不干扰方案,不能授予或撤销功能;通过父->子控制一切。