- c - 在位数组中找到第一个零
- linux - Unix 显示有关匹配两种模式之一的文件的信息
- 正则表达式替换多个文件
- linux - 隐藏来自 xtrace 的命令
我正在尝试将 Python 用于运行 Linux 的 Arm 处理器上的嵌入式应用程序(从 X86/Linux 交叉编译的 CPython 2.7.3)。在我开始保护设备以防止篡改之前,它一直运行良好。首先,我将 rootfs 设置为只读,既可以防止 rootfs 在突然断电时损坏,也可以防止未经授权的用户修改我们的主要代码。尽管如此,python 和我们的 ctypes 库仍继续正常工作。/tmp 目录被映射到 tmpfs(ramdrive)。另一个强化步骤是在 tmpfs 分区上设置 noexec 标志,以防止用户以某种方式上传任何可能导致本地 root 攻击的代码。设置了这两个选项后,导入 ctypes 会立即产生段错误:
root@ATX4:~# python
Python 2.7.3 (default, Jul 16 2013, 17:15:57)
[GCC 4.3.3] on linux2
Type "help", "copyright", "credits" or "license" for more information.
>>> import ctypes
Segmentation fault
有趣的是,以下任何更改都可以使 ctypes 正常工作:
知道是什么原因造成的吗?现在,我已经在不使用 noexec 的情况下挂载/dev/shm,并将它限制在尽可能少的用户范围内。
最佳答案
我无法用 Python 2.7.6 重现它;
我怀疑这可能是一个有效的错误。
考虑到 ctypes 可能需要创建一个唯一的回调(一个可执行的 C 级函数)。它会 mmap
一些匿名(ok)或共享文件(not ok)并设置执行位。
内存错误处理总是很困难,开发人员很容易逃过一劫。
关于当 rootfs 为只读且/tmp 为 noexec 时,Python ctypes 段错误,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/17702932/
如果要禁用特定的构建步骤,可以使用以下任一方法: do_configure[noexec] = "1" 要么 do_configure() { } 这些选择之间有什么区别?我听说使用noexec时可能
我有以下代码: -- start of code set noexec off declare @requiredVersion int declare @currentVersion int set
当我使用 NOEXEC ON 编写一些 T-SQL 查询时,我体验到了 SQL Server 的有趣行为,并且我很好奇为什么会发生这种情况。有时我只得到 Command(s) successfully
我的程序对已写入用户指定目录的二进制文件调用 exec()。如果目录驻留在使用“noexec”挂载的树中,则 exec() 将失败并返回 EACCES。 我不想使 exec() 失败,而是希望能够确定
我想知道 linux 内核命令行中这两个参数之间的区别: 不执行=关闭 鼻息 在这两种情况下,它都拒绝内核执行用户空间内存中的代码。但我看不出它们之间有任何区别。 dmesg 中的错误消息不同,但行为
在 SSMS 中执行以下操作时; if not exists (select * from sys.databases where name = 'SWFUAT') begin print '
我正在尝试在需要在 /tmp 上安装 noexec 的盒子上运行 android sdk。 我可以将 java tmp 指向另一个我可以执行的地方,但这会破坏警察要求在 tmp 中执行 noexec
我正在 Linux 中的 CherryPy 上运行自定义 Python 2.7.3 应用程序。当我使用/etc/init.d/中的服务脚本来启动或停止服务时,遇到了段错误 (SIGSEGV)。奇怪的是
我正在尝试将 Python 用于运行 Linux 的 Arm 处理器上的嵌入式应用程序(从 X86/Linux 交叉编译的 CPython 2.7.3)。在我开始保护设备以防止篡改之前,它一直运行良好
我有一个 SQL 脚本,可以根据某些条件更新数据库过程或更改表。如果过程或表在运行时不存在,脚本也应该工作(在这种情况下应该更新注释)。 在 MSSQL 中,我能够通过 NOEXEC 实现这一点,如下
我是一名优秀的程序员,十分优秀!