こちらがわかりやすし

 

 

 

ダギャー'sメモ

【認証と認可の定義】

上記URLから引用

①「認証」の定義

「認証」とは 通信の相手が誰(何)であるかを確認すること。純粋な「認証」を考えるにあたっては「リソース」やそれに対する「権限」という概念は登場しない。

①「認可」の定義

「認可」とは とある特定の条件に対して、リソースアクセスの権限を与えること。純粋な「認可」には、「誰」という考え方はない。

 

【20201224現在の認証と認可の趨勢】

※オイラが勝手に感じてること

①「認証」モジュールと「認可」モジュールの分離

かつてアプリ内で「認証」と「認可」は同一モジュールに実装されていたのを認証モジュールと認可モジュールに分離

※認証モジュールと認可モジュールが分離されることで複数の選択肢から認証モジュールと認可モジュールの組合わせが選択できるようになった。

※さらにレガシーなミドルウェアでは認証や認可の処理系が主処理系とモノリシックに結合していてプロダクト固有の認証や認可方式以外の選択肢がなかった

②システム内で「認証」モジュールを統合

アプリやサービス単位に実装されていた「認証」モジュールをシステム内で統合

※従来はシステム内の各ミドルウエアやアプリケーションごとに実装していた認証モジュールをシステム内で一か所の認証サーバにまとめるので、認証モジュール(だけ)から見えればいいユーザデータベース(LDAPディレクトリやRDB)も付随して一元化可能となる。

※ユーザデータベースは認証の用途以外にアドレス帳などのような別の用途もある

※sambaのようにデフォルトではOS内ユーザとはsambaユーザーはシステム内で別ユーザと考えるプロダクトもある。postfixではOS内ユーザとは別の配送先ユーザをあえてvirtualユーザと呼称している

③システム内で「認可」プロトコルを統一

アプリやサービス単位に実装されていたメカニズムが異なる「認可」モジュールをシステム内で共通プロトコルにそろえる。

※認証と違って認可の方はサービスやアプリごとのモジュールで実装されている場合もある。

認証が成功した際にサーバからクライアントにトークン(プロトコルやプロダクトごとに何種類かの呼び名がある)が発行されクライアントは一定期間トークンを保持し、クライアントがあるサービスやアプリへ初回アクセスした際にクライアントから発行済みで有効期限内のトークンをサーバにバックグラウンドで送信してこのトークンによってサーバが認可するケースが一般的

④「認証」と「認可」のシングルサインオン(SSO)化

システム内にユーザアクセス制御をするアプリやサービスがいっぱいある今日では、ユーザビリティ向上の要件が顕在化する一方で、上記②③によりシステム内で一元化された「認証」サーバや「認可」プロトコルに対してだけSSO機構を備えればよくなり、技術的制約(開発コストと保守コストの増大)からの解放され実現のハードルが下がった。

⑤「認証」と「認可」の多要素化

上記②③によりシステム内で一元化され、④によりアプリやサービス間で一元化された認証や認可によりユーザビリティと技術的制約をいずれも損なうことなくセキュアに多要素認証(認可)が実現されるようになった。

※複数回の認証プロセスをユーザに強いるけど、いったん認証されてしまえば他のサービスやアプリでも認証状態が一定期間保持され、再度認証を聞かれることが無くなる動作のため、従来よりも多要素による認証がユーザビリティを低減しなくなった。

 

【これから10年間くらいの認証認可の予測】

おいらではわからにゃーw

認証と認可はシステムセキュリティ技術の一角であるが、システムセキュリティ技術は、本質的に攻撃者と防衛者との間で永遠に繰り広げられ続けるいたちごっこの様相を示している。

ゆえに、技術の完成は理論上ありえない。

つまり、永久に進化し続けることが宿命づけられた技術(群)だと思うダギャー。

一方で、システムを保有し設計し構築する側のリソースは有限である。概してユーザーやサービスプロバイダはお金を出し渋り、かつ不勉強で安易であるw

このような趨勢から考えてこれから10年間で認証や認可あるいは他のシステムセキュリティ技術が一体どっちに向かって進んでどうなるのかオイラのしがない頭では予測できニャーw

脳みそパーン☆

 

