20200918のLinuxに関する記事は5件です。

zsh導入方法(.zshrcカスタマイズ付き)

長らくfishを使用していたのですが、気分転換にこの度zshに乗り換えました!
今回は、zshの導入方法.zshrcによるzshのカスタマイズに関して記事にしていきます。

こちらの記事の設定でできるようになること

  • zshの強力な補完機能
  • fishのような以下のシンタックスハイライト
    • 文字入力
    • ls時のディレクトリ・ファイル
  • fishのような入力予測機能
  • gitのブランチ名のシンタックスハイライト
  • cd でディレクトリ移動時に自動で ls を実行

zshの導入方法

brewコマンドを使用してzshと今回使用するプラグインをダウンロードしていきます。

以下のコマンドを実行します。

$ brew install zsh

$ brew install zsh-completions
=> 補完機能の強化プラグイン

$ brew install zsh-autosuggestions
=> 入力の補完時の予測を影で表示してくれるプラグイン

$ brew install zsh-syntax-highlighting
=> 入力をシンタックスハイライトしてくれるプラグイン

上記を実行後

$ zsh

でzshを起動すると

  • q
  • 0
  • 1

上記の3択で入力を聞かれるので 0 を選択しenter(.zshrcを自動生成してくれる)

ログインシェルを変更

$ sudo vi /etc/shells
Password:

上記を実行後、下記を追記して保存

/usr/local/bin/zsh

qiita.png

chsh -s /usr/local/bin/zsh

上記を実行し、ログインシェルを変更

.zshrcの編集

ここまでの設定でホームディレクトリに.zshrcが生成されているはずです。

vi .zshrc

上記を実行し以下をコピペして保存

#補間
autoload -U compinit
compinit
#文字コード
export LANG=ja_JP.UTF-8
#プロンプト
autoload -U colors
colors

#履歴
#履歴を保存するファイル指定
HISTFILE="$HOME/.zsh_history"
#履歴の件数
HISTSIZE=100000
SAVEHIST=100000
#重複した履歴を保存しない
setopt hist_ignore_dups
#履歴を共有する
setopt share_history
#先頭にスペースを入れると履歴に残さない
setopt hist_ignore_space
#履歴の検索
autoload history-search-end
zle -N history-beginning-search-backward-end history-search-end
zle -N history-beginning-search-forward-end history-search-end
bindkey "^P" history-beginning-search-backward-end
bindkey "^N" history-beginning-search-forward-end 
#cdの設定
#ディレクトリ名だけで移動する。
setopt auto_cd
#自動でpushdする
setopt auto_pushd
#pushdの履歴は残さない。
setopt pushd_ignore_dups
#ターミナルのタイトル
case "${TERM}" in
kterm*|xterm)
    precmd() {
        echo -ne "\033]0;${USER}@${HOST}\007"
    }
    ;;
esac 
# コマンドミスを修正
setopt correct
# 補完の選択を楽にする
zstyle ':completion:*' menu select
# カレントディレクトリに候補がない場合のみ cdpath 上のディレクトリを候補に出す
zstyle ':completion:*:cd:*' tag-order local-directories path-directories
#cd は親ディレクトリからカレントディレクトリを選択しないので表示させないようにする (例: cd ../<TAB>):
zstyle ':completion:*:cd:*' ignore-parents parent pwd
# 補完候補をできるだけ詰めて表示する
setopt list_packed
#色の設定
export LSCOLORS=Exfxcxdxbxegedabagacad
# 補完時の色設定
export LS_COLORS='di=01;34:ln=01;35:so=01;32:ex=01;31:bd=46;34:cd=43;34:su=41;30:sg=46;30:tw=42;30:ow=43;30'
autoload -U colors ; colors ; zstyle ':completion:*' list-colors "${LS_COLORS}"

#alias
case "${OSTYPE}" in
freebsd*|darwin*)
  alias ls="ls -GF"
  ;;
linux*)
  alias ls="ls -F --color"
  ;;
