今日やったこと
教材
Cloudtech
時間
Day10
- 5分
Day11
- 25分 × 2セット
学んだこと・やったこと
権限変更について
ls -l で確認できること
ls -l を実行すると、ファイル種別や権限などを確認できる。
- 先頭が
d:ディレクトリ - 先頭が
-:通常のファイル
例:
-rwxr-xr-x 1 root root
この先頭部分の -rwxr-xr-x が、ファイル種別とパーミッションを表している。
パーミッションとは
パーミッションとは、どのユーザーがそのファイルに対して何をできるかを表す仕組み。
権限は以下の3つの対象ごとに設定される。
- 所有者(Owner)
- 同じグループのユーザー(Group)
- その他のユーザー(Others)
権限の意味
-
r:read(読み取り) -
w:write(書き込み) -
x:execute(実行) -
-:権限なし
例:
-rwxr-xr-x
これは以下のように分かれる。
- 所有者:
rwx - グループ:
r-x - その他:
r-x
パーミッションの数値表現
パーミッションは数字でも表現できる。
r = 4w = 2x = 1
この合計で権限を表す。
例
7 = 4 + 2 + 1 = rwx6 = 4 + 2 = rw-5 = 4 + 1 = r-x4 = 4 = r--
たとえば:
chmod 644 ファイル名
とすると、権限は次のようになる。
-rw-r--r--
意味は以下の通り。
- 所有者:読み取り・書き込み可
- グループ:読み取りのみ
- その他:読み取りのみ
よく使うパターン
-
755→rwxr-xr-x -
644→rw-r--r-- -
400→r--------
ユーザーの切り替えについて
sudo コマンド
sudo は、管理者権限(スーパーユーザー権限)でコマンドを実行するためのコマンド。
例:
sudo ls /root
su コマンド
su は、別のユーザーに切り替えるコマンド。
sudo su -
以下のように実行すると、rootユーザーに切り替えられる。
sudo su -
-
-を付けると、rootユーザーの環境変数も含めて切り替わる
exit
exit を実行すると、1つ前のシェルやユーザーに戻れる。
sudoersファイルについて
sudo を使えるユーザーは、sudoersファイルに定義されている。
つまり、誰でも sudo を使えるわけではなく、許可されたユーザーだけが使える。
SSH接続とは
SSH(Secure Shell)とは、ネットワーク経由で安全に別のコンピューターへ接続するためのプロトコル。
EC2へターミナルから接続するときにも使う。
認証方式について
共通鍵暗号方式
暗号化と復号に同じ鍵を使う方式。
- メリット:処理が速い
- デメリット:事前に安全に鍵を共有する必要がある
この「どうやって安全に鍵を共有するか」という問題を鍵配送問題という。
公開鍵暗号方式
公開鍵暗号方式では、以下の2つの鍵を使う。
- 公開鍵:暗号化に使う
- 秘密鍵:復号に使う
イメージ
- 受信者が公開鍵と秘密鍵を作る
- 公開鍵は相手に渡してよい
- 秘密鍵は自分だけが持つ
- 送信者は公開鍵で暗号化
- 受信者は秘密鍵で復号
この公開鍵と秘密鍵のセットをキーペアという。
ハイブリッド暗号システム
実際のSSHなどでは、共通鍵暗号方式と公開鍵暗号方式を組み合わせたハイブリッド暗号が使われる。
理由
- 共通鍵暗号方式:高速だが鍵配送問題がある
- 公開鍵暗号方式:安全だが処理が重い
仕組み
- 最初に公開鍵暗号方式を使って共通鍵を安全に共有する
- 実際のデータ通信は、共通鍵暗号方式で高速に暗号化・復号する
イメージ
- 公開鍵:鍵穴
- 秘密鍵:鍵
EC2インスタンスとキーペア
EC2インスタンスへSSH接続するために、キーペアを使う。
補足
- 同じキーペアを複数のEC2インスタンスで使うことは可能
- ただし、運用上は用途ごとに分ける方が安全な場合もある
秘密鍵ファイルの権限変更
EC2接続で使う秘密鍵ファイルは、権限を厳しくしておく必要がある。
chmod 400 キーペア名.pem
400 にすることで、所有者だけが読み取り可能になる。
EC2へのSSH接続
例:
ssh -i キーペア名.pem ec2-user@EC2インスタンスのパブリックIPアドレス
補足
-
-i:使う秘密鍵を指定 -
ec2-user:Amazon Linux系でよく使うデフォルトユーザー - 接続には、EC2のセキュリティグループで**SSH(22番ポート)**が許可されている必要がある
初回接続時のメッセージについて
初めてSSH接続するとき、接続先を信頼してよいか確認されることがある。
これは、接続先サーバーの情報を known_hosts に登録してよいか確認している。
.ssh ディレクトリ
ホームディレクトリには .ssh という隠しディレクトリがある。
中身を確認するには以下のようにする。
ls -la ~/.ssh
補足
-
ls -a:隠しファイルも表示する -
.で始まるファイルやディレクトリは隠しファイル/隠しディレクトリ
SSH接続の終了
ターミナルからEC2へ接続している場合、以下で接続を終了できる。
exit
EC2の料金に注意
検証でEC2インスタンスを起動した場合、使い終わったあとに放置すると料金が発生し続けることがある。
不要になったら、EC2コンソールから対象インスタンスを**終了(terminate)**することが大切。
※ 停止(stop)ではボリューム料金などが残る場合があるため注意。
ls -a
ls -a を使うと、隠しファイルも含めて表示できる。
例:
ls -a
パイプとリダイレクト
パイプ(|)
パイプは、前のコマンドの出力を次のコマンドの入力として渡す仕組み。
例1
ls | grep b
-
lsの結果をgrepに渡し -
bを含むものだけを表示する
例2
ps aux | grep ssh
-
ps aux:実行中のプロセスを表示 - その結果を
grepに渡して -
sshを含む行だけ表示する
wc -l
wc -l は行数を数えるコマンド。
例1
ls -l | wc -l
ls -l の結果が何行あるかを表示する。
例2
ps aux | wc -l
実行中のプロセス一覧が何行あるかを表示する。
複数パイプの例
ps aux | grep ssh | wc -l
-
ps auxで一覧表示 -
grep sshで絞り込み -
wc -lで件数を数える
リダイレクション(> / >>)
リダイレクションは、コマンドの出力結果をファイルに書き込む仕組み。
>
上書きする。
echo Hello > b
-
bというファイルにHelloを書き込む - すでに内容がある場合は上書きされる
>>
追記する。
echo Hello >> b
-
bというファイルの末尾にHelloを追加する
例
ls -l > b
-
ls -lの結果をbに保存する
ps aux | grep ssh > ssh_process.txt
- パイプで絞り込んだ結果をファイルに保存できる
感想
インスタンスを作成してssh接続することに少しずつ慣れてきた