如何在 JCL FTP 中安全存储密码?

7

我有以下代码,使用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内容放入文件中,但我会遇到同样的问题:任何可以访问该文件的人都会看到用户名和密码。因此,解决这个问题的最佳方法是什么?

1
不确定为什么这个问题被投票否决了,当使用JCL进行FTP时确实是一个有效的问题和关注点。 - SaggingRufus
2个回答

6
我理解的做法是这样的:
//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
< p > 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命令以及注销/清理,而无需访问登录凭据。

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

  1. 请求访问该文件
  2. 编写另一个JCL,将在具有访问该文件权限的ACID下运行以进行更新

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


2
它还允许您在多个FTP上使用相同的登录文件。因此,如果密码更改,您只需要更改一个文件。 - Bruce Martin
太棒了!还有两个问题:1)用户和密码是否会显示在日志输出中?2)是否可以使用RACF或类似工具加密AA.SOMETHING.LOGIN?只是为了提供第二层安全性。谢谢! - mllamazares
1
当我尝试时,用户出现在SYSOUT中,但密码没有显示。我从未尝试过加密,但我认为它不会起作用,因为在传递到FTP步骤时无法解密它(除非将其解密并复制到另一个文件中,这又将我们带回到这里)。 - SaggingRufus
非常好,谢谢!我看到这里有一个潜在的改进,看一下:https://www.ibm.com/support/knowledgecenter/zh/SSLTBW_2.1.0/com.ibm.zos.v2r1.halu001/netftp.htm 你有什么想法? - mllamazares
我同意你的看法,harrison4。 - John Czukkermann
我们的网站在存储FTP凭据方面遵循类似于这个答案的做法。 - Srinivasan JV

0

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

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

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


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接