我正在使用 Ubuntu Lucid (10.04)。在以 root 身份运行的 shell 脚本中,我想检测音频线(模拟插孔)是否连接到笔记本电脑。我怎么做?我不需要便携式解决方案,我需要一些可以在我的笔记本电脑上运行的东西,无论多么笨拙。
中存在chroot环境/var/myroot,攻击者在chroot中以root(EUID 0)身份运行的进程中获得了任意机器代码执行权限。但攻击者控制下的进程并未启用所有功能(仅文件系统功能)。攻击者想要逃避 chroot,并在/etc/passwdchroot 之外附加一行。他怎么能做到呢?
已制定以下安全措施:
CAP_CHROOT、CAP_FOWNER、CAP_FSETID、CAP_CHOWN、CAP_DAC_OVERRIDE、CAP_DAC_READ_SEARCH、CAP_SETGID能力CAP_SETUID,并且无法获得其他进程。简而言之,攻击者能够绕过权限检查等进行任意文件系统读取和写入,但他无法向进程发送任意信号 ( )CAP_KILL或在网络上发送任意数据包 ( CAP_NET_RAW) 或重新启动系统 ( CAP_SYS_BOOT) 或修改内存中的任意字节 ( CAP_SYS_RAWIO) 等。unshare(CLONE_NEWUSER)没有被调用,chroot进程的UID 0与chroot之外的UID 0相同。unshare(CLONE_NEWPID)被调用,因此攻击者看不到在 chroot 之外运行的进程。unshare(CLONE_NEWNS)在设置 chroot 时被调用,并且以下文件系统可见:
/var/chroot可见为/,重新安装为MS_NODEV和 …我想复制一个在 Linux 上无关进程中运行的文件描述符。我知道sendmsg(2)和SCM_RIGHTS(例如/sf/ask/314260341/),但只有在另一个进程是合作。我需要一个不需要其他进程积极合作的解决方案。我也知道我可以先创建文件描述符,保留一个副本,然后创建另一个进程,但我需要一个解决方案,其中另一个进程创建自己的文件描述符。
我可以看到文件描述符:
$ ls -l /proc/13115/fd/3
lrwx------ 1 pts pts 64 2013-05-04 13:15 /proc/13115/fd/3 -> socket:[19445454]
Run Code Online (Sandbox Code Playgroud)
但是,open("/proc/13115/fd/3", O_RDWR)在另一个进程中执行返回错误No such device or address。还有其他可行的方法吗?可能与ptrace?
/var/mychoot我在与 相同的文件系统上有一个目录/,并且我已将程序启动/var/mychroot/prog为sudo chroot /var/mychroot /prog,因此该程序以 EUID 0 运行。
如果程序执行chdir("..") 转义技术,那么它就能够转义 chroot 并看到其中的所有内容/。(我已经在 Linux 4.18 上验证了这一点。)
我想阻止这样的逃跑。事实上,我想防止各种 chroot 转义,但在这个问题中,我只对如何在现代 Linux 系统上防止chdir("..") 转义技术感兴趣。为此,我正在寻找chroot(2)系统调用的替代方案。
我找到了 2 个解决方案:pivot_root和MS_MOVE,但它们仅在/var/mychroot是挂载点时才起作用,因此如果/var/mychroot只是文件系统中的子目录,它们就会失败/。在这种情况下还有其他解决方案吗?
我想避免使用技术LD_PRELOAD(因为LD_PRELOAD不影响静态链接的可执行文件),使用ptrace(2)strace的技术(因为这样我就无法在 chroot 中运行,也无法在ptrace(2) 中运行)很难正确执行:进程将崩溃或挂起)和真正的虚拟化(例如Xen或KVM或QEMU;因为性能开销和不太灵活的内存配置)。
回顾一下,我需要:
/,LD_PRELOAD …当我跑
$ screen id
Run Code Online (Sandbox Code Playgroud)
我只能看到[screen is terminating]屏幕顶部的消息。我想看到的是id命令和[screen is terminating]消息的输出。我可以得到他的:
$ TERM=vt102 screen id
Run Code Online (Sandbox Code Playgroud)
在这种情况下, screen(1) 不会清除屏幕,但会在最后发出许多空行,因此我可以向上滚动并查看id.
但是,我不想使用TERM=vt102,因为我需要一些更高级的终端功能。
如何防止 screen(1) 在终止时清除屏幕?
linux ×4
chroot ×2
alsa ×1
capabilities ×1
container ×1
gnu-screen ×1
security ×1
socket ×1
ubuntu ×1