如何保护 JCL FTP 中的存储密码?

Posted

技术标签:

【中文标题】如何保护 JCL FTP 中的存储密码?【英文标题】:How to secure store password in a JCL FTP? 【发布时间】:2018-05-11 10:29:17 【问题描述】:

我有以下代码使用 JCL 通过 FTP 发送文件:

//FTP00001 EXEC PGM=IKJEFT01,DYNAMNBR=50         
//OUT      DD   SYSOUT=*                         
//AMSDUMP  DD   SYSOUT=*                         
//SYSTSPRT DD   SYSOUT=*                         
//SYSIN    DD   DUMMY                             
//SYSPRINT DD   DUMMY                             
//OUTPUT   DD   SYSOUT=*                         
//SYSTSIN  DD  *                                 
123.234.345.67
myuser1
p4ssw0rd
ascii
cd infos
PUT 'EF35.LMINFO.D180203' info_180203.txt
QUIT
/*

它就像一个魅力,问题是我不想将凭据硬编码在 JCL 中。我们如何隐藏它们,让任何有权访问 JCL 的人都看不到连接详细信息?我也想从输出中隐藏凭据,但请注意,我仍然想查看其余信息:传输的字节数、可能的错误消息等。

我想将 SYSTSIN 内容放入文件中,但我会面临同样的问题:任何有权访问该文件的人都会看到该用户并通过。因此,解决这个问题的最佳方法是什么?

【问题讨论】:

不确定为什么这会被否决,这实际上是使用 JCL 进行 FTP 时的一个有效问题和关注 【参考方案1】:

我看到的做法是这样的:

//FTP00001 EXEC PGM=IKJEFT01,DYNAMNBR=50         
//OUT      DD   SYSOUT=*                         
//AMSDUMP  DD   SYSOUT=*                         
//SYSTSPRT DD   SYSOUT=*                         
//SYSIN    DD   DUMMY                             
//SYSPRINT DD   DUMMY                             
//OUTPUT   DD   SYSOUT=*                         
//SYSTSIN  DD  DSN=AA.SOMETHING.LOGIN,DISP=SHR
//         DD  DSN=AA.SOMETHING.FTP,DISP=SHR
//         DD  DSN=AA.SOMETHING.LOGOFF,DISP=SHR

AA.SOMETHING.LOGIN 将包含在哪里

123.234.345.67
myuser1    <- replace with ACID for this job 
p4ssw0rd   <- replace with password for the ACID

AA.SOMETHING.FTP 将包含

ascii
cd infos
PUT 'EF35.LMINFO.D180203' info_180203.txt

AA.SOMETHING.LOGOFF 将包含

QUIT

此 JCL 将通过批处理 ACID 运行,并且只有 ACID 具有对 AA.SOMETHING.LOGIN 文件的读/写访问权限。因此 FTP 服务器需要将 ACID 添加为用户。这确实是唯一的方法。你是对的,任何有权访问AA.SOMETHING.LOGIN 的人都可以看到凭据,但是因为我们将登录信息与 FTP 命令分开,除非用户名/密码或 IP 地址发生更改,否则没有理由需要访问登录文件.因此,您将能够更改您有权访问的文件中的任何内容。您还可以更进一步,而不是将 IP 地址放在单独的数据集中,这样您就可以编辑/查看除登录凭据之外的任何内容。看起来像这样:

//FTP00001 EXEC PGM=IKJEFT01,DYNAMNBR=50         
//OUT      DD   SYSOUT=*                         
//AMSDUMP  DD   SYSOUT=*                         
//SYSTSPRT DD   SYSOUT=*                         
//SYSIN    DD   DUMMY                             
//SYSPRINT DD   DUMMY                             
//OUTPUT   DD   SYSOUT=*                         
//SYSTSIN  DD  DSN=AA.SOMETHING.SERVER,DISP=SHR
//         DD  DSN=AA.SOMETHING.LOGIN,DISP=SHR
//         DD  DSN=AA.SOMETHING.FTP,DISP=SHR
//         DD  DSN=AA.SOMETHING.LOGOFF,DISP=SHR

这还允许您更改服务器、FTP 命令和注销/清理所有这些,而无需访问登录凭据。

唯一真正的缺点是,如果您需要更新登录凭据,则需要:

    请求访问文件 编写另一个 JCL,该 JCL 将使用有权访问该文件的 ACID 来更新它

即使考虑到这一点,我仍然认为这是最好的方法。

【讨论】:

它还允许您对多个 FTP 使用相同的登录文件。所以如果密码改变了,你只需要改变一个文件 太棒了!还有两个问题:1)用户和密码会显示在日志输出中吗? 2) 是否可以使用 RACF 或类似工具加密AA.SOMETHING.LOGIN?只是为了提供二级安全性。谢谢! 当我尝试它时,用户出现在 SYSOUT 中,但密码没有。我从未尝试过加密,但我认为它不起作用,因为在将其传递到 FTP 步骤时无法解密它(无需解密并将其复制到另一个文件,这将我们带回到这里)。 完美,谢谢!我可以在这里看到潜在的改进,请看:ibm.com/support/knowledgecenter/en/SSLTBW_2.1.0/…你有什么想法? 我同意你的看法,harrison4【参考方案2】:

harrison4 指出,IBM Communications Server 具有这种解决方案的架构形式,可以使用数据集或 USS 文件。它记录在“z/OS 通信服务器:IP 用户指南和命令”手册中,harrison4 在他的评论中链接到该手册:

https://www.ibm.com/support/knowledgecenter/en/SSLTBW_2.1.0/com.ibm.zos.v2r1.halu001/netftp.htm

这可能不用说,但我还是会说。除非加密(未编码,加密),否则将密码存储在数据集或文件中始终是不好的做法。如果您必须这样做,请确保文件权限或安全管理器配置文件尽可能限制对文件/数据集的访问。

【讨论】:

以上是关于如何保护 JCL FTP 中的存储密码?的主要内容,如果未能解决你的问题,请参考以下文章

如何保护存储在 web.config 中的密码?

我应该如何在 MySQL 数据库中存储 ftp 登录凭据?

如何保护php中的密码字段

如何使用 iText 7 删除受密码保护的 pdf 中的密码

如何保护 Spring Cloud Config Server

Azure Blob 存储:从 Excel 工作簿中删除密码