在 Unix 上隐藏命令行参数的秘密

2023-12-25

我有一个脚本,它在其内部启动一个带有秘密参数的命令。例如:

#!/bin/bash
command-name secret

运行命令时我可以通读ps -ef | grep command-name这就是秘密。

有没有什么方法可以隐藏这个秘密ps -ef,命令行参数被混淆了?


首先,您不能隐藏命令行参数。其他用户仍然可以通过以下方式看到它们ps aux and cat /proc/$YOUR_PROCESS_PID/cmdline在启动程序时(在程序有机会对参数进行运行时更改之前)。好消息是,您仍然可以通过使用替代方案来保守秘密:

  1. 使用标准输入:

     mySecret='hello-neo' printenv mySecret | myCommand
    
  2. 如果您想将秘密与主脚本分离,请使用专用文件(请注意,建议您使用全盘加密并确保文件具有正确的chmod权限):

     cat /my/secret | myCommand
    
  3. 使用环境变量(有警告 https://security.stackexchange.com/questions/197784/is-it-unsafe-to-use-environmental-variables-for-secret-data)。如果您的程序可以读取它们,请执行以下操作:

     mySecret='hello-neo' myCommand
    
  4. 使用临时文件描述符:

     myCommand <( mySecret='hello-neo' printenv mySecret )
    

在最后一种情况下,您的程序将像这样启动myCommand /dev/fd/67,其中的内容/dev/fd/67是你的秘密(hello-neo在此示例中)。


在上述所有方法中,请小心不要将命令保留在 bash 命令历史记录中(~/.bash_history)。您可以通过从脚本(文件)运行命令或每次以交互方式提示自己输入密码来避免这种情况:

read -s secret
s=$secret printenv s | myCommand  # approach 2
myCommand <( s=$secret printenv s )  # approach 3
secret=$secret myCommand  # approach 4
export secret && myCommand  # another variation of approach 4
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

在 Unix 上隐藏命令行参数的秘密 的相关文章

随机推荐

  • 在 JTable 中的单元格上方显示工具提示

    当用户在单元格中输入错误的值时 我需要在单元格上方 或下方 显示工具提示 参见下图 我有一个工具提示 但我需要一个点来将其显示在正确的位置 所以我想获取一个单元格位置 你知道如何得到这个吗 但是 如果您有更好的解决方案来实现这种行为 我愿意
  • Keras 拟合在第一个 epoch 结束时冻结

    我目前正在尝试使用 Keras 微调 VGG16 网络 我开始对猫和狗的数据集进行一些调整 然而 在当前的配置下 训练似乎在第一个时期被阻止 from keras import applications from keras preproc
  • 编译器 vs 解释器 vs 转译器

    在我参加的 ReactJS 会议中 演讲者使用了一个术语转译器对于一些代码转换 移植的发生 过去 我听说过编译器和解释器这两个术语 我在将用户编写的语言代码转换为计算机系统上可运行的形式的上下文中使用过 转译器对我来说是新的 转译器与编译器
  • SolrJ 和自动提交

    我正在使用 SolrJ API 将文档添加到 Solr 4 3 核心 我注意到我在我使用的库存 solrconfig 中将自动提交设置为 15 秒 如下所示
  • Rails - 通过 Active Storage 上传文件后在视图中显示图像

    我有一个正在进行中的项目5 1 2我正在尝试在其上实现活动存储 按照几个在线教程 我可以设置活动存储 并且可以看到保存在其中的数据active storage blobs and active storage attachments tab
  • 类型系列扩展无法按描述工作

    On 类型族的 Haskell wiki 页面 http www haskell org haskellwiki GHC Type families 有以下示例列表 type family F a type instance F Int I
  • git hook 获取合法提交消息(#123 好消息)

    我需要确保提交消息是合法的 否则拒绝它 提交消息应该类似于 123修复丢失的括号 我想确保它以哈希开头 有一个整数 没有 123a 并且消息至少有 10 个单词 很高兴有 消息不会连续完全相同 我正在使用这个 Trac 插件进行更改集 它更
  • 从传入 ASPX url 路由到 ASP.NET MVC 控制器操作

    我有一个 url Review aspx reviewId 3 我希望将此 url 路由到 MVC 控制器 操作 Review 3 有任何想法吗 没关系 像这样的简单路线是有效的 routes MapRoute Reviews Old Ro
  • Tcl 扩展:扩展的 ClientData 的生命周期

    重要的本机扩展将需要每个解释器的数据 动态分配的结构 我目前正在使用Tcl SetAssocData 有一个对应的密钥 扩展名和适当的删除例程 以防止此内存泄漏 然而 Tcl PkgProvideEx 也允许记录这样的 信息 该信息可以通过
  • 如何使用 PHP 和 sqlsrv 驱动程序清理输入?

    我正在开发一个使用 sqlsrv 驱动程序的 PHP MSSQL 项目 阻止 SQL 注入攻击的最佳方法是什么 我需要类似 mysql real escape string 的东西 但用于 sqlsrv 驱动程序 如果你像这样使用它 引用是
  • 使用 moment.js 如何给出持续时间的特定格式

    给定来自 API 的秒数持续时间duration seconds 86485 1天0小时1分1秒 我打算使用 moment js 将其转换为格式化的持续时间 如下所示 1 d hh mm ss 1d 00 01 01 2 d d hh h
  • Angular UI Router - 继承状态下的视图

    edit 根据 actor2019的回答 我想更新我的问题以更好地解释问题 Using Angular UI 路由器 https github com angular ui ui router v0 0 2 我已经将应用程序设置为在主 页面
  • 实体和DTO的区别

    DTO 和实体有什么区别 详细来说 这些是我的问题 DTO 应该有哪些字段 例如我的实体类是 Entity public class MyFirstEntity implements Serializable Id GeneratedVal
  • 使用 IN6ADDR_SETV4MAPPED 和双堆栈套接字

    这是一个延续将 IPv4 客户端连接到 IPv6 服务器 连接被拒绝 https stackoverflow com questions 16480729 connecting ipv4 client to ipv6 server conn
  • HTMLAgilityPack - 您需要将 UseIdAttribute 属性设置为 true 才能启用此功能

    我正在尝试将 HTMLAgilityPack 与 VS2008 Net 3 5 一起使用 即使我将 OptionUseIdAttribute 设置为 true 我也会收到此错误 尽管默认情况下它应该为 true Error Message
  • 如何在 Magento 核心 API 之外获取订单的送货/账单地址 ID?

    我想从 Magento 刚刚完成的订单中获取送货 帐单地址 ID 我已经尝试过以下代码 但它不起作用 Mage getModel 销售 订单 gt load array data order id gt getShippingAddress
  • PHP 可以选几门课?

    我在 Google 搜索中没有看到很多关于运行时 PHP 最大类处理的问题 假设我有一个自定义的 arrayaccess 类 它可以容纳最多 8k 个 User 类型的对象 自从arrayaccess类不允许我做 d 0 gt userna
  • 如何计算转换规范 %.*f 的精度以保持浮点值的精度?

    注 此问题源自this https stackoverflow com a 19897395 1778275 answer 如何计算转换规范的精度 f保持浮点值的精度 注意 这里的 保持精度 是指读回打印值后 例如 通过strtod or
  • PHP 并输出一对多结果

    到目前为止 我只处理过 php 中的一对一关系 但我遇到了一个涉及一对多关系的问题 我已经坐了几天了 但没有运气 所以我迫切希望有人介入并在我失去理智之前向我展示解决方案 在我的数据库中有一系列 url 这些 url 由 SELECT 查询
  • 在 Unix 上隐藏命令行参数的秘密

    我有一个脚本 它在其内部启动一个带有秘密参数的命令 例如 bin bash command name secret 运行命令时我可以通读ps ef grep command name这就是秘密 有没有什么方法可以隐藏这个秘密ps ef 命令