セキュリティやネットワーク、クラウドに強くなりたい私

ブリッジSEがぶつかったこと、学んでいること

4年目ブリッジSEがぶつかったこと、学んでいることをメモ程度にまとめます

ブリッジSEがpotatotips #78 iOS/Android開発Tips共有会に参加して

はじめに

私自身はブリッジSEとして、ios,androidの開発を直接するわけではないのですが、雑でも良いのでインプットできればと思い、参加しました。
その中でも今の私に学びになったものをまとめます。

REALITYの文言の日本語と翻訳文の長さを比べてみた

note.com

iphoneのケースについてが対象で、他言語対応によりボタンなどに付属する日本語文字のサイズが他言語化すると変わってしまう問題に対しての比較です。

日本語15文字の場合、
→ フランス語、ドイツ語は長い
→ 英語は短め

文字数=横幅ではない。大きさにより。
英語はほぼ同じだが、やはりドイツ語やフランス語は長い

最悪のケースを考えた
表示幅は平均1.3倍程度、最大で5倍以上
確認する言語を決めておく。ロシア語やドイツ語が長くなりそうなので、それを基準にすると良さそう

Target SDK Versionを上げない Notification runtime permission対応

speakerdeck.com

アプリの新OS対応の考え方やPermission化する通知許可の対処方法などについて勉強になりました。

・通知がruntime permission(いわゆるpermission)に追加された
SDK 13の場合、新規インストールは通常のRuntime Permisionに対応すれば良い
SDK 12以下の場合、既存アプリは問題ない。新規アプリ。Permission要求大ダイアログが表示されてしまう。通知Permissionがない場合、適切なところで表示されるようにしたい

MySQLの設定を本番前に見直したい

記事の目的

リリース前にMySQLの設定を確認したい!
そんな自分のための備忘録。

my.cnfの設定

開発者向け!MySQL my.cnfの設定 | Parameter
上記参考にさせていただきました!
以下のmy.cnfさえとりあえず確認できてれば、かなりのパフォーマンスチューニングになるとのこと

MySQL :: MySQL 5.6 リファレンスマニュアル :: 14.12 InnoDB の起動オプションおよびシステム変数
公式はこちら

innodb_buffer_pool_size
  • メモリにロードされるデータとインデックスのためにInnoDBがどれくらいメモリを使うかを指定するもの
  • デフォルトは128M
  • MySQL専用であれば、搭載メモリの50%~80%が推奨
innodb_log_file_size
  • 書き込み操作をこのログに書き込んでおいて、落ち着いたらコミットするもの(トランザクションログ(InnoDB_logfile))
  • デフォルトは48M
  • 2GB以上にするのが一般的だそう

第6回 MySQLチューニング(5) パラメタチューニングの基礎:MySQLをチューニング,そしてスケールアップ/スケールアウトへ|gihyo.jp … 技術評論社

  • innodb_buffer_pool_size の変更と同時に変えなければならない
innodb_data_file_path
  • InnoDBデータファイルのパス・初期サイズの設定
  • デフォルト: innodb_data_file_path = ibdata1:10M:autoextend
  • ↑ つまり10Mごとに新しいデータファイルを作成するということ
  • データファイルは一つの方が早いので、余裕のあるサイズを設定しておくのがいいらしい


https://www.mk-mode.com/blog/2013/05/27/mysql-innodb-chuning/#

innodb_file_per_table
  • ファイルレベルでテーブルを管理していくもの
  • テーブルをドロップしたりするときにディスク容量を解放できるそう
  • default : innodb_file_per_table= ON (5.6.6以上の場合)

参考↓
第55回 innodb_file_per_tableオプションについて:MySQL道普請便り|gihyo.jp … 技術評論社

innodb_log_files_in_group
  • トランザクションログ(InnoDB_logfile)の大きさと、1グループのログファイル数。
  • default: innodb_log_files_in_group=2
  • 推奨値も2なので、そのままにする

セキュリティ設定を見直す

mysql_secure_installation

  • 実行ファイルで、最低限のセキュリティ設定を行うことができる

weblabo.oscasierra.net

DBユーザ作成を見直す

  • Select用userが作成されているか
  • Update用userが作成されているか

所感

正直まだまだ見るところあるなと思いつつ、一旦これで妥協した感じですね。
どんどん更新していく予定です。
まだまだ勉強しなければという感じです。

EC2 Ubuntu18.04にtelnetで接続してみる

前提

EC2 Ubuntu18.04サーバにSSHで接続できること

$ less /etc/os-release
NAME="Ubuntu"
VERSION="18.04.4 LTS (Bionic Beaver)"
... 

