【问题标题】:Best practice for securing sensitive data in plain text file?保护纯文本文件中敏感数据的最佳实践?
【发布时间】:2011-05-17 22:47:03
【问题描述】:

目前我正在开发一个 C linux 守护程序,它接受用户输入的 SQL 连接字符串,然后将信息存储到本地 conf 文件(客户端)中。守护进程的目的是以设定的时间间隔将数据提交到 SQL 数据库,因为每次加载守护进程时,它都会在本地 conf 中查找 SQL 连接字符串。此外,通过使用命令行参数 -c,用户可以在信息更改时重新配置 SQL 连接字符串。任何人都愿意分享一种保护此 conf 文件的方法,使其不是纯文本。请记住,我仍然需要能够访问并从 conf 文件中读取,因为存在其他 conf 设置。在此先感谢各位。

编辑:我最终计划使用 SSL 在客户端和 SQL 服务器之间提交数据。

【问题讨论】:

    标签: sql c linux daemon centos


    【解决方案1】:

    如果您没有地方保守秘密,密码学将无济于事。如果您的守护程序能够以某种方式不使用任何秘密来解码密码,那么任何人都可以这样做。所以你必须依靠系统保护,比如文件访问模式标志来保存密钥。

    【讨论】:

    • 非sql数据库怎么样,可能是ndbm之类的?
    【解决方案2】:

    (唯一?)保护文件的方法是更改​​其权限,使其仅对运行守护程序的用户可读。

    例如。如果您以用户 'foo' 和组 'foo' 的身份运行守护程序,您应该:

    chown foo.foo my-conf-file
    chmod 600 my-conf-file
    

    (或者甚至 chmod 到 400 以防止意外修改,但我猜在这种情况下你会失去 -c 选项功能)。

    注意:还要记住,在命令行上传递连接字符串是非常危险的,因为它们会在进程列表中可见!

    你也可以使用一些 GPG 的东西来加密文件,但我看不出那里的意义,因为你必须保护你用来解密文件的密钥,你会遇到和以前完全相同的问题。

    【讨论】:

    • 好吧,我确实屏蔽了密码等信息的输入,但您提出了一个有效的观点,即它很危险。我想我真正想做的是保护纯文本文件。在这种情况下,我什至不认为用户应该有权访问 conf 文件,只有守护进程本身应该。
    • 当然,“运行守护进程的用户”应该是仅用于此目的的系统用户,而不是登录系统的普通用户。完成此操作的最佳方法是以 root 身份运行守护程序,然后将 setuid() 运行到另一个特权较低的系统用户的 uid,这是唯一有权访问配置文件的用户。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2021-09-26
    • 1970-01-01
    • 2011-12-12
    • 1970-01-01
    • 2020-05-13
    • 2013-09-02
    • 2017-11-16
    相关资源
    最近更新 更多