mysqlのコマンド
Login
$ mysql -u root -p database_name; $ exit
Database
mysql> show databases; mysql> user database; mysql> create database database_name; mysql> remove database database_name; $ mysqldump -u username database_name > dump.sql $ mysql -u username -p password -D database_name < dump.sql
Table
mysql> show tables from database; mysql> show indexes from table; mysql> create table users ( id int not null auto_increment primary key name varchar(255) email varchar(255) ); mysql> insert users into ( name, email ) values ( 'sample', 'sample@sample.com' ); mysql> select * from users where like '%sample.com' limit 10 order by id desc; mysql> update database_name.users set name = 'updated_name' where email = 'sample@sample.com'; mysql> delete from users where id = '1';
User
mysql> select host, user, password from mysql.user; mysql> create user 'sample'@'localhost` identified by 'password'; mysql> select password('password'); mysql> set password for 'sample'@'localhost' = '*2470C0C06DEE42FD1618BB99005ADCA2EC9D1E19'; mysql> grant all on database_name.* to 'sample'@'localhost'; mysql> show grants for 'sample'@'localhost';
MysqlAdmin
$ mysqladmin -u root -p create database_name; $ mysqladmin -u root -p drop database_name; $ mysqladmin -u root -p flush-privileges; $ mysqladmin -u root -p status; $ mysqladmin -u root -p password password;
apt-getまとめ
apt-getについてまとめた。
apt-getはDebian用に開発されたパッケージマネージャーである。 CentOSやFedoraなどのRedHat系のディストリビュージョンでは、yumが標準でインストールされていてそれぞれのディストリビューションで使い分けられる。
apt-getと依存関係にあるパッケージマネージャーとしてdpkgとaptitudeがある。 apt-getはdpkgに依存し、aptitudeはapt-getより複雑なパッケージのインストールを担えるらしい。 dpkgでもapt-getでも同じようにパッケージのインストールが可能だが dpkg < apt-get < aptitude の順により高機能になり、例えばaptitudeでは対話型のインターフェスがある。 その分、aptitudeの方が実行速度が遅く、メモリの消費が激しいなどのデメリットがある。
apt-getとaptitudeって結局どう違うの(´・ω・`)? – もぐら王国
# apt-get: パッケージを取得してインストール apt-get install # パッケージのインストール apt-get update # パッケージリストの更新 apt-get upgrade # インストールされたパッケージの更新 apt-get remove # パッケージの削除 # apt-cache: aptライブラリのパッケージキャッシュにアクセスして情報を参照したり検索したりする apt-cache search # パッケージの検索 apt-cache show # パッケージ情報の表示 apt-cache policy # インストール可能なバージョンの表示 # dpkg: インストールされたパッケージの管理 dpkg -l # インストールされたパッケージの一覧 dpkg -L # パッケージインストール時のファイルの一覧 dpkg -i # パッケージのインストール dpkg -r # パッケージの削除 # aptitude aptitude search aptitude show aptitude install aptitude remove
ついでにDebianで文字化けが発生していたので調べて解決した。
chonmeng-wong.hateblo.jp
/etc/bash.bachrc
に以下を追記して文字化けが治った。
case $TERM in linux) LANG=C ;; *) LANG=ja_JP.UTF-8 ;; esac
テンプレートを利用してWAFのACLを作成する
テンプレートを用いたAccess Controll Listの作成
AWS WAFの英語版ドキュメントに公開されているURLを指定してCloudFormationのstackを作成すると、WAFにACLのサンプルを作成できる。 Tutorial: Quickly Setting Up AWS WAF Protection Against Common Attacks
On the Select Template page, choose Specify an Amazon S3 template URL. For the template URL, enter https://s3.amazonaws.com/cloudformation-examples/community/common-attacks.json
作成されるRuleとConditionは以下の通り。
ACL: CommonAttackProtection
CommonAttackProtectionSqliRule
- URI contains SQL injection threat after decoding as URL.
- Query string contains SQL injection threat after decoding as URL.
- Query string contains SQL injection threat after decoding as HTML tags.
- Body contains SQL injection threat after decoding as URL.
- Body contains SQL injection threat after decoding as HTML tags.
CommonAttackProtectionManualIPBlockRule
- There are no IP addresses in this IP match condition.
CommonAttackProtectionXssRule
- Body contains a cross-site scripting threat after decoding as URL.
- Query string contains a cross-site scripting threat after decoding as URL.
- Body contains a cross-site scripting threat after decoding as HTML tags.
- Query string contains a cross-site scripting threat after decoding as HTML tags.
- URI contains a cross-site scripting threat after decoding as URL.
CommonAttackProtectionLargeBodyMatchRule
- The length of the Body is greater than 8192.
削除する場合は、stackをdeleteすればACL以下のすべてのオブジェクトがまとめて削除される。
費用
このACLで発生する費用は 9USD / Month (ACL 5USD × 1) + (Rule 1USD × 4) = 9USD 料金 - AWS WAF | AWS - Amazon Web Services
AWS CLI
まず、公式ドキュメントにあるStackを作成するためのサンプルポリシーをjsonで保存するか、自作でPolicy Documentを作成する。 AWS Identity and Access Management によるアクセスの制御 今回は以下の自作のPolicy Documentを利用する。
{ "Version":"2016-09-20", "Statement":[{ "Effect":"Allow", "Action":[ "cloudformation:*" ], "Resource":"*" }] }
IAMのポリシーがアタッチされたユーザーでstack作成用のポリシーを作成する。
create-policy
メソッドで--policy-document
に先ほどのjsonを指定する。
同時に作成したポリシーのARNを取得しておく。
$ CF_POLICY_ARN=$( \ $ aws iam create-policy \ $ --policy-name AmazonCloudFormationFullAccess \ $ --policy-document file://cloudformation_fullaccess_policy.json \ $ --query 'Policy.Arn' \ $ --output text \ $ ) $ echo $CF_POLICY_ARN
上記のポリシーをユーザーにアタッチする。
$ aws iam attach-user-policy \ $ --user-name <USER_NAME> \ $ --policy-arn ${CF_POLICY_ARN}
続いて、ユーザーにWAFFullAccessポリシーをアタッチする。 あらかじめアタッチしておかないと、stackを作成する際にAccessDeniedExceptionでエラーになるので注意。
$ aws iam attach-user-policy \ $ --user-name <USER_NAME> \ $ --policy-arn 'arn:aws:iam::aws:policy/AWSWAFFullAccess'
stackを作成する。 10分ほど時間がかかるので放置。
$ aws cloudformation create-stack \ $ --stack-name 'commonattackprotection' \ $ --template-url 'https://s3.amazonaws.com/cloudformation-examples/community/common-attacks.json'
以下、作成されたWAFのオブジェクトを確認するコマンドの一覧。
# 全オブジェクト $ aws cloudformation list-stack-resources $ aws cloudformation describe-stack-resources # ACL $ aws waf list-web-acls # Rule $ aws waf list-rules # Condition $ aws waf list-byte-match-sets $ aws waf list-size-constraint-sets $ aws waf list-xss-match-sets $ aws waf list-ip-sets $ aws waf list-sql-injection-match-sets
不要になったらstackをdeleteする。
$ aws cloudformation delete-stack --stack-name 'commonattackprotection'
viの基本 他
今日インターンでやったこと。
viの基本
知ってるコマンドを飛ばしつつ、一通り目を通す。
Filesystem Hierarchy Standard - Wikipedia
Unix
リンク先の記事を読みつつ、内容の幾つかをピックアップ。
テキストデータ処理
- awk 列の抽出、計算、条件分岐、ソートなどの処理ができる言語とのこと。 awkを極めればこのコマンドだけで様々な処理ができるとの噂を前々から聞いていたものの、 まだ使いこなせていないためにその真価を理解できていません。 awkの書籍があるぐらいなので、そのうち目を通しておきたいです。
バイナリデータ処理
現状バイナリデータを処理した経験がなく、今回初めて目にしたコマンドの od
と dd
。
SSH
- ポートフォワーディング
SSHの強力な機能として、「ポートフォワーディング」というものがある。これは、あるUNIXサーバー(SSHサーバー)を踏台にして、別のサーバーに接続する技術である。たとえば、あるUNIXサーバー(これをAと呼ぼう)が、あるサービスを、特定のクライアントにしか提供していないとする。しかし、もしその「特定のクライアント」のひとつ(これをBと呼ぼう)がSSHサーバーであるならば、そのSSHサーバーに接続することができる人ならば、世界中のどのクライアントからでも、そのSSHサーバーBを踏台にして、サーバーAのサービスを受けることができる。
iptablesで設定できるFORWARDチェインのことみたいですね。
Debianをインストールする
プラクティスにDockerを利用する場合のリンクがあったので、 未だにDockerを触っていなかった私はいい機会だと思い、DockerとDocker Imageを利用してDebianをインストールしました。 しかし、あまりにも簡単すぎて自力でインストーラーを使ってインストールする方法を学ぶことができませんでした。 これでは本末転倒なので、次回ほかのVPS上などでインストールしたいと思います。
ちなみに以下がDockerにおけるDebianのインストール方法です。 これはほんとに簡単だ...。 あとはDocumentなどに目を通してDockerの概念を理解しておきたいです。
$ brew cask install virtualbox $ brew install docker $ brew install docker-machine $ docker-machine create --driver virtualbox debian-docker $ docker-machine ls NAME ACTIVE DRIVER STATE URL SWARM DOCKER ERRORS debian-docker - virtualbox Running tcp://192.168.xx.xxx:xxxx v1.12.1 $ docker-machine status debian-docker Running $ docker-machine ssh debian-docker $ docker pull debian:latest $ docker images REPOSITORY TAG IMAGE ID CREATED SIZE debian latest 031143c1c662 2 weeks ago 125.1 MB $ docker run -i -t debian
Fjordインターン6日目(学習週) 前回の続き & CSSの基本を理解する
作業時間
20:00~24:00
この課題で行う学習内容
HTMLの基本を理解する(前回の続き)
- [x] gistのtxtファイルをforkしてmarkupする
- [ ] 課題を提出してレビューをもらう
- [x] ブログをMarkdownで書く
- [x] プレビューのキャプチャをgyazoでとりレビューをもらう
CSSの基本を理解する
- [ ] ドットインストール CSSの基礎 をすべて見る
- [ ] ドットインストール CSS3の基礎 をすべて見る
- [ ] CSS3のマニアックなやつ をこれで確認
- [ ] flexboxfroggy をクリアする
本日は昨日の続きと 「CSSの基本を理解する」 を進めました。
昨日はgistのpushがうまくいかずにつまづいていましたが、 結局sshでgit cloneし直したところ問題なくpushできました。 つい昨日のことのことのはずなのに記憶がうろ覚えですが、 どうもpecoの入力履歴を見る限りhttpでcloneしていたようです。 一体私は何をやっていたのか…。 それにしてもhttpでcloneしたとはいえ、githubと同様のusernameとpasswordでなぜはじかれたのかはわかりませんでした。
gistをマークアップしたあとは参照記事を読んだり、 ドットインストールのCSS動画を途中まで進めました。
学習中に発生した問題・疑問・はまったこと
- htmlのマークアップで一度pushした内容を修正して
git commit --amend
後にpushしたら変更が反映されなかった。
次回やることメモ
- CSSの続きを進める
感想
CSSも久しぶりでだいぶ基礎の部分がうろ覚えで危うい感じでした。 もう少しRailsの勉強が進んだら、フロントも集中的に学習する時間をとりたいですね。
それにしても日中活動したあとだと、なかなか集中力がもたない…。
Fjordインターン5日目(学習週) HTMLの基本を覚える
HTMLの基本を理解する
作業時間
10:00~22:30
この課題で行う学習内容
- [x] gistのtxtファイルをforkしてmarkupする
- [ ] 課題を提出してレビューをもらう
- [x] ブログをMarkdownで書く
- [ ] プレビューのキャプチャをgyazoでとりレビューをもらう
本日はプラクティスの 「HTMLの基本を理解する」を進めました。
以前にもドットインストールの動画や書籍で学習したことがありましたが、 最近HTMLを重点的に勉強する機会から遠ざかっていたので復習がてらプラクティスを進めました。
内容的には丸1日も時間をかけるボリュームではなかったと思いますが、 結局終わり切らなかったので明日早々に終わらせて次のCSSに進みたいと思います。
学習中に発生した問題・疑問・はまったこと
- VimのEmmetのpluginを入れて展開するキーを設定しようとしたものの、なぜか反映されなかった。
- git cloneしたgistの変更をpushしようとするとusernameとpasswordを求められ、Githubと同じものを入力すると
Invalid username or password
で怒られる。
次回やることメモ
- gistのpushについて調べてこのプラクティスを終わらせる
- 次のCSSに着手する
感想
Vimの予測変換やEmmetをうまく使いこなせなかったためか、 思ったほどスムーズにマークアップが進みませんでした。
他にも各HTML要素の使いどころが正しいのかどうか、 いまいち確信が持てないところがあったのでまだまだ学習とコーディングの経験が必要だと感じました。
あとはやはり Haml を覚えて使いこなせるようになるのが一番ですね。
Fjordインターン 4日目(作業週) 投稿画像非公開設定
作業時間
12:00~19:30
本日の作業内容
- [x] kowabanaのgit cloneからrails sでlocalhostを動かすまで
- [ ] 画像投稿の公開範囲設定機能の追加
- [x] モデルに非公開フラグカラムを追加する
- [ ] フォーム
- [x] フォームに公開設定を選択できるラジオボタン(あるいはプルダウン)を設定
- [ ] ラベルの日本語設定
- [ ] 以下の場所で非表示設定
- [ ] 画像一覧
- [ ] 怖い話投稿時の壁紙設定
発生した問題
- formのラベル用にenum_helpをインストールしてみたものの、うまく設定が反映されず…。config/localesの設定がおかしいのかもしれない
次回やること
- 日本語設定の続きからチケットを終わらせるまで進めたい