【これまでの認証や認可技術の流れ】

■apache1.3→2.0→2.2→2.4

 

■nginx

 

■telnet

 

■vsftpd

 

■dovecot

 

■postfix

 

■samba

 

■sshd

 

■nfs

 

■postgresql

 

■oracle DB

 

■tomcat

 

■mongoDB

 

■bind

 

 

■OS(Linux)レイヤー以下の認証認可

・login

 認可されるリソースはファイルやディレクトリアクセス権限とコマンド実行権限

・su

 認可されるリソースはユーザ変更権限

・sudo

 認可されるリソースは特定ユーザにおけるファイルやディレクトリアクセスとコマンド実行権限

・他のセキュリティ技術との関係

 - selinux

 - IDS/IPS

 - ホスト認可

  ※単独ミドルウェアやアプリに限定されたスコープが狭いホスト認可と業務システム全体

   で統一化され協調したスコープが広いホスト認可がある。

   - 単にsourceIPだけでフィルタするだけのもの→ACL

   - L7プロトコルのヘッダ情報を使ってフィルタするもの→Webサーバ、MTA

   - PKIを利用するもの→ssh、tls

   - DNS、認証サーバ、あるいはDCなど他のサーバと協調するもの

    →MTA送信者認証、ADなど

     ※他のサーバは認証サーバのように権威づけされた信頼性の担保を担うサーバ

 - CPUアーキテクチャに実装される認証認可命令→リングプロテクション

 - BIOSに実装される認証認可命令

 - HDD暗号化/複合化

 - デバイス(NIC、Wifi、USBなど)へのアクセス

※ファイルシステム管理やマウントやLVM管理に特有のアクセス権限は?

※systemdに特有のアクセス権限は?

 

 

 

■javaサーブレット

・サーブレットコンテナに備わる認証認可モジュール

 

・Webアプリケーション側で備える認証認可モジュール

 - pure javaに備わる認証認可ライブラリ

 - フレームワークに備わる認証認可ライブラリ群

 

■その他Webサービス

・pythonに備わる認証認可モジュール

 

・pythonフレームワークの""に備わる認証認可モジュール

 

■プロプライエタリプロダクト

・NetBackup

・WebSAM System Manager

・JP1

・Tivoli Netcool

・Lifekeeper

[着眼点]

いつだれがどんなリソースにアクセスするのか?それにどのような権限が必要とされるのか?システム管理者や運用オペレータなどの特定の役割の人に特定の権限だけあればいいのか?常に変動する不特定多数の人ではなく

 

■その他のインフラのコンポーネント

・cisco

・BigIP

・ストレージ

・テープライブラリ

・FCスイッチ

・vSphere vCenter

・virtmanager

・openstack

・openshift

・パブリッククラウドのオーケストレーションツール、マネージドサービス

 

★認証認可技術のターニングポイント

・Windows Active Directory

・認証データベースの変遷

・RADIUS

・WebUI

・WebAPI

・クラウド

・SAMLとOAuth

 

脳みそパーン☆

 

 

 

 

 

 

■bonding

・わかりやすい説明

CentOS7(RHEL7)でbondingの設定

・公式マニュアル

 

第7章 ネットワークボンディングの設定

 

■anaconda-ks.cfg

・場所

/root/anaconda-ks.cfg

・わかりやすい説明

/root配下にあるanaconda-ks.cfg ってなに? - Qiita

・オイラの環境

