标签: linux-capabilities

有没有办法让非root进程绑定到Linux上的"特权"端口?

在我的开发盒上有这个限制是非常烦人的,因为除了我之外不会有任何用户.

我知道标准的解决方法,但它们都没有完全符合我的要求:

  1. authbind(Debian测试中的版本,1.0,仅支持IPv4)
  2. 使用iptables REDIRECT目标将低端口重定向到高端口(对于ip6tables,iptables的IPv6版本尚未实现"nat"表)
  3. sudo(以root身份运行是我想避免的)
  4. SELinux(或类似).(这只是我的开发盒,我不想引入很多额外的复杂性.)

是否有一些简单的sysctl变量允许非root进程绑定到Linux上的"特权"端口(端口小于1024),或者我只是运气不好?

编辑:在某些情况下,您可以使用功能来执行此操作.

linux iptables ipv6 root linux-capabilities

362
推荐指数
18
解决办法
26万
查看次数

特权容器和功能

如果我在特权模式下运行容器,它是否具有所有内核功能,还是需要单独添加它们?

linux-kernel docker linux-capabilities kubernetes

56
推荐指数
3
解决办法
7万
查看次数

是否可以为每个用户配置Linux功能?

似乎支持Linux内核中的细粒度功能,它允许为进程授予权限,例如,在不授予进程root权限的情况下打开原始套接字或提高线程优先级.

但是,如果有办法授予每个用户的能力,我想知道的是什么.也就是说,允许非root和非suid进程获取这些功能.

linux security permissions linux-capabilities

32
推荐指数
3
解决办法
3万
查看次数

Linux功能(setcap)似乎禁用了LD_LIBRARY_PATH

我用来LD_LIBRARY_PATH为应用程序设置某个用户库的路径.但是如果我在这个应用程序上设置功能

sudo setcap CAP_NET_BIND_SERVICE=eip myapplication
Run Code Online (Sandbox Code Playgroud)

然后LD_LIBRARY_PATH似乎被忽略了.当我启动程序时,Linux抱怨它无法找到某个共享库.

我猜这里有一些保护措施,以防止具有扩展权限的应用程序被劫持.有解决方法吗?

linux shared-libraries linux-capabilities

26
推荐指数
4
解决办法
1万
查看次数

如何获得Android的libcap(Linux功能库)?

Linux功能(libcap.so)库是否可用于Android?如果没有,我该怎么编译呢?

我想使用sys/capabilities.h与NDK一起提供的与功能相关的API .但是当我尝试调用函数时cap_get_proc(),我得到"未定义的引用"错误.

android linux-capabilities

19
推荐指数
1
解决办法
2563
查看次数

如何使用CAP_SYS_RESOURCE执行进程

我正在使用Linux POSIX mqueue实现,我遇到了问题.对于当前内核,最大邮件大小为1MB,但我需要没有限制.

man mq_overview如果流程具有特权(一个具有CAP_SYS_RESOURCE能力的流程),它就没有限制.我认为root执行的进程已经获得特权,但我仍然收到"消息太长"错误(我的消息有2MB).

如何CAP_SYS_RESOURCE为流程添加功能?

posix linux-capabilities

10
推荐指数
2
解决办法
4473
查看次数

在保留CAP_SYS_NICE的同时删除根UID

我正在尝试编写一个守护进程,它将使用setuid位以root身份启动,但随后会快速恢复为运行该进程的用户.但是,守护程序需要保留将新线程设置为"实时"优先级的能力.我用来设置优先级的代码如下(一旦创建就在一个线程中运行):

struct sched_param sched_param;
memset(&sched_param, 0, sizeof(sched_param));
sched_param.sched_priority = 90;

if(-1 == sched_setscheduler(0, SCHED_FIFO, &sched_param)) {
  // If we get here, we have an error, for example "Operation not permitted"
}
Run Code Online (Sandbox Code Playgroud)

但是,我遇到问题的部分是设置uid,同时保留进行上述调用的能力sched_setscheduler.

我有一些代码在我的应用程序的主线程中运行接近启动:

if (getgid() != getegid() || getuid() != geteuid()) {
  cap_value_t cap_values[] = {CAP_SYS_NICE};
  cap_t caps;
  caps = cap_get_proc();
  cap_set_flag(caps, CAP_PERMITTED, 1, cap_values, CAP_SET);
  cap_set_proc(caps);
  prctl(PR_SET_KEEPCAPS, 1, 0, 0, 0);
  cap_free(caps);
  setegid(getgid());
  seteuid(getuid());
}
Run Code Online (Sandbox Code Playgroud)

问题是在运行此代码后,我sched_setscheduler在上面的评论中提到了"不允许操作" .我究竟做错了什么?

c linux pthreads scheduler linux-capabilities

10
推荐指数
1
解决办法
5667
查看次数

使用libpcap的原始捕获功能(CAP_NET_RAW,CAP_NET_ADMIN)无法在/ usr/bin和朋友之间进行数据包捕获程序

TL; DR:为什么cap_net_raw,cap_net_admin功能只能在/usr/bin(或/usr/sbin)中工作,而不能在其他地方工作?这可以在某个地方配置吗?

我在使用Ubuntu 14.04中的libpcap为我的C程序分配功能时遇到了问题.即使在使用setcap(8)和使用它来分配功能之后getcap(8),我仍然会收到权限错误.似乎功能仅适用于\usr\bin朋友中的可执行文件.

我的程序test.c如下:

#include <stdio.h>
#include <pcap.h>

int main(int argc, char **argv) {
    if (argc != 2) {
        printf("Specify interface \n");
        return -1;
    }
    char errbuf[PCAP_ERRBUF_SIZE];
    struct pcap* pcap = pcap_open_live(argv[1], BUFSIZ, 1, 0, errbuf);
    if (pcap == NULL) {
        printf("%s\n", errbuf);
        return -1;
    }
    return 0;
}
Run Code Online (Sandbox Code Playgroud)

并编译

gcc test.c -lpcap
Run Code Online (Sandbox Code Playgroud)

生成a.out可执行文 我设置了功能:

sudo setcap cap_net_raw,cap_net_admin=eip ./a.out
Run Code Online (Sandbox Code Playgroud)

并检查它是否正确: …

linux ubuntu wireshark libpcap linux-capabilities

10
推荐指数
1
解决办法
7742
查看次数

制作设置POSIX文件功能的RPM

如何制作一个设置文件POSIX功能RPM?如果我尝试以非root用户身份进行操作,那么当我的makefile的安装挂钩尝试运行时,我会收到错误,但如果我不运行,将如何 复制这些功能?似乎没有任何方法可以在RPM spec文件中设置功能.rpmbuildsetcapsetcaprpmbuild

linux rpm rpm-spec linux-capabilities

9
推荐指数
1
解决办法
1397
查看次数

如何找出一个进程需要工作的Linux功能?

我处在一个困难的境地,我不知道一个进程需要工作的Linux功能.什么是最好的方法,或任何方式找出所需的上限?

我现在唯一能想到的就是使用capsh并放弃进程上的所有上限.然后该过程失败,我开始添加大写(通过删除--drop = CAP_XZY),直到它工作.

有更好的建议吗?

linux debugging linux-kernel linux-capabilities

9
推荐指数
3
解决办法
7891
查看次数