如何在 JCL FTP 中保护存储密码?
How to secure store password in a JCL FTP?
我有以下代码使用 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 内容放在一个文件中,但我会遇到同样的问题:任何有权访问该文件的人都会看到用户并通过。因此,解决这个问题的最佳方法是什么?
我见过的做法是这样的:
//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
会 conatin
ascii
cd infos
PUT 'EF35.LMINFO.D180203' info_180203.txt
AA.SOMETHING.LOGOFF
将包含
QUIT
此 JCL 将通过批处理 ACID 运行,并且只有 ACID 可以 read/write 访问 AA.SOMETHING.LOGIN
文件。因此 FTP 服务器需要将 ACID 添加为用户。这确实是唯一的方法。不过你是对的,任何有权访问 AA.SOMETHING.LOGIN
的人都可以看到凭据,但是因为我们将登录信息与 FTP 命令分开,所以没有理由需要访问登录文件,除非 username/pass 或 IP 地址更改。因此,您将能够更改您有权访问的文件中的任何内容。您还可以更进一步,而不是将 IP 地址放在单独的数据集中,这样您就可以 edit/view 除了登录凭据之外的任何内容。看起来像这样:
//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 命令和 logout/cleanup 所有这些都无需访问登录凭据。
唯一真正的缺点是如果您需要更新登录凭据,您需要:
- 请求访问文件
- 编写另一个 JCL,它将 运行 使用有权访问该文件的 ACID 来更新它
即使考虑到这一点,我仍然认为这是最好的方法。
harrison4 指出 IBM Communications Server 具有此解决方案的架构形式,可以使用数据集或 USS 文件。它记录在 "z/OS Communications Server: IP User's Guide and Commands" 手册中,harrison4 在他的评论中链接到该手册:
https://www.ibm.com/support/knowledgecenter/en/SSLTBW_2.1.0/com.ibm.zos.v2r1.halu001/netftp.htm
虽然不言而喻,但我还是要说。将密码存储在数据集或文件中总是不好的做法,除非它们被加密(不是编码,加密)。如果您必须这样做,请确保文件权限或安全管理器配置文件尽可能限制对 file/dataset 的访问。
我有以下代码使用 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 内容放在一个文件中,但我会遇到同样的问题:任何有权访问该文件的人都会看到用户并通过。因此,解决这个问题的最佳方法是什么?
我见过的做法是这样的:
//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
会 conatin
ascii
cd infos
PUT 'EF35.LMINFO.D180203' info_180203.txt
AA.SOMETHING.LOGOFF
将包含
QUIT
此 JCL 将通过批处理 ACID 运行,并且只有 ACID 可以 read/write 访问 AA.SOMETHING.LOGIN
文件。因此 FTP 服务器需要将 ACID 添加为用户。这确实是唯一的方法。不过你是对的,任何有权访问 AA.SOMETHING.LOGIN
的人都可以看到凭据,但是因为我们将登录信息与 FTP 命令分开,所以没有理由需要访问登录文件,除非 username/pass 或 IP 地址更改。因此,您将能够更改您有权访问的文件中的任何内容。您还可以更进一步,而不是将 IP 地址放在单独的数据集中,这样您就可以 edit/view 除了登录凭据之外的任何内容。看起来像这样:
//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 命令和 logout/cleanup 所有这些都无需访问登录凭据。
唯一真正的缺点是如果您需要更新登录凭据,您需要:
- 请求访问文件
- 编写另一个 JCL,它将 运行 使用有权访问该文件的 ACID 来更新它
即使考虑到这一点,我仍然认为这是最好的方法。
harrison4 指出 IBM Communications Server 具有此解决方案的架构形式,可以使用数据集或 USS 文件。它记录在 "z/OS Communications Server: IP User's Guide and Commands" 手册中,harrison4 在他的评论中链接到该手册:
https://www.ibm.com/support/knowledgecenter/en/SSLTBW_2.1.0/com.ibm.zos.v2r1.halu001/netftp.htm
虽然不言而喻,但我还是要说。将密码存储在数据集或文件中总是不好的做法,除非它们被加密(不是编码,加密)。如果您必须这样做,请确保文件权限或安全管理器配置文件尽可能限制对 file/dataset 的访问。