天道酬勤,学无止境

Does anyone know a workaround for no-new-privileges blocking selinux transitions in docker?

问题

我正在尝试使用 no-new-privileges 标志和启用 Selinux 在 docker 下运行(任何)容器。

基本信息:

CentOS 7.3 on bare metal
docker-ce 17.05.0-ce (edge) from official repo
docker-ce-selinux 17.05.0-ce (edge) from official repo

(我最初运行稳定,并切换到边缘版本希望得到修复)

我正在尝试做的事情:

docker run --security-opt "no-new-privileges" -it --rm busybox /bin/sh

发生什么了:

standard_init_linux.go:178: exec user process caused "operation not permitted"

支持所有功能 - Selinux 在未指定 no-new-privileges 时工作; 当守护进程在没有 selinux 支持的情况下运行时,no-new-privileges 有效。 许可与强制模式无效。

码头工人信息:

Containers: 0
 Running: 0
 Paused: 0
 Stopped: 0
Images: 40
Server Version: 17.05.0-ce
Storage Driver: btrfs
 Build Version: Btrfs v4.4.1
 Library Version: 101
Logging Driver: journald
Cgroup Driver: cgroupfs
Plugins:
 Volume: local
 Network: bridge host macvlan null overlay
Swarm: inactive
Runtimes: runc
Default Runtime: runc
Init Binary: docker-init
containerd version: 9048e5e50717ea4497b757314bad98ea3763c145
runc version: 9c2d8d184e5da67c95d601382adf14862e4f2228
init version: 949e6fa
Security Options:
 seccomp
  Profile: default
 selinux
Operating System: CentOS Linux 7 (Core)
OSType: linux
Architecture: x86_64
CPUs: 2
Total Memory: 3.536GiB
Name: localhost.localdomain
ID: EAGL:4QBW:GYM3:XY3U:YOSJ:7NBJ:O5OB:6HWY:S255:2X7D:MFHN:ZOYS
Docker Root Dir: /var/lib/docker
Debug Mode (client): false
Debug Mode (server): false
Username: -----
Registry: https://index.docker.io/v1/
Experimental: false
Insecure Registries:
 127.0.0.0/8
Live Restore Enabled: false

'sudo ausearch -m avc -ts 最近' 结果

<no matches>

但结果是“sudo ausearch -m SELINUX_ERR -ts 最近”

time->Tue May 23 02:07:55 2017
type=PROCTITLE msg=audit(1495519675.981:996345): proctitle=2F70726F632F73656C662F65786500696E6974
type=PATH msg=audit(1495519675.981:996345): item=0 name="/bin/sh" inode=260 dev=00:22 mode=0100755 ouid=0 ogid=0 rdev=00:00 obj=system_u:object_r:svirt_sandbox_file_t:s0:c7,c132 nametype=NORMAL
type=CWD msg=audit(1495519675.981:996345):  cwd="/"
type=BPRM_FCAPS msg=audit(1495519675.981:996345): fver=0 fp=0000000000000000 fi=0000000000000000 fe=0 old_pp=00000000a80425fb old_pi=00000000a80425fb old_pe=00000000a80425fb new_pp=00000000a80425fb new_pi=00000000a80425fb new_pe=00000000a80425fb
type=SYSCALL msg=audit(1495519675.981:996345): arch=c000003e syscall=59 success=no exit=-1 a0=c420142260 a1=c420142270 a2=c420122960 a3=0 items=1 ppid=30894 pid=30910 auid=4294967295 uid=0 gid=0 euid=0 suid=0 fsuid=0 egid=0 sgid=0 fsgid=0 tty=pts1 ses=4294967295 comm="runc:[2:INIT]" exe="/usr/bin/docker-runc" subj=system_u:system_r:container_runtime_t:s0 key=(null)
type=SELINUX_ERR msg=audit(1495519675.981:996345): op=security_bounded_transition seresult=denied oldcontext=system_u:system_r:container_runtime_t:s0 newcontext=system_u:system_r:svirt_lxc_net_t:s0:c7,c132

我认为这里的关键是