[centos7copy]$ cat -n /root/anaconda-ks.cfg
     1  #version=DEVEL
     2  # System authorization information
     3  auth --enableshadow --passalgo=sha512
     4  # Use CDROM installation media
     5  cdrom
     6  # Use graphical install
     7  graphical
     8  # Run the Setup Agent on first boot
     9  firstboot --enable
    10  ignoredisk --only-use=sda
    11  # Keyboard layouts
    12  keyboard --vckeymap=jp --xlayouts='jp'
    13  # System language
    14  lang ja_JP.UTF-8
    15
    16  # Network information
    17  network  --bootproto=dhcp --device=ens33 --onboot=off --ipv6=auto --no-activate
    18  network  --bootproto=dhcp --device=ens34 --onboot=off --ipv6=auto
    19  network  --hostname=localhost.localdomain
    20
    21  # Root password
    22  rootpw --iscrypted $6$xeuXj3TsF9QRgaQv$uwOdZ.idhXiXg9hGxdX4aRHiYI941xgFaZ7ZidrZmbCD3crA1e4w0Q0yxojY3AR1qZ7xUqkL54irx8yw4sJ61/
    23  # System services
    24  services --enabled="chronyd"
    25  # System timezone
    26  timezone Asia/Tokyo --isUtc
    27  user --name=dagyah --password=$6$khHHoIh0pwc6edb2$nqMO5l4R43OdWXotbfklKuPliU.QnKR93BcCKXuxfRCJ3MjWO2wu0yb2M.1KHgQFjIJWnjlX5uUl5vCsPZApj1 --iscrypted --gecos="dagyah"
    28  # System bootloader configuration
    29  bootloader --append=" crashkernel=auto" --location=mbr --boot-drive=sda
    30  # Partition clearing information
    31  clearpart --none --initlabel
    32  # Disk partitioning information
    33  part /boot --fstype="xfs" --ondisk=sda --size=1024
    34  part swap --fstype="swap" --ondisk=sda --size=2048
    35  part / --fstype="ext4" --ondisk=sda --size=17407
    36
    37  %packages
    38  @^minimal
    39  @core
    40  chrony
    41  kexec-tools
    42
    43  %end
    44
    45  %addon com_redhat_kdump --enable --reserve-mb='auto'
    46
    47  %end
    48
    49  %anaconda
    50  pwpolicy root --minlen=6 --minquality=50 --notstrict --nochanges --notempty
    51  pwpolicy user --minlen=6 --minquality=50 --notstrict --nochanges --notempty
    52  pwpolicy luks --minlen=6 --minquality=50 --notstrict --nochanges --notempty
    53  %end

■nmcli

・わかりやすい説明

nmcliの使い方メモ - Qiita

・公式マニュアル

3.3. NMCLI を使用する IP ネットワークの設定

・オイラの環境

[centos7copy]$ nmcli con
NAME     UUID                                  TYPE      DEVICE
ens34    646aff8c-fa50-39c4-a675-2ebea1bf2355  ethernet  ens34
ens33    a517e1c5-e480-3f39-b2a4-f19b6080a02d  ethernet  ens33
ens38    40f417a3-7ff6-37a1-9ffd-080502b27aaf  ethernet  ens38
docker0  8ece0a56-7fac-4951-891b-d406227240e8  bridge    docker0
virbr0   1b524f04-d935-4777-af00-81196cc158ce  bridge    virbr0

 

