【チートシート】Linuc Lv1-102

シェル及びスクリプト

bash
Bourne Again Shell

環境設定ファイル

ログイン時に実行される

1)/etc/profile
2)~/.bash_profile
3)~/.bash_login
4)~/.profile

【全ユーザ】/etc/profileログイン時 1 1環境変数などaliasやfunction。
【全ユーザ】/etc/bash.bashrcbash起動時 2環境変数を設定 alias
Debian系
【全ユーザ】/etc/bashrcbash起動時 5alias
RedHat系
【各ユーザ】~/.bash_profileログイン時 2 3環境変数など
【各ユーザ】~/.bash_loginログイン時 3
【各ユーザ】~/.profileログイン時 4
【各ユーザ】~/.bashrcbash起動時 4aliasの設定
【各ユーザ】~/.bash_logoutログアウト時ログアウト時実行させたい処理

if [条件式]; then
分岐処理1
fi


if [条件式1]; then
分岐処理1
elif [条件式2]; then
分岐処理2
else
分岐処理3
fi


i=0
while [ $i -ne 10 ]
do
echo $i
i=i+1
done


for INT in 1 2 3
  in
   echo $INT
  done

-dファイル名がディレクトリ名なら真
-fファイルの場合は真
-eファイルが存在するなら真
-Lシンボリックリンクなら真
-r読み取り可能なら真
-w書き込み可能なら真
-x実行可能なら真

ネットワークの基礎

/etc/hostname ファイル
ホスト名が記述されている

/etc/hosts ファイル
ホスト名とIPアドレスの対応

NetworkManager
ネットワークを管理するサブシステム

nmcli
NetworkManagerではnmcliコマンドでネットワークの設定、接続の管理、状態の管理

ip
ネットワークインターフェイスやルーティングテーブル、ARPテーブルを管理

ifconfig

IPアドレスIPアドレスを設定する
netmask サブネットマスクサブネットマスクを設定
upネットワークインターフェースを有効化
downネットワークインターフェースを無効化

ifup ifdown
ネットワークインターフェースの有効/無効化の操作

ping

traceroute

tracepath tracepath6

hostname [ホスト名]
ホスト名を指定している場合ホスト名を変更、ホスト名を指定していない場合現在のホスト名を表示

nmap
ポートの状態

netstat
ネットワークに関する様々な情報を表示

ss
最近のディストリビューションではnetstatに代わって使用されている

-n –numericサービス名の名前解決を行わない(ポート番号を表示)
-r –resolve名前解決を行う
「domain」の後ろには、通常はそのコンピュータが所属するドメインを指定します。
このようにすると、名前解決の際にホスト名だけを入力したとき、
domainの後ろに記述したドメイン名を付加して名前解決を行ってくれます。
-e –extended詳細情報を表示
-o –optionsタイマー情報も表示する
-m –memory各ソケットのメモリの使用量も表示する
-p –processesソケットを使用しているプロセスも表示する
netstatソケット、インターフェイスごとのネットワーク統計など表示
ss「ソケット」についての情報などを表示
※従来から移行 netstat → ss
lsoflsofコマンドは、プロセスが開いているファイルを表示するコマンドですが、
-iオプションを指定すると、開いているポートを確認できます。実行にはroot権限が必要です。
nmap攻撃者がネットワーク経由で開いているポートを確認する行為をポートスキャンといいます。nmapコマンドでポートスキャンを行えます
fuserポートを開いているプロセスを特定するには、fuserコマンドも使えます。

nc(netcat)
ネットワーク通信の確認

ルーティングテーブルを表示
route
netstat -r
ip route
ip route show

route
ルーティングテーブルの表示、操作