type=SELINUX_ERR msg=audit(1495519675.981:996345): op=security_bounded_transition seresult=denied oldcontext=system_u:system_r:container_runtime_t:s0 newcontext=system_u:system_r:svirt_lxc_net_t:s0:c7,c132

如果我没看错的话,没有新的特权会阻止 selinux 转换。 有没有人知道解决这个问题的方法,除了禁用其中一个安全功能吗? 如果需要更多信息,请告诉我!

回答1

弄清楚了; 为其他有同样问题的人发帖。 问题确实是没有阻止 selinux 转换的新权限。 通过编译一个小的 selinux 策略,使容器类型明确地受容器运行时类型的限制,没有新的权限将允许转换。 我正在使用来自 docker-ce 边缘存储库的默认 centos docker-ce-selinux 策略,因此我的容器运行时类型是 container_runtime_t,而我的容器类型是 svirt_lxc_net_t。 其他包/发行版可能使用不同的类型。

在空目录中创建了一个名为“dockersvirt.te”的策略文件。

module dockersvirt 1.0;

require {
    type container_runtime_t;
    type svirt_lxc_net_t;
    role system_r;
};

typebounds container_runtime_t svirt_lxc_net_t;

然后编译并安装新策略。

checkmodule -M -m -o dockersvirt.mod dockersvirt.te
semodule_package -o dockersvirt.pp -m dockersvirt.mod
sudo semodule -i dockersvirt.pp

请注意,理论上可能存在副作用,但容器运行时是一个非常特权的域,因此不应对容器类型施加太多实际的新界限。 对我来说没有问题,但是 YMMV。

受限制的 HTML

  • 允许的HTML标签:<a href hreflang> <em> <strong> <cite> <blockquote cite> <code> <ul type> <ol start type> <li> <dl> <dt> <dd> <h2 id> <h3 id> <h4 id> <h5 id> <h6 id>
  • 自动断行和分段。
  • 网页和电子邮件地址自动转换为链接。

