シェル及びスクリプト
bash
Bourne Again Shell
環境設定ファイル
ログイン時に実行される
1)/etc/profile
2)~/.bash_profile
3)~/.bash_login
4)~/.profile
【全ユーザ】/etc/profile | ログイン時 1 1 | 環境変数などaliasやfunction。 |
【全ユーザ】/etc/bash.bashrc | bash起動時 2 | 環境変数を設定 alias Debian系 |
【全ユーザ】/etc/bashrc | bash起動時 5 | alias RedHat系 |
【各ユーザ】~/.bash_profile | ログイン時 2 3 | 環境変数など |
【各ユーザ】~/.bash_login | ログイン時 3 | |
【各ユーザ】~/.profile | ログイン時 4 | |
【各ユーザ】~/.bashrc | bash起動時 4 | aliasの設定 |
【各ユーザ】~/.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
ポートの状態
PORT STATE SERVICE
80/tcp open http
110/tcp open pop3
143/tcp open imap
631/tcp open ipp
993/tcp open imaps
995/tcp open pop3s
netstat
ネットワークに関する様々な情報を表示
ss
最近のディストリビューションではnetstatに代わって使用されている
-n –numeric | サービス名の名前解決を行わない(ポート番号を表示) |
-r –resolve | 名前解決を行う 「domain」の後ろには、通常はそのコンピュータが所属するドメインを指定します。 このようにすると、名前解決の際にホスト名だけを入力したとき、 domainの後ろに記述したドメイン名を付加して名前解決を行ってくれます。 |
-e –extended | 詳細情報を表示 |
-o –options | タイマー情報も表示する |
-m –memory | 各ソケットのメモリの使用量も表示する |
-p –processes | ソケットを使用しているプロセスも表示する |
netstat | ソケット、インターフェイスごとのネットワーク統計など表示 |
ss | 「ソケット」についての情報などを表示 ※従来から移行 netstat → ss |
lsof | lsofコマンドは、プロセスが開いているファイルを表示するコマンドですが、 -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|no | NTPを使うかどうか |
/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のほか、rsyslogやsyslog-ngなどが使われています。
rsyslogの設定は、/etc/rsyslog.confファイルおよび/etc/rsyslog.dディレクトリ以下のファイルで行います。
ファシリティ
ログメッセージ生成元のプログラムは、メッセージにファシリティとプライオリティをタグ付けして出力します。ファシリティ(facility)はメッセージの生成元を表します。
ファシリティ | |
---|---|
auth authpriv | 認証システム |
cron | cron |
deamon | 各種デーモン |
kern | カーネル |
lpr | 印刷システム |
メールサービス | |
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 |
lsof | lsofコマンドは、プロセスが開いているファイルを表示するコマンドですが、 -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を利用するために使います。
ホスト認証
- ホスト公開鍵を登録
オープンソースの文化
コピー レフト | ||
---|---|---|
GPL | ○ | フリーソフトウェア財団(FSF) |
AGPL | ○ | インターネット経由でもソースコードの開示を要求 |
LGPL | △ | ライブラリ用 |
MPL | △ | Mozilla Foundation |
BSD License | × | カリフォルニア大学のバークレー校 |
MIT License | × | マサチューセッツ工科大学 |
Apache License | × | Apacheソフトウェア財団(ASF) |