0

我正在使用 rlwrap 为 linux 服务器上的 sqlplus/rman/etc 提供命令历史记录。我可以看到正在生成的命令历史文件(例如 .sqlplus_history),因为这些是可能包含密码的纯文本文件,例如,如果用户在 sqlplus 中输入“连接用户名/密码”,则无限期保留它们存在安全风险.

有没有比某种 cron 作业更简单的方法可以定期删除日志?

我希望有某种关键字会触发日志的删除,例如如果读取了“退出”或“退出”命令,用户离开 sqlplus 并且删除了 .sqlplus_history 日志。这样的事情可能吗?

4

1 回答 1

1

rlwrap有很多选项可以将命令行排除在历史列表之外(因此排除在历史文件之外),尽管不完全按照您描述的方式(无论如何我都不会觉得它有用)

  • rlwrap --forget-matching connect sqlplus不会记住任何包含字符串的输入行connect
  • 指定历史大小,likerlwrap --histsize -3000会将历史文件视为只读(密码在历史中仍然可见,但不会写入文件)
  • 输入一行CTRL+O将使该特定行不在历史列表中。(此操作可以重新绑定到另一个键,请参见手册页)

对于一个真正花哨的密码审查器,可以编写一个censor_passwords像这样的过滤器:

#!/usr/bin/env perl

use lib ($ENV{RLWRAP_FILTERDIR} or ".");
use RlwrapFilter;
use strict;

my $filter = new RlwrapFilter;

$filter -> help_text("This filter removes the password from SQL 'identified by' clauses\n");

$filter -> history_handler(sub { s/(identified\s+by\s+)(\S+)/$1 xXxXxXxX/ig; $_});

$filter -> run;

.. 然后像rlwrap -z censor_passwords sqlplus.

任何包含的输入 IDENTIFIED BY yd6e7#te6都将被记住为IDENTIFIED BY xXxXxXxX

于 2015-07-28T11:10:19.067 回答