[centos7copy]$ nmcli con show ens34 | cat -n
     1  connection.id:                          ens34
     2  connection.uuid:                        646aff8c-fa50-39c4-a675-2ebea1bf2355
     3  connection.stable-id:                   --
     4  connection.type:                        802-3-ethernet
     5  connection.interface-name:              --
     6  connection.autoconnect:                 yes
     7  connection.autoconnect-priority:        -999
     8  connection.autoconnect-retries:         -1 (default)
     9  connection.multi-connect:               0 (default)
    10  connection.auth-retries:                -1
    11  connection.timestamp:                   1608274899
    12  connection.read-only:                   no
    13  connection.permissions:                 --
    14  connection.zone:                        --
    15  connection.master:                      --
    16  connection.slave-type:                  --
    17  connection.autoconnect-slaves:          -1 (default)
    18  connection.secondaries:                 --
    19  connection.gateway-ping-timeout:        0
    20  connection.metered:                     unknown
    21  connection.lldp:                        default
    22  connection.mdns:                        -1 (default)
    23  connection.llmnr:                       -1 (default)
    24  802-3-ethernet.port:                    --
    25  802-3-ethernet.speed:                   0
    26  802-3-ethernet.duplex:                  --
    27  802-3-ethernet.auto-negotiate:          no
    28  802-3-ethernet.mac-address:             00:0C:29:F0:FD:2C
    29  802-3-ethernet.cloned-mac-address:      --
    30  802-3-ethernet.generate-mac-address-mask:--
    31  802-3-ethernet.mac-address-blacklist:   --
    32  802-3-ethernet.mtu:                     auto
    33  802-3-ethernet.s390-subchannels:        --
    34  802-3-ethernet.s390-nettype:            --
    35  802-3-ethernet.s390-options:            --
    36  802-3-ethernet.wake-on-lan:             default
    37  802-3-ethernet.wake-on-lan-password:    --
    38  ipv4.method:                            manual
    39  ipv4.dns:                               192.168.19.200,192.168.100.1
    40  ipv4.dns-search:                        --
    41  ipv4.dns-options:                       ""
    42  ipv4.dns-priority:                      0
    43  ipv4.addresses:                         192.168.101.201/24
    44  ipv4.gateway:                           192.168.101.2
    45  ipv4.routes:                            --
    46  ipv4.route-metric:                      -1
    47  ipv4.route-table:                       0 (unspec)
    48  ipv4.routing-rules:                     --
    49  ipv4.ignore-auto-routes:                no
    50  ipv4.ignore-auto-dns:                   no
    51  ipv4.dhcp-client-id:                    --
    52  ipv4.dhcp-timeout:                      0 (default)
    53  ipv4.dhcp-send-hostname:                yes
    54  ipv4.dhcp-hostname:                     --
    55  ipv4.dhcp-fqdn:                         --
    56  ipv4.never-default:                     no
    57  ipv4.may-fail:                          yes
    58  ipv4.dad-timeout:                       -1 (default)
    59  ipv6.method:                            auto
    60  ipv6.dns:                               --
    61  ipv6.dns-search:                        --
    62  ipv6.dns-options:                       ""
    63  ipv6.dns-priority:                      0
    64  ipv6.addresses:                         --
    65  ipv6.gateway:                           --
    66  ipv6.routes:                            --
    67  ipv6.route-metric:                      -1
    68  ipv6.route-table:                       0 (unspec)
    69  ipv6.routing-rules:                     --
    70  ipv6.ignore-auto-routes:                no
    71  ipv6.ignore-auto-dns:                   no
    72  ipv6.never-default:                     no
    73  ipv6.may-fail:                          yes
    74  ipv6.ip6-privacy:                       -1 (unknown)
    75  ipv6.addr-gen-mode:                     stable-privacy
    76  ipv6.dhcp-duid:                         --
    77  ipv6.dhcp-send-hostname:                yes
    78  ipv6.dhcp-hostname:                     --
    79  ipv6.token:                             --
    80  proxy.method:                           none
    81  proxy.browser-only:                     no
    82  proxy.pac-url:                          --
    83  proxy.pac-script:                       --
    84  GENERAL.NAME:                           ens34
    85  GENERAL.UUID:                           646aff8c-fa50-39c4-a675-2ebea1bf2355
    86  GENERAL.DEVICES:                        ens34
    87  GENERAL.STATE:                          activated
    88  GENERAL.DEFAULT:                        yes
    89  GENERAL.DEFAULT6:                       no
    90  GENERAL.SPEC-OBJECT:                    --
    91  GENERAL.VPN:                            no
    92  GENERAL.DBUS-PATH:                      /org/freedesktop/NetworkManager/ActiveConnection/2
    93  GENERAL.CON-PATH:                       /org/freedesktop/NetworkManager/Settings/3
    94  GENERAL.ZONE:                           --
    95  GENERAL.MASTER-PATH:                    --
    96  IP4.ADDRESS[1]:                         192.168.101.201/24
    97  IP4.GATEWAY:                            192.168.101.2
    98  IP4.ROUTE[1]:                           dst = 192.168.101.0/24, nh = 0.0.0.0, mt = 101
    99  IP4.ROUTE[2]:                           dst = 0.0.0.0/0, nh = 192.168.101.2, mt = 101
   100  IP4.DNS[1]:                             192.168.19.200
   101  IP4.DNS[2]:                             192.168.100.1
   102  IP6.ADDRESS[1]:                         fe80::b155:2235:6aa:4790/64
   103  IP6.GATEWAY:                            --
   104  IP6.ROUTE[1]:                           dst = fe80::/64, nh = ::, mt = 101
   105  IP6.ROUTE[2]:                           dst = ff00::/8, nh = ::, mt = 256, table=255