【LinuC202試験対策】登場人物まとめ

## この記事は何の記事 ?
LinuC202 は登場人物があまりにも多く，
「君は何をされている方なの ?」となる事が多々ありました
ということで登場人物を簡単にまとめました

## ネットワーククライアントの管理
### DHCP
クライアントの IP アドレスを自動的に割り当てるプロトコル

#### dhcpd
DHCP サーバーのデーモン

#### dhcpd.conf
dhcpd の設定ファイル
`/etc/dhcpd.conf` や `/etc/dhcp/dhcpd.conf` に置かれる
雰囲気は以下
```
subnet xxx.xxx.xxx.xxx netmask 255.255.0.0 {
    option routers xxx.xxx.xxx.1;
    option subnet-mask 255.255.0.0;

    default-lease-time 21600;
}
```

#### dhcpd.leases
dhcpd が現在貸し出している IP アドレスが記録されている

#### DHCP クライアント
DHCP クライアント
- dhclient
- pump
- dhcpcd

dhclient コマンドで，
以下のように DHCP サーバーから IP アドレス等を取得する

```
dhclient -d enp0s4
```

#### dhcrelay
自分のネットワークに DHCP サーバーがいない時は，
隣町の DHCP サーバーまで行かないといけません
このように異なるネットワークで DHCP サーバーを利用する時は，
DHCP リクエストを中継する必要があります
それを行うのが DHCP リレーエージェントです
また，そのデーモンが `dhcrelay` です