相关推荐
  • Does anyone know a workaround for no-new-privileges blocking selinux transitions in docker?
    I'm trying to run (any) container under docker with the no-new-privileges flag and Selinux enabled. Basic Info: CentOS 7.3 on bare metal docker-ce 17.05.0-ce (edge) from official repo docker-ce-selinux 17.05.0-ce (edge) from official repo (I was originally running stable, and switched to the edge release hoping for a fix) What I'm trying to do: docker run --security-opt "no-new-privileges" -it --rm busybox /bin/sh What happens: standard_init_linux.go:178: exec user process caused "operation not permitted" All features are supported - Selinux works when no-new-privileges is not specified; no
  • 使用calc()在IE中转换宽度和高度(Using calc() to transition width and height in IE)
    问题 我今天遇到一个问题,其中尝试使用CSS过渡来通过calc()更改对象的尺寸在IE中不起作用。 或者,相反,它们在某种意义上起作用,即已应用计算所得的值,但忽略了转换规则。 在此处查看示例:http://jsfiddle.net/32Qr7/ .block { width: 350px; height: 100px; background-color: red; margin: 10px; padding-left: 10px; transition: all 1s ease-in-out; } .block:hover { width: calc(100% - 50px); height: calc(150px + 10%); } 在此示例中,存在一个div,该div在悬停一秒钟的过程中会更改其宽度,高度和背景颜色。 在IE中,背景颜色仍然可以进行平滑的动画设置,但是宽度和高度的变化是瞬时的。 对我来说,这是一个很大的问题,因为我有一个响应式Web应用程序,其中的抽屉从侧面滑出,其余布局必须进行调整以进行补偿。 由于我要处理多种屏幕尺寸,因此无法使用硬编码的值。 (是的,我查看了IE 10 + 11:使用calc()进行CSS转换无法在此处找到解决方案,但是该问题不涉及尺寸更改,因此,被接受的解决方案对我而言不起作用) 有谁知道解决此问题的方法,或者有其他建议替代的策略吗?
  • Using calc() to transition width and height in IE
    I've come across an issue today where trying to use CSS transitions to change an object's dimensions with calc() aren't working in IE. Or, rather, they're working in the sense that the calculated values are being applied but the transition rules are being ignored. See an example here: http://jsfiddle.net/32Qr7/ .block { width: 350px; height: 100px; background-color: red; margin: 10px; padding-left: 10px; transition: all 1s ease-in-out; } .block:hover { width: calc(100% - 50px); height: calc(150px + 10%); } In this example, a div exists which changes its' width, height, and background-color
  • 最初隐藏的元素上的CSS过渡(CSS transition on an initially hidden elemement)
    问题 我想在具有display: none的元素上进行css转换display: none设置。 考虑以下代码: <!DOCTYPE html> <html> <head> <meta charset="utf-8"> <title>CSS Transition From Hidden</title> <style type="text/css"> div { -webkit-transition-property: all; -webkit-transition-duration: 2s; } div.hidden { display: none; opacity: 0; } div.from { opacity: 0; } </style> <script type="text/javascript"> function loaded() { var e = document.getElementById("foo"); e.className = "from"; window.webkitRequestAnimationFrame(function(t) { e.className = null; }); } </script> </head> <body onload="loaded()"> <div id="foo" class="hidden"> My test div
  • jQuery 循环:在 Windows/Firefox/Cleartype Enabled 中,淡入淡出的白色文本变为“绿色”(jQuery cycle: fading white text becomes "green" in Windows/Firefox/Cleartype Enabled)
    问题 在 Windows 上,似乎当任何背景上有白色文本并且它进行转换时,文本在其opacity值切换回 1 期间自然会变成某种绿色阴影。 这是有道理的。 但是,除了将文本的颜色从白色更改为其他颜色之外,有没有人知道任何类型的解决方法来防止它在动画之间过渡到绿色阴影? 我这里有一个完整的演示。 笔记: 它在 Linux 中对我不起作用,因为没有 ClearType,它仅在我在 Windows 上启用 ClearType 时发生。 我指定了cleartype:true cleartypeNoBg但据我所知,这只能解决 IE7 中的另一个问题。 我知道如果你禁用 ClearType 它就会消失 我愿意接受某种涉及不同动画风格(除淡入淡出之外)的解决方法,但请向我提出您的任何想法。 编辑:认为我在这里找到了错误。 编辑#2 :查看这里的转换。 似乎 scrollRight 可以代替淡入淡出。 回答1 在文本元素上指定背景颜色,您将不再看到任何绿色 回答2 当我有淡入淡出过渡时,我也注意到了这一点,当文本为灰色时,淡入淡出似乎添加了发光的绿色。 看起来有点可怕,但在 ie 家庭中看起来很好! 暂时关闭了淡入淡出。 !
  • jQuery cycle: fading white text becomes "green" in Windows/Firefox/Cleartype Enabled
    On Windows it seems that when there's white text on any background and it does transitions, the text naturally turns to some shade of green during its opacity value being toggled back to 1. This makes sense. But does anyone know any sort of workaround to prevent it transitioning to a shade of green between the animating besides changing the color of the text from white to something else? I have a full demo here. Notes: It doesn't do it for me in Linux since there is no ClearType, it only happens when I enable ClearType on Windows. I specified cleartype:true cleartypeNoBg but as far as I know
  • 强制 CSS 的解决方法:在转换后悬停更新(打开菜单)(Workaround to force CSS :hover to update after a transition (opening a menu))
    问题 已经有几个问题解决了这个问题。 我包括我的原因有两个: 它提出了一个可能的替代解决方案演示代码可能对想要模拟菜单的其他人有用 在CSS transition ,用户必须在现在鼠标下方的元素注意到它处于:hover状态之前移动鼠标。 我创建了一个类似菜单的功能,可以滑动打开以显示不同的选项。 开始过渡结束时鼠标下方的选项与过渡开始时鼠标下方的选项不同。 因此,我不得不寻找一种解决方法。 你可以在这里找到一个 jsFiddle 和下面的演示源。 寻找WORKAROUND (在三个地方)看看我做了什么。 要查看问题,请将鼠标移到菜单上,然后将其留在原位,不要移动它。 浏览器认为是:hover的列表项将显示为蓝色。 我的解决方法使用li.ignoreHover类推翻了li:hover规则。 为了使解决方法不可见,我可以简单地使用标准背景颜色。 相反,我使用蓝色使问题可见。 我的问题:我注意到按其中一个修饰键( Caps 、 Caps lock 、 Ctrl 、 Option / Alt 、 ⌘在 Mac 上,...)也会强制更新:hover状态。 有没有办法将这样的事件发送到#menu元素? (我这样做的尝试没有成功,所以我更愿意为您提供我的工作解决方法而不是可能无效的方法)。 <!DOCTYPE html> <html> <head> <style> #menu {
  • Linux Capabilities 入门教程--基础实战篇
    该系列文章总共分为三篇: Linux Capabilities 入门教程:概念篇Linux Capabilities 入门教程:基础实战篇Linux Capabilities 入门教程:进阶实战篇 上篇文章介绍了 Linux capabilities 的诞生背景和基本原理,本文将会通过具体的示例来展示如何查看和设置文件的 capabilities。 Linux 系统中主要提供了两种工具来管理 capabilities:libcap 和 libcap-ng。libcap 提供了 getcap 和 setcap 两个命令来分别查看和设置文件的 capabilities,同时还提供了 capsh 来查看当前 shell 进程的 capabilities。libcap-ng 更易于使用,使用同一个命令 filecap 来查看和设置 capabilities。 1. libcap 安装很简单,以 CentOS 为例,可以通过以下命令安装: $ yum install -y libcap 如果想查看当前 shell 进程的 capabilities,可以用 capsh 命令。下面是 CentOS 系统中的 root 用户执行 capsh 的输出: $ capsh --print Current: = cap_chown,cap_dac_override,cap_dac_read_search
  • 不适用于 iOS 7.0.3(<form target=“_blank”> not working in iOS 7.0.3)
    问题 以下代码在 iOS 6.0.1 中完美运行(使用 iOS 虚拟键盘,我按下输入框上的“Go”按钮) <html> <body> <form action="http://stackoverflow.com/" target="_blank"> <input type="text" /> </form> </body> </html> 但是当我在 iOS 7.0.3 上尝试完全相同的代码时,这根本不起作用。 按 iOS 键盘上的“开始”按钮后没有反应。 如果我从表单标签中删除 [target="_blank"],那么它可以正常工作。 我不知道这个问题的原因是什么。 有没有人有同样的问题? 回答1 默认情况下,Safari iOS 会阻止弹出窗口。 通过设置 -> Safari -> 阻止弹出窗口禁用阻止功能。 回答2 假设 HTML 不在您的控制范围内,解决方法是以编程方式删除表单目标属性。 在您的 Web 视图委托中实现以下内容: - (void)webViewDidFinishLoad:(UIWebView *)aWebView { NSString *script = @"for (i=0; i<document.forms.length; i++) { document.forms[i].target = null; }"; [aWebView
  • 有谁知道这个 1 colum 下拉菜单的代码? 我知道它的基本知识,我只是不知道。 [关闭](Does anyone know the code for this 1 colum dropdown menu? I know its basic I just don't know it. [closed])
    问题 很难说出这里问的是什么。 这个问题模棱两可、含糊不清、不完整、过于宽泛或言辞激烈,无法以目前的形式合理回答。 如需帮助澄清此问题以便重新打开它,请访问帮助中心。 8 年前关闭。 或在谷歌应用程序上它看起来像这样.. 基本上,您单击菜单按钮,菜单会在单列中下拉。 我不想要 jquery 或 jave 脚本只是基本菜单...我稍后会添加图标。 我还将菜单按钮放在标题的顶部。 回答1 在在这里发布问题之前,您应该尝试自己弄清楚。 StackOverflow 是帮助解决编程问题,而不是为你做编程作业。 话虽如此,您是新手,这是一件非常简单的事情,所以我决定发布一个我为您制作的滑动 CSS 下拉列表。 这应该是一个很好的起点。 在桌面上,通过悬停来激活下拉菜单。 在 iOS 上,点击一次即可激活。 这是实时预览。 html <ul id="nav"> <li> <a href="#">Home</a> </li> <li> <a href="#">Music</a> <ul> <li><a href="#">New Tracks</a></li> <li><a href="#">Old Tunes</a></li> <li><a href="#">Downloads</a></li> <li><a href="#">Upcoming</a></li> </ul> </li> <li>
  • CSS3-3D翻转动画-IE10转换原点:保留3d解决方法(CSS3 - 3D Flip Animation - IE10 transform-origin: preserve-3d workaround)
    问题 浏览IE10的开发人员博客后,我发现它们不支持save-3d设置。 他们确实提供了一种解决方法,但我似乎无法使其正常工作。 下面的示例适用于Safari,Chrome和Firefox,但不适用于IE10。 如果有人能帮助我实现这一目标,我将非常感激。 单击时,框应绕Y轴旋转以显示一些文本和绿色背景色。 IE10中不是这种情况 我的示例: http : //codepen.io/2ne/pen/zEpge 部分代码: 的HTML <div class="flip-wrapper"> <div class="front"></div> <div class="back">IE10 SUCKS</div> </div> 的CSS .flip-wrapper { cursor: pointer; height: 100%; -moz-perspective: 1000; -webkit-perspective: 1000; -ms-perspective: 1000; perspective: 1000; -moz-transform-style: preserve-3d; -webkit-transform-style: preserve-3d; -ms-transform-style: preserve-3d; transform-style: preserve-3d
  • workaround for display block and css transitions work properly
    CSS transitions will not apply if you set the display property of an element to block immediately before changing the property with the transition attached. You can see the issue in the following example: var dom = {}; dom.creative = document.getElementById('creative'); dom.creative.style.display = 'block'; dom.creative.style.opacity = 1; #creative { display: none; opacity: 0; transition: opacity 2s; } <div id="creative"> <span>Sample text</span> </div> The issue can be fixed by forcing a repaint on the element: var dom = {}; dom.creative = document.getElementById('creative'); dom.creative
  • 显示块和 css 转换的解决方法正常工作(workaround for display block and css transitions work properly)
    问题 如果在更改附加过渡的属性之前立即将元素的显示属性设置为阻止,则 CSS 过渡将不适用。 您可以在以下示例中看到该问题: var dom = {}; dom.creative = document.getElementById('creative'); dom.creative.style.display = 'block'; dom.creative.style.opacity = 1; #creative { display: none; opacity: 0; transition: opacity 2s; } <div id="creative"> <span>Sample text</span> </div> 这个问题可以通过强制重绘元素来解决: var dom = {}; dom.creative = document.getElementById('creative'); dom.creative.style.display = 'block'; var a = dom.creative.offsetHeight; /* <-- forces repaint */ dom.creative.style.opacity = 1; #creative { display: none; opacity: 0; transition: opacity 2s; } <div
  • Webkit转换阻止链接(webkit transform blocking link)
    问题 我一直在使用转换和过渡来创建没有Javascript的动画UI组件,并真正享受结果,但是我遇到了一个令人困扰的问题,它似乎是Webkit浏览器所特有的。 在我旋转过的元素上,只能在元素右侧50%上访问跨越元素宽度100%的锚。 在Firefox中使用-moz-transform不存在此问题,但在使用-webkit-transform的Chrome和Safari中均可以100%再现此问题。 这是代码: <!doctype html> <html> <head> <title>webkit spincard test bed</title> <style type="text/css"> #card-lists{ width:100%; float:left; } #card-lists ul{ list-style:none; } #card-lists ul li{ width:230px; height:236px; } .non-mobile #card-lists ul.card-list li .flipcard-container:hover .flipcard, .non-mobile #card-lists ul.card-list li .flipcard-container.hover .flipcard{ -moz-transform: rotateY
  • 取消交互式 UINavigationController 弹出手势不会调用 UINavigationControllerDelegate 方法(Canceling interactive UINavigationController pop gesture does not call UINavigationControllerDelegate methods)
    问题 如果拖动UIViewController的边缘以开始UINavigationController内的交互式弹出过渡,则当前下方的UIViewController调用viewWillAppear: ,然后调用UINavigationControllerDelegate方法navigationController:willShowViewController:animated: 。 如果取消转换(即拖动的控制器放回原处而不弹出), viewWillAppear:和viewDidAppear:会按预期在顶部视图控制器上调用,但委托方法navigationController:willShowViewController:animated:和navigationController:didShowViewController:animated:不是。 考虑到UIViewController视图生命周期方法被调用,似乎至少应该调用其中一个或两个。 我想知道这是故意的还是UINavigationController的错误。 我真正需要的是能够在我的UINavigationController子类或其UINavigationControllerDelegate看到何时取消交互式弹出。 有没有明显的方法来做到这一点? 编辑 我仍在寻找解决方案,但我想提一下,我已将此问题报告为 Apple
  • 显示块和 css 转换未触发的解决方法(workaround for display block and css transitions not triggering)
    问题
  • UIPercentDrivenInteractiveTransition 完成后产生无关动画(UIPercentDrivenInteractiveTransition yielding extraneous animation when done)
    问题
  • CSS显示属性上的过渡
    我目前正在设计CSS“巨型下拉菜单”-基本上是一个常规的仅CSS下拉菜单,但其中包含不同类型的内容。 目前, 似乎CSS 3过渡不适用于'display'属性 ,即,您不能执行从display: none到display: block (或任何组合)的任何过渡。 当有人将鼠标悬停在顶层菜单项之一上时,是否可以通过上述示例使第二层菜单“淡入”? 我知道您可以在visibility:属性上使用过渡,但是我想不出一种有效使用它的方法。 我也尝试过使用高度,但是那不幸地失败了。 我还知道使用JavaScript实现此功能很简单,但是我想挑战一下自己仅使用CSS,而且我想说的还有点不足。 #1楼 我今天遇到了一个position: fixed我正在重用的position: fixed模式。 我无法保持它的display: none显示它,然后对其进行动画处理,因为它刚刚进入外观,并且z-index (负值等)也使事情变得很奇怪。 我还使用了height: 0到height: 100% ,但是它仅在模态出现时才起作用。 这与您使用left: -100%相同left: -100%或其他。 然后令我惊讶的是,有一个简单的答案。 瞧! 首先,您的隐藏模式。 请注意, height为0 ,并检查过渡中的height声明...它有500ms , 比我的opacity过渡长 。 请记住
  • jQuery Mobile blinking at page transitions on iPad
    I have a web app built with jQuery Mobile that works fine when using it in Safari on an iPad. However, when you add it to the home screen to use it as a standalone app (with the browser navigation removed by , then the page transitions "blink" quickly after each page transition. I have Googled on this and found that blinking was considered a bug a long time ago, and by now should be fixed. And it seems to be in Safari, but not as standalone from home screen. Does anyone know what is causing this and how to fix it? Does it have anything to do with the fact that the navigation bar is not there
  • Laravel sqlsrv works in tinker mode but not in browser
    问题 我有一个连接到外部 MSSQL 数据库的 Laravel 5 项目(在 CentOS 7 机器上)。 我使用 FreeTDS 遵循此处概述的设置。 当我使用浏览器点击该页面时,我收到错误: SQLSTATE[HY000] Unable to connect: Adaptive Server is unavailable or does not exist (severity 9) 。 但是当我使用php artisan tinker并执行类似App\MyModel::get(); ,它返回一个带有记录/模型的Illuminate\Database\Eloquent\Collection实例。 有谁知道这有什么问题? 更新我的.env如下所示: SQLSRV_DB_DRIVER=sqlsrv SQLSRV_DB_HOST=host.ip.address SQLSRV_DB_DATABASE=my_db SQLSRV_DB_USERNAME=my_username SQLSRV_DB_PASSWORD=my_password 我的config/database.php看起来像: 'sqlsrv' => [ 'driver' => env('SQLSRV_DB_DRIVER'), 'host' => env('SQLSRV_DB_HOST'), 'database' => env(