ifconfigコマンドインターフェースの状況を確認、設定
ipコマンドOPTION [a(address 全てのIPアドレスを表示link route neigh ..]
COMMAND [show add del]
hostnameコマンドシステムのホスト名を確認したり、変更
OPTION “-I(–all-ip-addresses)全てのIPアドレスを表示
nmcliコマンドNetworkManagerを制御して、ネットワーク状況を確認、設定

route ip route
▼追加
route add default gw 172.17.0.1
ip route add default via 172.17.0.1
route add -net 192.168.0.0 gw 172.17.0.1 netmask 255.255.0.0 eth0
ip route add 10.1.1.0/24 via 192.168.1.1

▼削除

ip route delete default

/etc/resolv.conf
どこにあるDNSサーバを使用するか設定

/etc/nsswitch.conf
名前解決の手段の順序で使用するかを設定

getentコマンド
getentコマンドは、指定したデータベースからユーザーやグループの情報一覧を表示することができます。
nsswitch.confの設定を確認するのに役立つ

ドメイン→アドレス
nslookup に代わる dig、host

host
ホストやドメインに関する情報を表示、デフォルトではホスト名とIPアドレスの変換をするコマンド

dig
digコマンドはDNSサーバに登録されている情報を詳しく表示
digコマンド形式……dig @server domain query-type
query-type例
A: ネットワークアドレス (省略時)
NS: ネームサーバ
MX: メールサーバの情報
SOAドメインのゾーン情報
ANY: 知っているすべての情報
TXT:テキスト情報

システム管理

重要なシステムサービス

dateコマンド
システム時刻を参照して現在の日時が表示されます。
date [MMDDhhmm[[CC]YY][.ss]]
「2020年3月4日10時」# date 030410002020

date “+%Y%m%d”
「年/月/日(曜日)」

hwclockコマンド
ハードウェア時刻の参照や設定を行います。設定にはroot権限が必要です。

オプション
-r –showハードウェア時刻を表示
-w –systohcシステム時刻をハードウェア時刻に
-s –hctosysハードウェア時刻をシステム時刻に

timedatectlコマンド
timedatectlコマンドで日付と時刻、タイムゾーンを管理できます。

サブコマンド
status現在の状態を表示(デフォルト)
set-time 時刻時刻を設定
set-time 日付日付を設定
set-time 日付 時刻日付と時刻を設定
set-timezone タイムゾーンタイムゾーンを設定
list-timezonesタイムゾーン一覧を表示する
set-ntp yes|noNTPを使うかどうか

/usr/share/zoneinfoディレクトリ
タイムゾーンの情報は、/usr/share/zoneinfoディレクトリ以下のバイナリファイルに格納

ntpdateコマンド
ntpdateコマンドを使うと、NTPサーバーから正確な時刻を取得できます。

/etc/ntp.conf
NTPサーバーの設定は/etc/ntp.confで行います。


Chrony
Chronyはntpd/ntpdateの代替となるNTPサーバー/クライアントソフトウェアです。デーモンプロセスchronydと、クライアントコマンドchronycから構成されます。

chronyc [サブコマンド]
chronydの管理はchronycコマンドで行います。

syslog
Linuxではsyslogを使って、さまざまなイベントをログファイルに記録したり、コンソールに表示したりできるようになっています。
システムのログ(シスログ)を取得して処理するソフトウェアには、syslogのほか、rsyslogsyslog-ngなどが使われています。

rsyslogの設定は、/etc/rsyslog.confファイルおよび/etc/rsyslog.dディレクトリ以下のファイルで行います。

ファシリティ
ログメッセージ生成元のプログラムは、メッセージにファシリティとプライオリティをタグ付けして出力します。ファシリティ(facility)はメッセージの生成元を表します。

ファシリティ
auth authpriv認証システム
croncron
deamon各種デーモン
kernカーネル
lpr印刷システム
mailメールサービス
userユーザーアプリケーションの出力
local0~local7ローカルシステム

loggerコマンド
loggerコマンドを使ってログメッセージを生成することもできます。

systemd-journaldデーモン
systemdの動作するシステムではsystemd-journaldデーモンを動作させ、ログの一元管理を行います。systemd-journaldはsystemdから起動したプロセスの標準出力やsyslogへのログメッセージをバイナリ形式で記録します。

/etc/systemd/journald.conf
systemd-journaldの設定は/etc/systemd/journald.confで行います。

systemd-catコマンド
systemdを採用したシステムでは、systemd-catコマンドを使って、コマンドの実行結果をジャーナルに書き込むことができます。

journalctlコマンド
systemdを採用したシステムでは、journalctlコマンドを使ってsystemdのログ(ジャーナル)を閲覧できます。

オプション
-a –a省略せず表示
-b –boot
-f –follow新規に追加されたログをリアルタイムを表示
-k –dmesgカーネルからのメッセージを表示
-l –full全て表示
-n –lines指定行数分表示
(デフォルト10行)
–no-pagerデフォルトで使われるlessコマンドを使用しない
-o –output
-r –reverse最古のログから表示(デフォルト)
→最新のログから表示
–since指定した日付時刻以降
-u –unit特定のユニット
–until指定した日付時刻まで表示

logrotateコマンド
logrotateコマンドを実行すると、ただちにログのローテーションを実施できます。-fオプションで設定ファイルを指定します。


MTA
電子メールを取り扱うソフトウェアには、MTA(Message Transfer Agent)やMDA(Mail Delivery Agent)、MUA(Mail User Agent)があります。

mailqコマンド
メールキューの内容を表示するには、mailqコマンドを使います。

mailコマンド
コマンドラインでメールを送信したり、受信メールを確認するには、mailコマンドを使います。

/etc/aliasesファイル
/etc/aliasesファイルを利用すると、メールアドレスの別名(エイリアス)を設定できます。
この設定を有効にするには、newaliasesコマンドを使います。

.forwardファイル
各ユーザーのホームディレクトリに.forwardファイルを用意し、その中に転送先のメールアドレスを記述します。この方法は、一時的にメールを転送したい場合などに便利です

セキュリティ

SUID(Set User ID)
所有者がrootユーザーであるプログラムにSUID(Set User ID)を設定すると、一般ユーザーが実行した場合でも、そのプログラムはroot権限で動作します

chageコマンド
有効期限の設定はchageコマンドで行います。

オプション
-l –list有効期限を表示
-m –mindaysパスワード変更日数の最低日数を設定
-M –maxdaysパスワードの最大有効期限日数を設定
-d –lastdayパスワードの最終更新日を設定
-W –warndays有効期限切れが何日前から警告するか設定
-I –inactive有効期限後アカウントがロックされるまでの日数を設定
-E –expiresdateアカウントが無効になる日付を指定

whoコマンド
ユーザーのログイン状況やログイン履歴を把握することで、不審なログインを見つけ出すことができます。ログイン中のユーザーを調べるには、whoコマンドを使います。

wコマンド
wコマンドを使うと、ログイン中のユーザーに加え、システム情報も表示されます

lastコマンド
lastコマンドを使うと、最近ログインしたユーザーの一覧を表示します。


開いているポートを確認するには、netstatコマンドやssコマンド、lsofコマンドを使います。

netstatソケット、インターフェイスごとのネットワーク統計など表示
ss「ソケット」についての情報などを表示
※従来から移行 netstat → ss
lsoflsofコマンドは、プロセスが開いているファイルを表示するコマンドですが、
-iオプションを指定すると、開いているポートを確認できます。実行にはroot権限が必要です。
nmap攻撃者がネットワーク経由で開いているポートを確認する行為をポートスキャンといいます。nmapコマンドでポートスキャンを行えます
fuserポートを開いているプロセスを特定するには、fuserコマンドも使えます。


/bin/false
/sbin/nologin
ユーザーのログインシェルを/bin/falseや/sbin/nologinに変更すると、一般ユーザーのログインを禁止することができます。

ulimitコマンド
ulimitコマンドを使うと、ユーザーが利用できるリソースを制御できます。

オプション
-a制限の設定をずべてひょうじ
-c サイズコアファイルのサイズを指定
-f サイズシェルが生成できるファイルの最大サイズを指定
-n 数同時に開けるファイル数を指定
-u プロセス数ユーザが利用できる最大のプロセス数を指定
-v サイズ最大仮想メモリサイズ

suコマンド
suコマンドを使うと、一時的に別のユーザーになることができます。

sudoコマンド
特定の管理者コマンドのみの実行を許可したい場合は、sudoコマンドが利用できます。sudoコマンドを使えば、任意の管理者コマンドを任意のユーザーに許可することができます。


inetd
xinetd
常駐するデーモンの数が多くなると、待機中のデーモンが消費するシステムリソースもそれだけ大きくなります。
inetdやxinetdといったスーパーサーバーは、他のサーバープログラムに代わってサービス要求を監視し、接続が確立した時点で本来のサーバープログラムに要求を引き渡します。

/etc/xinetd.conf
xinetdの設定は、全体的な設定を行う/etc/xinetd.confファイルと、xinetd.dディレクトリ(通常は/etc/xinetd.d)以下にあるサービスごとの設定ファイルから構成されます。

/etc/inetd.conf
inetdの設定ファイルは/etc/inetd.confです。1行につき1つのサービスを設定します。サービスを無効にするには、該当するサービスの行頭に「#」を記述しコメント化します。

/etc/nologin
/etc/nologinファイルを作成しておくと、rootアカウントによるログイン以外は禁止されます。

Netfilter
Linuxカーネルには、Netfilterというパケットフィルタリング機能が備わっています。

iptablesコマンド
iptablesコマンドを使ってパケットフィルタリングのルールを細かく設定することができます。

firewalld
CentOS 7以降では、ファイヤウォールサービスとしてfirewalldが搭載されました。

firewall-cmd –remove-service=dhcpv6-client
※ 即座に設定が反映されますが、再起動等の reload 時に設定が戻ってしまいます。
→設定が戻らないようにするには –permanent を付け加えます。

firewall-cmd –permanent –remove-service=dhcpv6-client
※ 設定は恒久的に残りますが、即座には反映されません
→reload 等が必要です。

「–zone=ゾーン」を指定しない場合は、デフォルトのゾーン(初期値はpublic)についての操作になります。

sshに使われる暗号化アルゴリズム

アルゴリズム
RSA広く普及
DSA広く普及、安全性に懸念あり
ECDSA小さな鍵長、高速
ED25519安全性が高い、高速、DSAやDCDSAより安全性が高い

ssh-keygen
公開鍵と秘密鍵のペアを作成する


GnuPG(GNU Privacy Guard)
ファイルを暗号化したい場合利用

gpg コマンド
GnuPG
を利用するために使います。

ホスト認証

  1. ホスト公開鍵を登録

オープンソースの文化

コピー
レフト
GPLフリーソフトウェア財団(FSF)
AGPLインターネット経由でもソースコードの開示を要求
LGPLライブラリ用
MPLMozilla Foundation
BSD License×カリフォルニア大学のバークレー校
MIT License×マサチューセッツ工科大学
Apache License×Apacheソフトウェア財団(ASF)
いずれのライセンスでも著作権免責事項表記が義務付けられている