こちらがわかりやすし
ダギャー'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
・わかりやすい説明
・公式マニュアル
■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
・わかりやすい説明
・公式マニュアル
・オイラの環境
[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
