openSUSE:Package security guidelines
构建服务教学 - 技巧和花样 - 跨发行版打包 - Debian 打包指南 - 打包检查
桌面菜单分类 - 打包常用的 RPM 宏 - 小脚本片段 - SysVinit 脚本 - 源代码服务
OBS 打包互助问答 - 打包黑名单
守护精灵
- 软件包安装时必须不能激活任何守护精灵。这意味着,例如启动脚本必须不能在 %post 里被 insserv,xinetd 文件必须包含 'disable = yes' 的内容。
- 守护精灵必须以非特权用户编号运行。这通常意味着软件包需要在它的 %pre 章节创建该用户。守护精灵应该避免以根用户身份运行,也必须不能使用 'nobody' 用户。但可以使用分组 'nogroup'。
- 守护精灵应该在软件包升级时被重启,以使安全更新立刻生效。
- 打开 tcp 或 udp 端口的守护精灵或者从一个可能不安全的网络接受输入的守护精灵在进入发行版前必须接受安全团队审计。
预设执行用户的可执行程序
软件包不允许包括预设执行用户/预设执行用户组的可执行程序,除非安全团队已经审计了源代码并给予豁免权限。可以通过提交一份受理对象是安全团队的错误报告来请求审计。错误报告应指出源代码的精确位置,受影响的文件和为什么需要预设执行用户。如果审计结果为同意,安全团队会升级 'permissions' 软件包以包括对该新文件的权限设定。编译系统会拒绝没有列示在 permissions 软件包中的预设执行用户的可执行程序。
通常您必须要有非常强的理由才能默认分发预设执行用户的可执行用户。大多数时候除非必须,否则最好不预设,但包括一份如何修改 /etc/permissions.local 文件的说明。
预设执行用户的可执行程序需要打包时进行特殊操作。详情参考 %verify_permissions。
全世界都可以写的目录
通常应该避免有这样的目录。如果一个软件包非常需要这样的目录,则施用与 setuid 可执行文件同样的规定。
用户分组可写的目录
没有针对一些指定特殊用户分组可写的目录的编译检查,因此也无需安全团队审计。但是打包者应该谨记分组可写的目录下的目录不能被安全的打包,因为可能会允许该分组程序提权为根用户。换句话说 永远 不要收录分组可写的目录下的目录到你的软件包。
防火墙设置
没有软件包允许修改 SuSEfirewall 的配置文件。唯一受豁免的是 yast2 防火墙模块。任何其他应用程序必须使用 yast2 防火墙模块提供的界面来修改防火墙设置。修改防火墙设置必须总是明确的要求用户确认。
DBus 服务
通过系统 DBUS 提供服务的应用程序必须在进入发行版之前获得安全团队的审计。相同的规则通常也适用于任何其他类型的守护精灵。
PolicyKit 权限
由用户行为引发的应用程序执行特权操作(例如,修改时钟)应该定义一个 PolicyKit 权限使得用户需要在执行特定操作前必须表态。使用了 PolicyKit 特权的软件包在进入发行版前必须由安全团队审计。
密码
软件包必须不能预定义固定的密码,证书等等。相反在第一次使用时必须强制用户设定密码。
使用加密
通常来说软件包必须不能实现它们自有的加密算法而是使用如下实现中的一种:
- mozilla-nss (推荐)
- openssl
- gcrypt
- gnutls
- kernel crypto interface (只适用于内核模块)
最好加密和 hash 算法可以自定义,能够设定为目前认为的安全算法(例如 aes,sha1)。使用 MD5 作为加密签名已经不再是安全的了。
软件包应该不能附带它们自有的一套受信任的 x509 证书。相反应该使用 /etc/ssl/certs 作为回退。