作業

1. EC2にtelnet serverをインストール

デフォルトではbasic telnet clientのみしか入っていないので、telnet serverをインストールする

$ dpkg -l | grep telnet
ii  telnet                           0.17-41                             amd64        basic telnet client

以下telnet serverインストールコマンド

$ sudo apt -y install telnetd xinetd
$ sudo apt -y install inetutils-inetd
$ sudo vim /etc/inetd.conf
    以下を末尾に入力
    # telnet
    telnet stream tcp nowait root /usr/sbin/tcpd /usr/sbin/in.telnetd

$ sudo /etc/init.d/inetutils-inetd restart

上記作業後、以下にてインストールされていることが確認できる

$dpkg -l | grep telnet
ii  telnet                           0.17-41                             amd64        basic telnet client
ii  telnetd                          0.17-41                             amd64        basic telnet server

以下参考にしました。
UbuntuでTelnetを使えるようにする | ばったんの技術系ブログ

2. EC2にtelnet接続用のuserを作成する

ubuntuユーザでのtelnetでは失敗してしまう(password入力時、ubuntuユーザではパスワードを発行してないのでできない)ので、新たにユーザを作成する

$ sudo useradd telnetuser
$ sudo passwd tenetuser
    telnetで接続するためのpasswordを入力する

3. EC2のセキュリティグループにて、telnetのIPを空ける

telnetのデフォルトipはtcp23番なので、対象のEC2のセキュリティグループにて解放してあげる

ここでは、追加方法については説明しない

4. 実際に接続してみる

$ telnet -l telnetuser {xxx.xxx.xxx.xxx or dns}
Trying {xxx.xxx.xxx.xxx or dns}
Connected to {xxx.xxx.xxx.xxx or dns}
Escape character is '^]'.
Password:
    対象ユーザのpassを入力する

上記でtelnetでEC2 Ubuntu18.04サーバの23番ポートに接続し、リモートホストのネットワーク仮想端末へのアクセスができる

雑感

そもそもSSHで接続する時代なので、なかなか使わないと思いますが、telnetが本来他コンピュータを操作可能にするプロトコルだってことがわかるかなと思い、試してみました。
基本はtelnetでの接続は拒否し、SSHでの接続ができるようにするのがいいみたいですね。
まだtelnetで接続できる端末はあるみたいなので、セキュリティ観点から注意したいですね。

以下を見てる最中に、試したくなりました。
3 Minutes Networking No.53

AWS EC2インスタンス swap作成

https://aws.amazon.com/jp/premiumsupport/knowledge-center/ec2-memory-swap-file/

上記参考にすればできます。

GitLabが4GB推奨で、現在私は2GBメモリのEC2を使っているため、Swapで2GBプラスして推奨まで持って行っています。
使用している人が50人くらいですが、特に問題なく使えています。

> 6. /etc/fstab ファイルを編集して、起動時にスワップファイルを有効にします。
また上記を行わないと、常にインスタンスを起動している人は問題ないですが、時間を指定してインスタンスを起動している人は、起動時にスワップファイルが有効にならないので注意。
私はパニックになりました。


*疑問点
・Swapfileは複数ファイルで2GB持たせた方が良いのか、一つのファイルで2G持たせた方がいいのか。(現在私は2ファイルで行っている)

systemctlって何者なんだ

概要

ubuntu18.04をEC2で立ち上げてたとき、
systemctlコマンドをnginxなどの起動や再起動に使ったりしていたのですが、何者かわかってなかったので調べました

systemctlって?

https://milestone-of-se.nesuke.com/sv-basic/linux-basic/systemctl/

PIDが1のプロセスはinitだったが、CentOS7系からはsystemdを使うようになった
systemctlコマンドは, systemdをコントロールするコマンド

そもそもPIDが1のプロセスとは何か

PIDはプロセスIDで、プロセスのIDだと思ってたが、何か特殊な意味があるのか..?

調べたところ、カーネル起動後に最初に行われるプロセスがinit
このPIDは必ず1になる
シェルもinitから実行される

http://yukiyan.hatenablog.jp/entry/2015/10/18/190639
この記事がかなりわかりやすかった。

結論

systemctlってのは、systemdをコントロールするもの
例でいうならnginxとphp-fpmなどのサービスといわれるものをコントロールする

 

使ったコマンド類memo

サービス起動
systemctl start nginx
サービス停止
systemctl stop nginx
サービス再起動
systemctl restart nginx
サービスの設定ファイル再読み込み
systemctl reload php-fpm
サービスの状態
systemctl status php-fpm