28901


**MySQL5.6のDBをcronでバックアップしようとしています。**

* * *

**mysqldumpの-pパスワードを書いたshファイルを、下記に配置して実行したら、**

> /home/ユーザ名/ディレクトリ名/backup.sh

**下記警告が表示されました。**

> Warning: Using a password on the command line interface can be  
>  insecure.

* * *

**この警告はどの程度の意味を持つのでしょうか？**  
・警告なので、あまり気にする必要はない？  
・それとも、何らかの対策を施すべき？

※環境 CentOS 6.4

* * *

**追記**  
・下記リンク先で、以下のような記述があるのですが、なぜでしょうか？  
・psコマンドと言うものは、一般的によく使われるコマンドなのでしょうか？ だから推奨できない？

> psコマンドに制限をかけることのみをこの問題への対策とすることは推奨できない

[コマンドラインからの情報漏えい対策](https://www.ipa.go.jp/security/awareness/vendor/programmingv2/contents/c604.html)


CC BY-SA 3.0
2016-09-15T04:55:41.203
28897
2016-09-17T02:41:20.470
2016-09-16T07:44:05.123
7886
7886
question
mysql centos
「Warning: Using a password on the command line interface can be insecure.」はどれぐらい危険ですか？


ウチでもバックアップの目的で `crontab` に

[code]

    /usr/local/mysql/bin/mysqldump -u dbuser --password=hogehoge exampledb
    
[/code]

なんて書いてあります。オイラはこれを危険とは思いません。  
`crontab` からスクリプトを呼ぶのは・・・うーんどうだろう。あまりお勧めしたくない感じ。  
オイラなら `mysqldump` は直接 `crontab` に書くでしょう。理由は後述。

仮に、の話になってしまいますが  
悪意あるユーザが database サーバマシンに不正ログインできたときに  
dbpassword が書いてある script があったら速攻、情報窃取ができてしまいます。  
dbpassword が無かったら brute force なり social engineering なりで  
パスワードを探す時間が必要＝窃取される前に管理者が気づける可能性が増えます。  
（まあ不正ログインされている時点で限りなく無意味なわけですが）

社員による情報の持ち出しを防止するためには、当該マシンにアクセスする権限がある  
正規ユーザであっても簡単に db アクセスできないように工夫すべきでしょう。  
持ち出したいと考えているユーザにとっては password が平文で書いてある script なんてのは  
まさに狙い目、真っ先に探す対象になります。

dbpassword がログインパスワードと同じとかだと social engineering の対象です。

あるいは当該 script を telnet や ftp 等の平文転送システムに流したら、  
経路上の誰かに傍受される可能性があります。

というわけで  
\- 扱いを誤ればセキュリティホールにはなりうるだろう。  
\- 危険か危険でないかは管理者の判断次第。  
と言う当たり前のことしかいえないです。

まあ少なくともデータベース管理者か `root` のみが当該ファイルを読み書きできるよう  
ファイルのパーミッションは `500` にしておくくらいの対処はしとくべきだと思います。  
`crontab` を直接使うとこの辺のパーミッションの管理は自動でできるわけですし、  
わざわざ別に script 書くより安全な気がします。  
`cron` がプログラムを起動する際の実効ユーザが誰かを考えると `500` のユーザは誰？と  
いささか悩ましいですし。


CC BY-SA 3.0
2016-09-15T06:34:29.420
28900
2016-09-15T06:34:29.420
8589
28897
answer


コマンドライン引数は ps コマンド等で他のユーザーから見られる可能性があるため、警告が表示されています。

mysql コマンドは MYSQL_PWD という環境変数からパスワードを取得することもできるので、それで対処するのもいいかもしれません。

<https://yoku0825.blogspot.jp/2015/05/mysql-56-warning-using-password-on.html>

[追記]

プロセスの環境変数はスーパーユーザー以外の他ユーザーには見えることはないので、コマンドライン引数よりは安全です。

mysql の警告は、コマンドライン引数でパスワードを指定することは危険だという以上の意味はないです。  
cron から起動する時にどうすればセキュアになるかということまで考えられてるわけではありません。

上に書いた MYSQL_PWD 環境変数は mysql に警告を出させなくするための案です。

cron から実行する場合は、crontab
にパスワードを直接書くのではなく、シェルスクリプトを起動するようにして、そのスクリプト内にパスワードを記述し、スクリプトを実行するユーザー以外にはそのスクリプトが見れないようにファイルのパーミッションを設定しておけば安全かもしれません。

また、接続先が localhost の mysqld である場合は、パスワード無しで接続するユーザーを作ることもできます。ご参考まで。 →
<http://tmtms.hatenablog.com/entry/2016/04/24/mysql_auth_socket>


CC BY-SA 3.0
2016-09-15T07:43:15.627
28901
2016-09-16T14:24:35.733
2016-09-16T14:24:35.733
3249
3249
28897
answer


`ps`コマンドの制限に関してですが、これ「のみ」を対策としても意味無いのは以下のような穴がいくらでもあるからでしょう。

  * `ps`コマンドを外部から持って来たら？
  * `pstree`のような同じ事が出来るコマンドがインストールされていたら？
  * `/proc/`を直接読まれたら？

* * *

では穴を全て塞いで回って「対策」するのかというと、それは面倒極まるし、何かおかしい。  
「`ps`コマンドの制限」が必要な時点でUnixの使い方が間違っているのだと思います。


CC BY-SA 3.0
2016-09-17T02:41:20.470
28944
2016-09-17T02:41:20.470
3054
28897
answer