esac
#w3mでALC検索
function alc() {
  if [ $# != 0 ]; then
    w3m "http://eow.alc.co.jp/$*/UTF-8/?ref=sa"
  else
    w3m "http://www.alc.co.jp/"
  fi
}
#cdを打ったら自動的にlsを打ってくれる関数
function cd(){
    builtin cd $@ && ls;
}
#その他
#キーバインド
bindkey -e
#ビープ音ならなさない
setopt nobeep
#エディタ
export EDITOR=emacs
#改行のない出力をプロンプトで上書きするのを防ぐ
unsetopt promptcr
#個別設定を読み込む
[ -f ~/.zshrc.mine ] && source ~/.zshrc.mine
source /usr/local/share/zsh-syntax-highlighting/zsh-syntax-highlighting.zsh
source /usr/local/share/zsh-autosuggestions/zsh-autosuggestions.zsh
# git設定
autoload -Uz vcs_info
setopt prompt_subst
zstyle ':vcs_info:git:*' check-for-changes true
zstyle ':vcs_info:git:*' stagedstr "%F{yellow}!"
zstyle ':vcs_info:git:*' unstagedstr "%F{red}+"
zstyle ':vcs_info:*' formats "%F{green}%c%u[%b]%f"
zstyle ':vcs_info:*' actionformats '[%b|%a]'
# -----------------------------
# Prompt
# -----------------------------
# %M    ホスト名
# %m    ホスト名
# %d    カレントディレクトリ(フルパス)
# %~    カレントディレクトリ(フルパス2)
# %C    カレントディレクトリ(相対パス)
# %c    カレントディレクトリ(相対パス)
# %n    ユーザ名
# %#    ユーザ種別
# %?    直前のコマンドの戻り値
# %D    日付(yy-mm-dd)
# %W    日付(yy/mm/dd)
# %w    日付(day dd)
# %*    時間(hh:flag_mm:ss)
# %T    時間(hh:mm)
# %t    時間(hh:mm(am/pm))
# PROMPT='[%n][%c]'\$vcs_info_msg_0_' $ '
PROMPT='%B%F{32}~/%C%f'\$vcs_info_msg_0_' $ '
#'di=01;34:ln=01;35:so=01;32:ex=01;31:bd=46;34:cd=43;34:su=41;30:sg=46;30:tw=42;30:ow=43;30'
precmd(){ vcs_info }

上記保存後、

source .zshrc

で設定を反映させる。

補足

.zshrcを編集することで、自分好みにzshをカスタマイズできます。

※ シンタックスハイライトの色や、aliasの設定等もいじるともっと使いやすいかもしれません。

是非いろいろ試してみてください。

  • このエントリーをはてなブックマークに追加
  • Qiitaで続きを読む

【勉強中の新入社員】 これからネットワーク構築に使いそうなLinuxコマンドをまとめてみる

勉強中の新入社員マルボロ・ダブルバーストです。
最近取り扱っているコンビニが減少気味で悲しんでおりますが、何とか形に残したくて記事を残すことにしました。
昨日はローソンでダブルバースト5を2箱買えました。
喫煙量は1日1~5本なので、しばらくはこれで保てそうです。
切れてるときは仕方なくパープルも吸っていますが、これもなかなか見当たらず…
寂しいものです。

では、個人的にこれからネットワーク構築で使いそうなLinuxのコマンドをまとめてみます。
ど素人なので自分がこれから使いそうなコマンドは書きます。
後々実際使ってみた結果とか詳細書いていきたいとは思います。
個人のまとめに近いものになると思いますが、よろしければ助言などコメントお願いします。

とにかく集めてみる

サーバ時間

data  システムクロックの日時表示
/sbin/hwclock ハードウェアクロックの日時表示

su -        // 環境引継ぎなし・管理者権限
Password:
ntpdate ntp_server  // NTPサーバにシステムクロック同期
hwclock --systohc  // システムクロック基準ハードウェアクロック同期

ntpd        // クロック同期の動作状況確認

ルーティングテーブル

/sbin/route     // ルーティングテーブル表示
netstat -r      // ルーティングテーブル表示

Destination : 対象ネットワーク・ホスト
Gateway : ゲートウェイ機器のIPアドレス
Genmask : 対象ネットワークのサブネットマスク
Flags : U 経路有効  G ゲートウェイ使用  H ターゲットはホスト  R 回復される動的経路
   D 動的設定  M 変更  A addconf設定  C キャッシュのエントリー  ! 拒否する経路
Metric : ターゲットの距離(ホップ数)
Ref :ルート参照数
Use : 経路の参照回数(route -F, -Cの数)
Iface : 使用するインタフェース

IP

/sbin/ifconfig eth0        // interfaceName eth0の情報確認
su -               // 管理者権限
ifconfig interfaceName [inet ipadress] [netmask mask] // ipAdress subnetMask 設定
ifconfig interfaceName up     // インタフェース有効化
ifconfig interfaceName down    // インタフェース無効化

  • このエントリーをはてなブックマークに追加
  • Qiitaで続きを読む

TeratermでSSH接続時の公開鍵認証を設定する

はじめに

サーバーについてあまりにも知識が無さ過ぎたので、「さくらのVPS」でVPSサーバーを借り、実際に触ってみることにしました。「公開鍵認証」の仕組み・やり方がよくわからずかなり苦戦したので、記録も兼ねてここにまとめます。

環境

・さくらのVPS
・CentOS Linux release 7.8.2003

公開鍵認証とは

サーバーへのログインをパスワード認証で行うと、パスワードが割れれば第三者がログインできるので危険だが、公開鍵認証を使えば、パスワードを使わず、安全にログインすることができる。
公開鍵認証は、公開鍵と秘密鍵のペアを生成・使用することで行われる。二つの鍵には以下の特徴がある。

・秘密鍵がないと署名が作れない
・公開鍵で(対応した秘密鍵による)正しい署名かどうか検証できる

クライアント側で公開鍵と秘密鍵を生成した後、公開鍵は接続先サーバーに登録し、秘密鍵はクライアント側のみが保管する。ログイン時、サーバーに登録されている公開鍵と、クライアントが提示した秘密鍵が適合すれば、ログインが成功する。

SSH公開鍵認証.png

実際の手順

公開鍵・秘密鍵の生成

ここからは、「Tera Term」を使用してやっていきます。TeraTermは https://ja.osdn.net/projects/ttssh2/ からダウンロードできます。
 
(1)「TeraTerm」の設定メニューの「SSH鍵生成」をクリックする。
teraterm1copy.png
(2)以下の画面が表示されるので、「生成」をクリックする。
teraterm2copy.png
(3)「生成」を実行すると画面下部の「パスフレーズ」、「コメント」を入力できる状態になる。(パスフレーズはログイン時、秘密鍵を使用する際に入力を求められる。一応空欄でも生成は可能。)
 

(4)最後に、画面下部の「公開鍵の保存」「秘密鍵の保存」をそれぞれクリックして、鍵を保存する。
※ 「id_rsa.pub」が公開鍵、「id_rsa」が秘密鍵。
 

公開鍵の登録 

(1)公開鍵をサーバー側に登録する。TeraTermでサーバーにログインし、「id_rsa.pub」をTeraTermウィンドウ上にドラッグ&ドロップする。以下のウィンドウが表示されるので、任意のフォルダを設定して「送信」ボタンを押す。 
teraterm3copy.png
(2)公開鍵をサーバー内のディレクトリに送ったが、まだ登録はできていない。以下のコマンドで、公開鍵を~/.ssh/authorized_keysファイルに登録する。

$ cat id_rsa.pub >> .ssh/authorized_keys

authorized_keysのアクセス権を変更する。(所有者以外がアクセスできないようにする。)

$ chmod 600 .ssh/authorized_keys

以上で鍵の登録は完了。SSH認証画面で、RSA/DSA/ECDSA/ED25519にチェックを入れ、生成した秘密鍵を指定する。それでログインできればOK。
teraterm4copy.png 
 

パスワード認証を無効にする

最後に、パスワードではログインできないよう設定を変更する。
以下のコマンド入力して/etc/ssh/sshd_configファイルの編集画面を開く。

# vim /etc/ssh/sshd_config

このファイルの以下の部分を変更する。

PasswordAuthentication yes → PasswordAuthentication no

変更後ファイルを保存したら、設定を再読込する。

# systemctl reload sshd.service

 
※ 鍵認証の設定がうまくいってないと、パスワード認証を無効化した時点でTeraTermからはログインできなくなる。その場合はVNCコンソールからログインして/etc/ssh/sshd_configの変更箇所を元に戻す。

  • このエントリーをはてなブックマークに追加
  • Qiitaで続きを読む

[sed] macOSでもLinuxでもsedを使ってtab文字を置換する

要約

ASCIIコードを用いることで、macOSでもLinuxでも同じ書き方でtab文字を置換できるようになります。

TAB="$(printf '\\\011')"
printf "hoge\tfuga\n" | sed "s/${TAB}/,/g"

sedのOS依存 (BSD sed vs GNU sed)

sedの使用例として、タブ区切りをコンマ区切りにする下記のスクリプトをよく用いていました。

# Linux
$ printf "foo\tbar\n"
foo    bar
$ printf "foo\tbar\n" | sed "s/\t/,/g"
foo,bar

しかし:point_up:の方法ではmacOSではうまく置換できません。

# macOS
$ printf "foo\tbar\n"
foo    bar
$ printf "foo\tbar\n" | sed "s/\t/,/g"
foo    bar # <-変わっていない!

どうやらこの違いはmacOSはBSD sedで、LinuxはGNU sedを使用していることに起因するようです。

BSD sedでタブ文字置換をどうするかついて、過去のQiita記事にございました:bow:

(同じタイトルですが、違う記事です)

しかし上記事の方法は使用状況が限られるため、もう少し汎用性を持ちたいと思っていたところ、次の記事がございました。

上記事では以下のようにASCIIコードを使ってLF(改行)を表現していました。

LF=$(printf '\\\012_')
LF=${LF%_}

echo "hogehoge\nfoo\nbar" | sed 's/\\n/'"$LF"'/g'

この方法はそのままタブ文字に応用できるのでは、と思って検証したところ、無事に動作しました。

# ASCIIコードで水平タブ(HT)は011です
TAB="$(printf '\\\011')" 
printf "hoge\tfuga\n" | sed "s/${TAB}/,/g"

これでmacOSでもLinuxでも、同じ書き方でtab文字を置換できるようになりました。

検証環境

# macOS
- OS: Catalina 10.15.6 19G2021 x86_64
- Kernel: 19.6.0
- Shell: zsh 5.7.1

# Linux
- OS: Linux Mint 20 x86_64
- kernel: 5.4.0-47-generic
- shell: bash 5.0.17
  • このエントリーをはてなブックマークに追加
  • Qiitaで続きを読む

Oracle Linux 8にApache HTTP ServerとWildflyを構築

この記事の概要

OCIインスタンス上Oracle Linux 8にApache HTTP ServerとWildfly(JBossAS)をインストールする。

前提

  • OS: Red Hat Enterprise Linux release 8.2 (Ootpa)
  • Java: openjdk version "1.8.0_265"
  • Apache HTTP Server: Apache/2.4.37 (Oracle Linux)
  • Wildfly: Release: 12.0.3.Final
  • 断りがない場合コマンドはrootユーザで実行しています

Wildflyの構築

1. JDKのインストール

yum install -y java-1.8.0-openjdk.x86_64

2. wildflyユーザの作成

groupadd -r wildfly
useradd -r -g wildfly -d /opt/wildfly -s /sbin/nologin wildfly

3. WildflyのDL&展開

wgetするURLは適宜お好みで。

cd /opt
wget https://download.jboss.org/wildfly/20.0.1.Final/wildfly-20.0.1.Final.zip
unzip -q wildfly-20.0.1.Final.zip
ln -s wildfly-20.0.1.Final wildfly

4. Wildfly起動確認

sh /opt/wildfly/bin/standalone.sh

2020-09-15 09:47:48,958 INFO  [org.jboss.as] (Controller Boot Thread) WFLYSRV0025: WildFly Full 20.0.1.Final (WildFly Core 12.0.3.Final) started in 13956ms - Started 314 of 580 services (370 services are lazy, passive or on-demand)

無事起動したようです。Ctrl+Cで停止します。

5. systemdデーモン起動させる

デーモン起動用のスクリプトはすでに用意されているので配置するだけですぐにデーモン起動できるようになります。

mkdir -p /etc/wildfly
cp /opt/wildfly/docs/contrib/scripts/systemd/wildfly.conf /etc/wildfly/
vi /etc/wildfly/wildfly.conf

定義内容は必要に応じて編集してください。私はバインドアドレスを0.0.0.0 -> 127.0.0.1に変えました。

cp /opt/wildfly/docs/contrib/scripts/systemd/launch.sh /opt/wildfly/bin/
chmod 744 /opt/wildfly/bin/launch.sh
cp /opt/wildfly/docs/contrib/scripts/systemd/wildfly.service /etc/systemd/system/
chown -R wildfly /opt/wildfly*
systemctl daemon-reload
systemctl start wildfly
systemctl enable wildfly

6. Wildfly管理ユーザの作成

管理コンソールからWildflyの設定をいじれるように管理ユーザを設定しておく必要があります。

cd /opt/wildfly/bin
./add-user.sh

細かくは割愛しますがプロンプトに従ってManagement Userを追加してください。
詳しくは公式のドキュメントへ。

Apache HTTP Serverの構築

1. Apache HTTP Serverのインストール

yum install -y httpd

2. セキュリティ対策

デフォルト設定のままだとセキュリティ上リスクがあるため是正しておきます。

デフォルトコンテンツの削除

通常公開しないウェルカムページなどの不要コンテンツは極力排除します。

cd /etc/httpd/conf.d
mv welcome.conf welcome.conf.org
mv autoindex.conf autoindex.conf.org

ディレクトリ内容一覧表示機能の無効化

vi /etc/httpd/conf/httpd.conf

#Options Indexes FollowSymLinks
Options FollowSymLinks

TRACEメソッドの無効化

XST対策としてTRACEメソッドを無効化します。

vi /etc/httpd/conf/httpd.conf

# ファイル末尾に追記
TraceEnable off

バージョン情報表示機能の無効化

HTTPレスポンスヘッダにWebサーバのバージョンを含まないようにします。

vi /etc/httpd/conf/httpd.conf

# ファイル末尾に追記
ServerTokens ProductOnly
ServerSignature off

フレーム内ページ表示を同一ドメイン内のみに許可する

クリックジャッキング対策として、HTTPレスポンスヘッダにX-Frame-Optionsヘッダを追加します。

# 新規にファイル作成
vi /etc/httpd/conf.modules.d/headers.conf

# ファイル末尾に追記
Header append X-FRAME-OPTIONS SAMEORIGIN

Apache HTTP ServerとWildflyの連携

Apache HTTP ServerへのリクエストをWildflyへ引き込みます。

1. リバースプロキシの設定

80番ポートへのアクセスを8080番ポート(WildflyのHTTPリスナ)へ向けます。

# 新規にファイル追加
vi /etc/httpd/conf.modules.d/wildfly.conf

<VirtualHost *:80>
  ProxyPass / http://127.0.0.1:8080/
  ProxyPassReverse / http://example.net/
</VirtualHost>

2. 定義チェック&再起動

ここまで設定できたら定義ファイルをテストしてApache HTTP Serverを再起動します。

httpd -t
systemctl restart httpd

動作確認

http://example.com のように、シンプルに80番ポートにアクセスしてみて、Wildflyのウェルカムページが見えれば成功です。

キャプチャ.PNG

まとめ

OCIのLBでSSLに対応しており、バックエンド側通信はHTTPで構築してみました。Web/APサーバでSSL化しようとすると複雑になるのでLBで終端できるのはいいかんじです。

参考:攻撃を受ける前に見直すApacheの基本的なセキュリティ10のポイント

  • このエントリーをはてなブックマークに追加
  • Qiitaで続きを読む