在我的开发盒上有这个限制是非常烦人的,因为除了我之外不会有任何用户.
我知道标准的解决方法,但它们都没有完全符合我的要求:
是否有一些简单的sysctl
变量允许非root进程绑定到Linux上的"特权"端口(端口小于1024),或者我只是运气不好?
编辑:在某些情况下,您可以使用功能来执行此操作.
如果我在特权模式下运行容器,它是否具有所有内核功能,还是需要单独添加它们?
似乎支持Linux内核中的细粒度功能,它允许为进程授予权限,例如,在不授予进程root权限的情况下打开原始套接字或提高线程优先级.
但是,如果有办法授予每个用户的能力,我想知道的是什么.也就是说,允许非root和非suid进程获取这些功能.
我用来LD_LIBRARY_PATH
为应用程序设置某个用户库的路径.但是如果我在这个应用程序上设置功能
sudo setcap CAP_NET_BIND_SERVICE=eip myapplication
Run Code Online (Sandbox Code Playgroud)
然后LD_LIBRARY_PATH
似乎被忽略了.当我启动程序时,Linux抱怨它无法找到某个共享库.
我猜这里有一些保护措施,以防止具有扩展权限的应用程序被劫持.有解决方法吗?
Linux功能(libcap.so)库是否可用于Android?如果没有,我该怎么编译呢?
我想使用sys/capabilities.h
与NDK一起提供的与功能相关的API .但是当我尝试调用函数时cap_get_proc()
,我得到"未定义的引用"错误.
我有一个CPU密集型的应用程序.在单个线程上处理数据时,CPU使用率会持续很长时间达到100%.因此应用程序的性能似乎受到CPU的约束.我已经多线程化了应用程序的逻辑,从而提高了整体性能.但是,CPU使用率几乎不超过30%-50%.我期望CPU(和许多核心)达到100%,因为我同时处理了许多数据集.
下面是我用来启动线程的逻辑的简化示例.当我运行这个例子时,CPU达到100%(在8/16核心机器上).但是,我使用相同模式的应用程序没有.
public class DataExecutionContext
{
public int Counter { get; set; }
// Arrays of data
}
static void Main(string[] args)
{
// Load data from the database into the context
var contexts = new List<DataExecutionContext>(100);
for (int i = 0; i < 100; i++)
{
contexts.Add(new DataExecutionContext());
}
// Data loaded. Start to process.
var latch = new CountdownEvent(contexts.Count);
var processData = new Action<DataExecutionContext>(c =>
{
// The thread doesn't access data from a DB, file,
// network, …
Run Code Online (Sandbox Code Playgroud) 我正在尝试编写一个守护进程,它将使用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
在上面的评论中提到了"不允许操作" .我究竟做错了什么?
如何制作一个设置文件POSIX功能的RPM?如果我尝试以非root用户身份进行操作,那么当我的makefile的安装挂钩尝试运行时,我会收到错误,但如果我不运行,将如何 复制这些功能?似乎没有任何方法可以在RPM spec文件中设置功能.rpmbuild
setcap
setcap
rpmbuild
我运行时遇到的错误(sudo)apm install minimap(或任何其他包):
gyp info it worked if it ends with ok
gyp info using node-gyp@1.0.2
gyp info using node@0.10.35 | linux | x64
gyp http GET https://atom.io/download/atom-shell/v0.21.0/node-v0.21.0.tar.gz
gyp WARN install got an error, rolling back install
gyp ERR! install error
gyp ERR! stack Error: tunneling socket could not be established, cause=Parse Error
gyp ERR! stack at ClientRequest.onError (/usr/share/atom/resources/app/apm/node_modules/npm/node_modules/request/node_modules/tunnel-agent/index.js:168:17)
gyp ERR! stack at ClientRequest.g (events.js:180:16)
gyp ERR! stack at ClientRequest.emit (events.js:95:17)
gyp ERR! stack at Socket.socketOnData (http.js:1593:9)
gyp ERR! stack …
Run Code Online (Sandbox Code Playgroud) 对于我的CUDA开发,我使用的是具有16个内核的机器,以及1个带有16个SM的GTX 580 GPU.对于我正在做的工作,我计划启动16个主机线程(每个核心1个),每个线程启动1个内核,每个线程包含1个块和1024个线程.我的目标是在16个SM上并行运行16个内核.这可能/可行吗?
我试图尽可能多地阅读关于独立上下文的内容,但似乎没有太多可用的信息.据我了解,每个主机线程都可以拥有自己的GPU上下文.但是,如果我使用独立的上下文,我不确定内核是否会并行运行.
我可以将所有16个主机线程中的所有数据读入一个巨型结构,并将其传递给GPU以启动一个内核.但是,复制太多会降低应用程序的速度.
linux ×6
.net ×1
android ×1
asynchronous ×1
atom-editor ×1
c ×1
c# ×1
cuda ×1
cuda-streams ×1
docker ×1
iptables ×1
ipv6 ×1
kubernetes ×1
linux-kernel ×1
node.js ×1
permissions ×1
pthreads ×1
root ×1
rpm ×1
rpm-spec ×1
scheduler ×1
security ×1
ubuntu ×1