我正在尝试构建一个非常简单的C程序,以便包含到.deb包中。项目的大部分是用Python编写的。当这个程序包含在.deb包中时,lintian
会给我hardening-no-fortify-functions
警告。
在进一步阅读时,Debian希望您在构建C程序时包含某些标志,并且可以使用dpkg-buildflags --get CFLAGS
检索这些标志。
我的初始生成标志如下所示:
gcc -Wall -pedantic -o somefile somefile.c
现在,我和
CFLAGS=`dpkg-buildflags --get CFLAGS`
gcc $CFLAGS -o somefile somefile.c
但是,我继续收到
hardening-no-fortify-functions
警告。我在这里做错什么了?现在是假阳性吗?我可以添加一个覆盖并忘掉它吗? 最佳答案
有几种可能性,其中第三种可能性似乎最有可能,但我已经提到了1和2,以防它们也给您带来问题:dpkg-buildflags --get CFLAGS
返回了错误的内容。在我的系统上它返回:-g -O2 -fstack-protector --param=ssp-buffer-size=4 -Wformat -Wformat-security -Werror=format-security
如果你只是从命令行执行它,你会得到什么?
您的值CFLAGS
不会传递给gcc
。我想您在这里使用的是Makefile
语句;这两个语句实际上是相邻的吗?如果是,您不希望CFLAGS =
(带空格)吗?或者是在命令行设置CFLAGS
,在这种情况下,您应该知道debian构建工具会删除大多数不启动DEB_
的内容,因此您需要在构建包的任何内容中设置CFLAGS
。CFLAGS
不足以消除硬化误差。让我们来看看林寻的错误:http://lintian.debian.org/tags/hardening-no-fortify-functions.html并注意它说的是“确定性:胡乱猜测”。这并不能让人相信这是正确的。然而,我怀疑真正的问题是:你没有带来LDFLAGS
。尝试:$ dpkg-buildflags --get LDFLAGS
-Wl,-Bsymbolic-functions -Wl,-z,relro
你的链接器上需要这些。
这种方法似乎可行(即至少编译):
gcc `dpkg-buildflags --get CFLAGS` `dpkg-buildflags --get LDFLAGS` main.c -o main