#### radvd
IPv6 では DHCP なしで IP アドレスを自動設定できます
クライアントがルーターにルーター要請(RS）を送り，
ルーターがルーター通知(RA)を返します
`radvd` パッケージを導入すると，ルーター通知を返せるようになります

クライアントは RA を元に，
IP アドレスの生成やデフォルトゲートウェイの設定を行います

### PAM
認証方法が色々あって管理できない...
そこで一元管理して差し上げようというのが PAM です

取り外しできる　認証　モジュールの集まり
Pluggable Authentication modules

といった感じです

#### pam.d
PAM の設定ファイルが置かれているディレクトリです
`etc/pam.d` に `su` や `passwd` といったファイルが置かれています
それぞれの認証の設定ファイルが置かれています

#### PAMの設定ファイルの書式
雰囲気は以下の通りです

```
モジュールタイプ コントロール モジュールのパス 引数
```

```
auth requisite pam_deny.so
```

### SSSD
認証サービスから認証情報を取得し，
認証の集中管理や，オフラインで認証できるようにしてくれる子

#### sssd.conf
SSSD の設定ファイル
`etc/sssd/sssd.conf` ファイル
雰囲気は以下
```
[sssd]
domains = ldap_domain
services = nss, pam
config_file_version = 2

[domain/ldap_domain]
id_provider = ldap
auth_provider = ldap
chpass_provider = ldap
access_provider = ldap
cache_credentials = True
ldap_uri = ldap://ldap.example.com
ldap_search_base = dc=example,dc=com
ldap_id_mapping = True
default_shell = /bin/bash
fallback_homedir = /home/%u
```

### LDAP
ディレクトリ情報の情報をやりとりするプロトコル

#### ディレクトリ情報ツリー
国，組織，部門，個人のように階層構造に情報が格納されているツリー
このツリーの情報を組み合わせて個人を識別できるようにするのが識別名

「日本」の「いろは組織」の「ほへと部門」にいる「ちりぬるを」さんの
識別名は以下のようになる（雰囲気）

```
uid=ちりぬるを, ou=ほへと部門, dc=いろは組織, dc=日本
```

#### LDIF
LDAP Data Interchange Format の略
LDAP ディレクトリのデータを LDIF 形式でエクスポートとし，
他の LDAP サーバーにデータを移行する際などに利用する形式
雰囲気は以下
```
dn: uid=john.doe,ou=People,dc=example,dc=com
objectClass: inetOrgPerson
uid: john.doe
cn: John Doe
sn: Doe
givenName: John
mail: [メールアドレスを削除しました]
telephoneNumber: +1 555-123-4567
```

#### スキーマ
LDAP でデータを格納するための，
オブジェクトクラスや属性の定義のこと

`etc/openldap/schema` ディレクトリ以下にある
主なスキーマは `core.schema` や `nis.schema` など

#### オブジェクト識別子
LDAPディレクトリ内の
オブジェクトクラスや属性などを一意に識別するための識別子
inetOrgPerson といったオブジェクトクラスなどに「2.16....(省略)」
といたように識別子が振られている

OID は重複しないように IANA によって管理されている

### OpenLDAP
LDAP を利用するのによく使われる

#### OpenLDAP サーバー
サーバー側のデーモンは `slapd`

以下のコマンドで設定管理
|コマンド|説明|
|:--|:--|
|slapadd|LDAP データベースにエントリを追加|
|slapcat|LDAP データベースを LDIF で確認|
|slapindex|LDAP データベースのインデックスを振りなおす|
|slappasswd|暗号化されたパスワードを作成|
|slaptest|サーバーの設定を確認|

#### OpenLDAP クライアント
以下のコマンドを利用する

|コマンド|説明|
|:--|:--|
|ldapadd|エントリ追加|
|ldapsearch|エントリ検索|
|ldapdelete|エントリ削除|
|ldapmodify|エントリ変更|
|ldappasswd|パスワード変更|

#### アクセス制御
エントリや属性に対してアクセス制御を行う
誰が，何に対して，どのような操作を制御するのか記述する
雰囲気は以下

```
olcAccess: to attrs=userPassword
        by self write
        by anonymous auth
        by * none
```


## ドメインネームサーバー
### BIND
代表的なDNSサーバーソフトウェア

### rndc
BINDを操作するコマンド

### /etc/named.conf
BINDのメイン設定ファイル
雰囲気は以下

```
options {
        directory "/var/cache/bind";
        recursion yes;
        allow-query { any; };
        forwarders {
                8.8.8.8;
                8.8.4.4;
        };
        dnssec-validation auto;
        listen-on-v6 { any; };
};

zone "." IN {
        type hint;
        file "named.ca";
};

zone "example.com" IN {
        type master;
        file "db.example.com";
        allow-update { none; };
};

zone "192.168.1.in-addr.arpa" IN {
        type master;
        file "db.192.168.1";
        allow-update { none; };
};
```

### dnssec-keygen
BINDでTSIGやDENSECを使ってゾーンデータを認証するための鍵を作成するコマンド

## HTTPサーバーとプロキシサーバー
### Apache
#### httpd.conf
メインの設定ファイル
設定項目をディレクティブという
雰囲気は以下
```
# 全体設定
ServerRoot "/etc/httpd"
Listen 80
Include conf.modules.d/*.conf
User apache
Group apache
ServerAdmin admin@example.com
ServerName example.com:80

# ディレクトリ設定
DocumentRoot "/var/www/html"
<Directory "/var/www/html">
    Options Indexes FollowSymLinks
    AllowOverride None
    Require all granted
</Directory>

# ログ設定
ErrorLog "logs/error_log"
LogLevel warn
LogFormat "%h %l %u %t \"%r\" %>s %b" common
CustomLog "logs/access_log" common

# VirtualHost設定
Include conf.d/*.conf
```

#### 外部設定ファイル
だいたいは `.htaccess` がそのファイル
AllowOverride ディレクティブで外部設定ファイルの許可が必要

```
AccessFileName .htaccess
<Directory "/var/www/html/example">
    AllowOverride All
</Directory>
```

#### Apache サーバー起動

CentOS
```
# systemctl start http.service
```

Ubuntu
```
# systemctl start apache2.service
```

#### Apache サーバー制御
`apachectl` コマンドで制御

#### Apache で利用するモジュール
`mod_authz_basic` など `mod_xxx` のようなモジュールを
ロードすることで機能を拡張できる


### Nginx
高速な web サーバー
リバースプロキシサーバーやメールサーバーとしての機能もある

#### /etc/nginx/nginx.conf
メイン設定ファイル
雰囲気は以下
```
user nginx; # 実行ユーザー
worker_processes auto; # ワーカプロセス数 (auto は CPU コア数に合わせる)

events {
    worker_connections 1024; # ワーカプロセスあたりの接続数
}

http {
    include mime.types; # MIMEタイプの設定
    default_type application/octet-stream; # デフォルトのMIMEタイプ

    log_format main '$remote_addr - $remote_user [$time_local] "$request" '
                     '$status $body_bytes_sent "$http_referer" '
                     '"$http_user_agent" "$http_x_forwarded_for"'; # ログフォーマット

    access_log /var/log/nginx/access.log main; # アクセスログ
    error_log /var/log/nginx/error.log warn; # エラーログ

    sendfile on; # sendfile システムコールを有効化
    keepalive_timeout 65; # keepalive タイムアウト

    server {
        listen 80; # 待ち受けポート
        server_name example.com; # サーバー名

        location / {
            root /usr/share/nginx/html; # ドキュメントルート
            index index.html index.htm; # インデックスファイル
        }
    }
}
```

### Squid
Linuxでよく使われるプロキシサーバー
#### /etc/squid/squid.conf
アクセスコントロールリストを上に書いて
それらに対する制御を下に書く

```
acl Safe_ports port 80 21 443 1025-65535

http_access deny !Safe_ports
```

## 電子メールサービス
### MUA, MTA, MDA
M はメールまたはメッセージの M です
A はエージェントの A です
ざっくりまとめるとこうです

|m|説明|
|:--|:--|
|MUA|配達でいうポストに荷物を届けたり荷物を送ってくれる A|
|MTA|配達でいう拠点間で荷物を配達してくれる A|
|MDA|配達でいう最寄りの拠点で届け先の所定の位置に荷物を置く A|

### smtpとpop, imap
ざっくりまとめるとこうです
|プロトコル|説明|
|:--|:--|
|smtp|メール送信プロトコル|
|pop|メール受信プロトコルで，サーバーからメールを削除する|
|imap|メール受信プロトコルで，サーバーからメールを削除しない|

### mbox形式とmaildir形式
|形式|説明|
|:--|:--|
|mbox|全てのメールが 1 つのファイルに書かれる|
|maildir|メール 1 つに 1 ファイル|

### postfix
MTA
`smtpd` など複数のプログラムが協調して動く

#### /etc/postfix/main.cf
このディレクトリに以下の設定ファイル
MTAとしての基本設定ファイル
```
#️ドメイン名
mydomain = example.com
#️ メールアドレスで@以降のドメイン名
myorigin = $mydomain
```
#### master.cf
Postfixを構成する各種デーモンの設定ファイル

#### postconfコマンド
postfixの設定値を表示
設定ファイルに基づく

#### postfixコマンド
postfixの制御を行う
```
postfix stop
systemctl stop postfix.service
```

### SMTP認証
SMTPに認証機能が無いので、
その機能を追加する

SAMLというライブラリが提供する機能によって実現

### Dovecot
MDA
オープンソースのIMAPおよびPOP3サーバー

#### /etc/dovecot/
Dovecot の設定ファイルが以下にある
`/etc/dovecot/dovecot.conf` や `/etc/dovecot/conf.d`

以下のように {数字}-{英字}.conf のように関連ファイルが存在
- 10-mail.conf: メールボックスに関する設定
- 10-master.conf: Dovecotのプロセスに関する設定

## ファイル共有サービス
### Samba
ファイルやプリンタなどのリソースを共有するためのソフトウェア
Linux と Windows 間で使える
Linux をファイルサーバーとして Windows からアクセスしたり，
逆もできる

#### 3 つのサーバープロセス
|プロセス|機能|
|:--|:--|
|smbd|ファイル共有，認証等|
|nmbd|ブラウジング機能，NetBIOS名前解決，WINSサーバー等|
|winbindd|Winbind機能|

#### smb.conf
Samba サーバーの設定ファイル
`etc/samba/smb.conf`
雰囲気は以下

```
[global]
        workgroup = WORKGROUP
        server string = Samba Server
        netbios name = SAMBA
        security = user
        map to guest = bad user
        name resolve order = bcast host lmhosts wins

[homes]
        comment = Home Directories
        browseable = no
        writable = yes
        valid users = %S
        create mask = 0700
        directory mask = 0700

[public]
        comment = Public Share
        path = /srv/samba/public
        public = yes
        writable = yes
        printable = no
        create mask = 0777
        directory mask = 0777
```

#### Samba ユーザー管理
`pdbedit` と `smbpasswd` コマンドで管理できる
`smbpasswd` はパスワード変更できる

#### Samba 管理コマンド
##### smbcontrol
`smbd`, `nmbd`, `winbidd` に対してメッセージを送り制御する

##### smbstatus
Samba サーバーに接続されているクライアントなどを表示する

##### nmlookup
NetBIOS 名から IP アドレスを検索するなどで利用する

#### Samba クライアント
`smbclient [option] 接続先`
Samba サーバーや Windows 側で提供されている共有リソースを利用するときに使用

#### ACL
Samba では従来のパーミッションより細かい設定ができる
取得と設定変更は以下のコマンド
```
# getfacl ファイル名
# setfacl [option] ACL エントリ対象
```
```
# getfacl filename
# setfacl -m user:testuser:rw filename
```



## システムのセキュリティ
### パケットフィルタリング
パケットのフィルタリングをする
以下のコマンドを利用
- `iptables`
- `ip6tables`

### ファイヤーウォールを容易に設定できるツール
パケットフィルタリングによるファイアウォールを
簡単に設定できるのが以下のツール

- CentOS: `firewalld`, `firewall-cmd` コマンド
- Ubuntu: `ufw` コマンド

### OpenSSH
SSHサーバーの機能は `sshd` が提供
sshd の設定ファイルは `/etc/ssh/sshd_config`

### セキュリティ業務
#### Snort
パケットスニファリングツール
ネットワークのパケットを監視し、
攻撃や侵入を捕らえる

#### Tripwire
ファイルの改ざんを検知する

#### OpenVAS
セキュリティスキャナ
ネットワーク経由で脆弱性のチェックが可能

#### OpenSACP
Security Content Automation Protocol 
→ セキュリティ対策を標準化・自動化する規格
これに基づいてセキュリティをチェックしてくれるツール

#### Fail2ban
ログファイルを監視して攻撃を検知
攻撃元のIPアドレスをお断りするソフトウェア

この子短期間に何回もログイン失敗してるから、
iptablesにこの子からの接続を拒否するルール追加したろみたいなことをする