python コーディング規約[PEP: 8]
いろいろな言語をかじっていると、コーディングが曖昧になってくる。
pythonは、本気で習得したいと思っているので、折角規約に基づいて書けるように、調べた時のメモを残していく。
PEP: 8 とは
Pythonの標準ライブライに含まれているPythonコードのコーティング規約。
日本語に訳されているので、迷ったときはここで確認。pep8-ja.readthedocs.io
li コマンドの使い方とハードリンクとシンボリックリンクの違い
■Command:li:ファイルのリンクを作成する
□主なオプション
オプション | 長いオプション | 意味 |
---|---|---|
-s | --symbolic | ハードリンクの代わりにシンボリックリンクを作成する |
-d,-F | --directory | ディレクトリのハードリンクを作成する(スーバーユーザのみ) |
-f | --force | リンクファイルと同じ名前のファイルがあっても強制的に上書きする |
-i | --interactive | リンクファイルと同じ名前のファイルがあった場合、上書きするか確認する |
-v | --verbose | リンクを登録する際に、登録する登録名とリンク先を表示する |
-b | 上書きされるファイルのバックアップを作成する | |
-L | --logical | 対象がシンボリックリンクの場合リンクを巡る |
-P | --physical | シンボリックリンク自体へのハードリンクを作成 |
-r | --relative | 相対パスのシンボリックリンクを作成 |
-t [ディレクトリ名] | --target-derectory=[ディレクトリ名] | 指定したディレクトリにリンクを作成する |
■ハードリンク
- 同じファイルの実体を共有する方式(1つのファイルの実体を複数のファイル名で表せる)
- リンク元のファイルが移動、削除されても、ファイルの実体にはアクセスできる。
- 異なるファイルシステム上のファイルやディレクトリにリンクできない。
- 元のファイルとハードリンクは(ほぼ)同じ物
- フォルダに対しては作れない
- ディレクトリの場合「usr」や「home」といった名前の他に、自分自身を示す「.」というハードリンクが自動で生成される。
⇒ディレクトリにはハードリンクが「最低2つある」ことになる。
パスワード管理ツール
「パスワード管理ソフト」の必要性に気付いてからまとまった時間が取れるまで、そわそわした時間を過ごした昨年末。検討した結果、オープンソースのパスワード管理ソフト「bitwarden」を選択。このサービスが自分に合っているのかを、後日検証するために、経緯や目的を書き留めておく。
100個くらいなら使い分けられていたIDとパスワード。
利用するサービスが増えて行った結果、アクセスする頻度が少ないサービスは、まずメールソフトを検索し登録時のアドレスを特定。次にパスワードの再設定手続き。こうして、やっとサービスを利用する。この作業が日増しに増えていく。
更に、昨年から聴き始めたセキュリティ系ポッドキャスト影響で、リスト型攻撃への対策として「パスワード管理ソフト」の重要性と便利さを知った。IDとパスワードを使い回してはいけない。記憶していないということは、使いまわしているサービスがある可能性を否定できない。ということは、リスト型攻撃で痛い目に遭う可能性も大いにあるのだ。
まずは、利用するサービスの選定。
かつて利用していた「1Password」は、端末買い替えのタイミングでインストールしなくなっていた。その頃は、利用するIDとパスワードを記憶していたから必要性を感じていなかったような...単に面倒だったような...ぼんやりし過ぎてわからない。
選定ポイントは、大きく4つ
- 所有している全ての端末で利用できること
- 操作が簡単であること
- 補完データの保存先
- 価格
端末数の制限は、有料サービスならまずクリア。
単純な操作性は、使ってみないとわからない。
データの保管先は、最近はクラウド上が多い。外出先でもアクセスすることを考えると当たり前なんだけど、ちょっと気持ち悪い。自前のクラウドやNASに保管可能なサービスもあり検討した。攻撃される確率の低さは、個人環境だろうと思うのだが、自分が行っているセキュリティ対策より、サービス提供企業の対策の方がよっぽど信頼できる。サーバーに保管されているデータの暗号化を明確にしているサービスは更に信頼できる。
有料で有名なサービスは、使い勝手もセキュリティ面でも安心感があるのだが、利用者が多い程攻撃される確率が上がると思うし、完全なセキュリティ対策は存在しないと思う。
驚くほど高額なサービスはない。大抵、制限付きでお試し利用が可能。
結果、利用したかったサービスが全て無料で使える「bitwarden」を使ってみることにした。
- 全所有端末にインストール可能
- 公式サイトが英語のため、アカウント取得時に少々英語を読まなければならないのだが、英語不得意の私でも難なくクリアできる程度。アプリのインストールや設定は日本語表示なので、設定や利用時に問題はない。
- データ保管先は指定可能。ローカル保存可能なので、常時接続していない外付け媒体に暗号化してデータを保管しておくことも可能
- 自分のもとめている全サービスを無料で使える
1ヶ月ほど利用して感じたこと。
生体認証でストレスなく利用できる。
検索機能はもちろん、オリジナルのフォルダ分けが可能なので便利。
全ての端末から登録&同期ができる。
ローカル保存が可能。外付け媒体に暗号化して保存しておけるので安心。
一まず、頻繁に利用するサービス、お金が絡むサービスに関しては、ID/Passの使い回しが確実になくなったので一安心。
このサービスが正解なのかは、この後定期的に振り返って考えてみたいと思う。
FTPS SFTP 概要
FTPSとSFTPどちらにしようか迷ったので、ザックリまとめてみた。
■FTPS [File Transfer Protocol over SSL/TLS]
FTPの通信をSSL/TLS暗号化(SSL/TLSセッションで通信を行う)
FTPの脆弱性をカバーするために、転送される情報を「SSL/TLS」を利用して暗号化するプロトコル
FTP同様、コマント゛チャネルとデータチャネル2つの接続を使用する
両方の接続を暗号化するか、データチャネルのみを暗号化するかの選択が可能
ユーザID認証:証明書&パスワード
ユーザID・パスワード・証明書、またはその両方を使用して接続を認証
FTPSサーバに接続するとき、FTPSクライアントは、まずサーバの証明書が信頼できるかどうかを確認
[証明書が信頼されるケース]
・既知の認証局(CA)によって署名されている場合
・自己証明され、信頼できるキーストアに公開証明書のコピーがある場合
[使用ポート]
FTPデータ転送ポート:989
FTP制御ポート:990
□SSL/TLS
公開鍵暗号と共通鍵暗号という暗号化技術の組み合わせで、暗号化された安全な通信を確保する仕組み
SSLがバージョンアップを重ねTLS
SSLサーバ証明書は認証局(CA)から発行されている
■SFTP [SSH file Transfer Protocol]
SSHの通信を使って、ファイル転送(FTP)を行う。SSHで動作するアプリケーション
最初にSSHで接続し、ログイン後はFTP風のコマンドでファイルの受け渡しを行う
SSH接続するため、別途FTPサーバを建てる必要はない
OpenSSHなら、sshd_configに設定を追加するだけで、SFTPサーバとすることができる
ユーザID認証:キー認証&パスワード
1つの接続のみを使用し、認証情報と転送するデータファイルを暗号化
[接続認証方法]
・FTP同様、ユーザIDとパスワードを使用。ただし、資格情報は暗号化されている
・SSHキー
最初にSSH秘密鍵と公開鍵を生成
SSH公開鍵を送信し、サーバにロードしてアカウントに関連付ける
SFTPサーバに接続すると、クライアントソフトウェアは公開キーをサーバに送信して認証を行う
公開鍵が秘密鍵と一致し、指定されたユーザまたはパスワードが一致する場合、認証が成功
[使用ポート]
SSHと同じ:22
□SSH
リモートにあるサーバを端末から操作する際、通信される一切の情報を暗号化するプロトコル
「OpenSSH」ソフトなどで使用ができ、Linuxはデフォルトでインストールされている
Windowsでは「Cygwin」「WinSCP」、Gitに同梱されている「GitBash」で使用可能
※補足
ファイアウォールの使いやすさからはSFTP
複数チャネルを利用するFTPSはファイアウォール内のポート範囲を開く必要がありネットワークのセキュリティリスクとなる
tmuxの基本操作
tmux(ティーマックス)
1つの端末で複数の仮想端末を起動し、画面を分割、統合できる。
デタッチとアタッチにより、ネットワークが切れても同じセッションの再開が可能。
- セッション:ウィンドウの集まり
- ウィンドウ:ペインを管理する
- ペイン:ウィンドウを分割した領域
操作内容 |
コマンド |
セッションの作成 *インストール |
$ tmux $ tumux new-session |
セッションの確認 接続されているセッションの確認 |
$ tmux list-sessions |
再接続(アタッチ) |
$ tmux attach |
切断 |
Ctrl + B [Prefix Key] ⇒ D [Detach] |
セッションの削除 |
$ tmux kill-session -t セッション番号 |
ウィンドウ作成 |
Ctrl + B [Prefix Key] ⇒ C [Create] |
ウィンドウ移動 次へ 最後に操作した |
Ctrl + B [Prefix Key] ⇒ N [Next] Ctrl + B [Prefix Key] ⇒ P [Previous] |
ウィンドウ名変更 |
Ctrl + B [Prefix Key] ⇒ , |
ウィンドウ一覧表示/移動 |
Ctrl + B [Prefix Key] ⇒ w |
ペイン番号表示 |
Ctrl + B [Prefix Key] ⇒ q |
ペイン分割 横分割(水平方向) 分割解除 分割境界線位置変更 |
Ctrl + B [Prefix Key] ⇒ " [Shift + 2] Ctrl + B [Prefix Key] ⇒ % [Shift + 5] Ctrl + B [Prefix Key] ⇒ Ctrl + ←→↑↓ |
ペイン遷移 ペイン入れ替え |
Ctrl + B [Prefix Key] ⇒ ↑↓[矢印キー] |
ペイン強制終了 |
Ctrl + B [Prefix Key] ⇒ x |
スクロール開始 スクロール終了 |
Ctrl + B [Prefix Key] ⇒ [ |
VirtualBox(mac)にCentOS8をインストール
[環境]
macOS Catalina バージョン 10.15.6
VirtualBox 6.1.14 platform packages - OS X hosts
CentOS8 8.2.2004-x86_64-minimal.iso
■VirtualBox 新規作成
メモリーサイズ:1024MB
ハードディスク:仮想ハードディスクを作成する
ハーディスクのファイルタイプ:VDI
物理ハードディスクにあるストレージ:可変サイズ
ファイルの場所とサイズ:場所は適宜設定 サイズは16GB
■作成された仮想マシーンを起動
VirtualBox[設定]変更
[一般]-[高度] - クリップボードの共有:双方向
- ドラッグ&ドロップ:双方向
[ストレージ] -コントローラ:IDE 空を選択し、光学ドライブにISOイメージファイル
*初回マシン起動時、インストールISOイメージを選択可能
[ディスプレイ] -表示倍率:200%
■CentOSインストール
インストール時に使用する言語を選択:日本語
[インストール概要]-[ソフトウェアの選択] 最小限のインストール
[インストール概要]-[日付と時刻] 地域:アジア 都市:東京
[インストール概要]-[ネットワークとホスト名] Ethernet(enp0s3) オン
[インストール概要] インストールの開始ボタン 押下
□インストール完了までに、下記項目の設定を求められるので、適宜設定
rootパスワード
ユーザーの作成
インストール完了後 再起動ボタン 押下
※DVD isoをアンマウントしていなかったので、再起動後、インストール画面が表示された。
VirtualBox[設定]
[ストレージ] -コントローラ:IDE isoファイルを選択しアンマウント
仮想環境 [VirtualBox] COMオブジェクトの確保に失敗しました。
結論から言うと、解決策はディレクトリのパーミッション変更!
アンインストールしなくても良かったのかも。。。
macOSアップデート後、VirtualBoxが起動しなくなったので、放置...
そろそろどうにかしようと試みる。
まずは、アンインストール。
PC再起動後に、最新のpackageをインストール
[環境]
macOS Catalina バージョン 10.15.6
VirtualBox 6.1.14 platform packages - OS X hosts
最新のパッケージは、ココ↓からダウンロード
www.virtualbox.org
インストールまでは滞りなく完了したので、起動...
特にパーミッション変更していないけど...
/tmpのパーミションを確認
$ ls -la /tmp
lrwxr-xr-x@ 1 root admin 11 12 28 2019 /tmp@ -> private/tmp
/private/tmpのパーミッションを確認
$ ls -l /private/
drwxr-xr-x 11 root wheel 352 9 26 11:19 tmp/
$ sudo ls -la /private/tmp
Password:
total 0
drwxrwxr-T 11 root wheel 352 9 26 11:19 .
drwxr-xr-x 6 root wheel 192 8 18 06:26 ..
.vbox-*****-ipcがない。
/private/tmpのパーミッションを、一旦変更
$ sudo chmod 1777 tmp
$ ls -la
total 0
drwxr-xr-x 6 root wheel 192 8 18 06:26 ./
drwxr-xr-x 24 root admin 768 8 18 06:25 ../
drwxr-xr-x 115 root wheel 3680 9 26 11:02 etc/
drwxr-xr-x 2 root wheel 64 11 9 2019 tftpboot/
drwxrwxrwt 11 root wheel 352 9 26 15:08 tmp/
再度 VirtualBox起動 ⇨ 無事起動
必要ファイルが出来てる。
$ sudo ls -la /private/tmp
Password:
total 0
drwxrwxr-T 11 root wheel 352 9 26 11:19 .
drwxr-xr-x 6 root wheel 192 8 18 06:26 ..
drwx------ 4 wacaco wheel 128 9 26 11:21 .vbox-*****-ipc
忘れずに、パーミッションを戻す
$ sudo chmod 755 tmp
$ ls -la
total 0
drwxr-xr-x 6 root wheel 192 8 18 06:26 ./
drwxr-xr-x 24 root admin 768 8 18 06:25 ../
drwxr-xr-x 115 root wheel 3680 9 26 11:02 etc/
drwxr-xr-x 2 root wheel 64 11 9 2019 tftpboot/
drwxr-xr-x 11 root wheel 352 9 26 16:09 tmp/
今まで使えていたものが、OSのバージョンアップで起動しなくなると溜息が出るけど、
割りと簡単に解決できるものも多いので焦らず対処。