文書の過去の版を表示しています。
podman ローカル プライベート レジストリの構築
インストール
$ sudo dnf install -y podman httpd-tools
メタデータの期限切れの最終確認: 1:14:37 前の 2024年03月19日 06時13分34秒 に実施しました。 パッケージ podman-5:4.9.3-1.fc39.x86_64 は既にインストールされています。 パッケージ httpd-tools-2.4.58-1.fc39.x86_64 は既にインストールされています。 依存関係が解決しました。 行うべきことはありません。 完了しました!
レジストリ構築
レジストリ用のディレクトリを作成🤔
$ sudo mkdir -p /var/lib/registry/{auth,certs,data} && sudo ls -al /var/lib/registry
合計 0 drwxr-xr-x 1 root root 26 3月 19 07:36 . drwxr-xr-x. 1 root root 1042 3月 19 07:36 .. drwxr-xr-x 1 root root 0 3月 19 07:36 auth drwxr-xr-x 1 root root 0 3月 19 07:36 certs drwxr-xr-x 1 root root 0 3月 19 07:36 data
レジストリ認証用の htpasswd ファイルを作成🤔
$ sudo htpasswd -cB /var/lib/registry/auth/htpasswd tomoyan
New password: password 入力 Re-type new password: 確認 password 入力 Adding password for user tomoyan
$ sudo bat -n /var/lib/registry/auth/htpasswd
1 tomoyan:$2y$05$MO8AFjpgWM5mVvYxbDpeIeWntMr0jxkkQ6krWEZ04n39RA73F2PWC
htpasswd の使い方 🤤
$ htpasswd
Usage: htpasswd [-cimBdpsDv] [-C cost] passwordfile username htpasswd -b[cmBdpsDv] [-C cost] passwordfile username password htpasswd -n[imBdps] [-C cost] username htpasswd -nb[mBdps] [-C cost] username password -c Create a new file. -n Don't update file; display results on stdout. -b Use the password from the command line rather than prompting for it. -i Read password from stdin without verification (for script usage). -m Force MD5 encryption of the password (default). -2 Force SHA-256 crypt() hash of the password (very secure). -5 Force SHA-512 crypt() hash of the password (very secure). -B Force bcrypt encryption of the password (very secure). -C Set the computing time used for the bcrypt algorithm (higher is more secure but slower, default: 5, valid: 4 to 17). -r Set the number of rounds used for the SHA-256, SHA-512 algorithms (higher is more secure but slower, default: 5000). -d Force CRYPT encryption of the password (8 chars max, insecure). -s Force SHA-1 encryption of the password (insecure). -p Do not encrypt the password (plaintext, insecure). -D Delete the specified user. -v Verify password for the specified user. On other systems than Windows and NetWare the '-p' flag will probably not work. The SHA-1 algorithm does not use a salt and is less secure than the MD5 algorithm.
使用法: htpasswd [-cimBdpsDv] [-C cost] passwordfile username htpasswd -b[cmBdpsDv] [-C cost] passwordfile username password htpasswd -n[imBdps] [-C cost] username htpasswd -nb[mBdps] [-C cost] username password -c 新しいファイルを作成します。 -n ファイルを更新しません。結果を標準出力に表示します。 -b パスワードを要求するのではなく、コマンドラインからパスワードを使用します。 -i 検証なしで標準入力からパスワードを読み取ります (スクリプト使用のため)。 -m パスワードの MD5 暗号化を強制します (デフォルト)。 -2 パスワードの SHA-256 crypt() ハッシュを強制します (非常に安全)。 -5 パスワードの SHA-512 crypt() ハッシュを強制します (非常に安全)。 -B パスワードの bcrypt 暗号化を強制します (非常に安全です)。 -C bcrypt アルゴリズムに使用される計算時間を設定します。 (値が高いほど安全ですが速度は遅くなります、デフォルト: 5、有効: 4 ~ 17)。 -r SHA-256、SHA-512 アルゴリズムに使用されるラウンド数を設定します。 (値が高いほど安全性は高くなりますが、速度は遅くなります。デフォルト: 5000)。 -d パスワードの CRYPT 暗号化を強制します (最大 8 文字、安全ではありません)。 -s パスワードの SHA-1 暗号化を強制します (安全ではありません)。 -p パスワードを暗号化しません (平文、安全ではありません)。 -D 指定したユーザーを削除します。 -v 指定されたユーザーのパスワードを確認します。 Windows および NetWare 以外のシステムでは、'-p' はおそらくフラグは機能しないでしょう。 SHA-1 アルゴリズムはソルトを使用しないため、MD5 アルゴリズムよりも安全性が低くなります。
自己署名証明書の作成🤔
$ sudo openssl req -newkey rsa:4096 -nodes -sha256 -keyout /var/lib/registry/certs/domain.key \ -x509 -days 365 -out /var/lib/registry/certs/domain.crt \ -subj "/CN=wicked-beat,wicked-beat.fireball.local" \ -addext "subjectAltName=DNS:wicked-beat,DNS:wicked-beat.fireball.local"
..+..........+..+......+.+.........+...........+......+....+.....+.........+.+++++++++++++++++++++++++++++++++++++++++++++*......+.+..+.......+......+..+...+....+..................+..+...+.+.........+..+.........+....+...+..+.+....................+.+......+..+.......+...........+...+.+.....+......+++++++++++++++++++++++++++++++++++++++++++++*...+............+...+++++ .....+.+.....+.........+......+...+..........+..+.+++++++++++++++++++++++++++++++++++++++++++++*..........+.......+..+..........+...+..+......+...+.......+.....+.......+.....+.+......+++++++++++++++++++++++++++++++++++++++++++++*....+.....+......+............+..........+...+...+..+.........+....+...........+......+...+..........+...............+............+............+.....+...+.......+...+............+.................+....+.....+.........+......+......+.+...+......+.....+.+.....+....+...+...+..+...+.......+..+.....................+.......+........+...+.+......+.................+.............+.........+...+..+........................+.......+...+..+++++ -----
作成された自己署名証明書の内容確認🤔
$ sudo openssl x509 -in /var/lib/registry/certs/domain.crt -text -noout
Certificate: Data: Version: 3 (0x2) Serial Number: 26:86:56:c8:1a:fa:0c:32:13:7b:87:54:10:de:66:12:98:f5:b6:28 Signature Algorithm: sha256WithRSAEncryption Issuer: CN = "wicked-beat,wicked-beat.fireball.local" Validity Not Before: Mar 20 20:16:18 2024 GMT Not After : Mar 20 20:16:18 2025 GMT Subject: CN = "wicked-beat,wicked-beat.fireball.local" Subject Public Key Info: Public Key Algorithm: rsaEncryption Public-Key: (4096 bit) Modulus: 00:99:f1:8c:dd:3b:6e:53:8a:1d:79:47:03:d8:48: 21:de:03:79:af:7c:0e:ff:e8:61:b2:48:45:a9:a5: ee:bf:62:f5:c9:b3:9f:58:fd:8c:65:fa:bc:94:8c: 20:1e:c7:e7:3d:8b:e3:0a:79:9d:a5:9b:75:3e:bb: 3b:07:54:9b:0c:87:a5:c0:0c:43:c6:f9:4d:34:d0: af:bc:61:7a:fc:df:2b:ac:d9:60:3b:72:40:c0:3c: 05:40:12:71:5c:f9:74:05:de:13:a3:0d:32:a2:cc: 95:d9:ea:36:cf:99:78:04:c1:95:bd:e4:68:07:1a: 80:26:9e:75:87:20:5d:a5:97:34:1f:2c:15:0b:cd: 68:99:42:35:07:aa:ec:3c:53:82:6f:f0:96:ec:de: 7a:65:4d:72:a9:cf:ed:28:f3:21:88:d2:2e:ec:02: fd:8d:dc:39:e2:eb:a8:b3:72:6f:fa:69:09:7a:e7: 5e:85:97:41:f2:6b:e2:06:88:1d:6e:f7:e3:25:af: 4f:94:66:ca:b0:b8:4d:75:a0:12:99:53:4a:93:3e: 35:3c:b6:b5:bd:24:51:f8:50:a4:49:b7:63:27:98: 66:49:d7:cd:f5:0c:ac:73:b9:f4:bd:b1:20:dc:0b: 41:ff:60:dd:2b:bd:a4:74:10:3a:3b:07:ef:e2:08: 2a:30:41:aa:7b:07:50:54:bf:27:76:29:07:f5:c5: f2:ed:0e:a1:7c:a6:43:9f:03:aa:3e:01:b4:3f:43: 6d:9e:61:a1:bf:5c:90:b1:2e:21:66:e8:e9:e9:0f: fd:55:45:9e:a3:f8:02:f7:83:17:90:88:90:58:26: 52:7e:2f:26:5e:bb:58:37:03:13:65:9a:15:28:58: c3:51:22:5f:88:ac:21:a7:7c:44:f5:52:bd:9a:28: b9:d1:cb:10:78:5f:04:3b:0d:44:8f:39:a1:ae:0a: 44:a2:93:84:c0:42:88:84:f0:fc:3d:90:6f:98:b9: 80:40:b9:a0:51:b7:9f:d7:e1:6d:e1:0d:f3:88:e5: 46:6c:18:63:f3:8e:fd:84:5a:3d:05:76:16:da:25: e1:39:de:11:ac:d0:fb:c2:9b:7e:6b:c0:42:59:ba: 0b:2a:11:9d:b4:0c:73:cb:c8:cb:e2:11:ff:9d:41: 49:57:56:6c:63:3c:3f:8e:3a:b1:3b:39:33:82:33: 0e:bb:bd:c1:0d:c6:26:fb:10:2f:cc:bd:ef:8b:b8: c1:a8:b5:88:11:d1:bc:75:27:98:4b:e5:e5:13:2c: 55:e2:18:94:81:a8:1c:06:6f:ba:fb:be:4a:a1:a4: 41:f8:cb:9c:f2:98:43:85:ab:86:80:27:cc:10:b8: ac:5b:41 Exponent: 65537 (0x10001) X509v3 extensions: X509v3 Subject Key Identifier: B5:65:A6:BB:E7:BF:E4:DF:9E:E8:FF:FE:11:5D:80:72:FB:F6:CF:8B X509v3 Authority Key Identifier: B5:65:A6:BB:E7:BF:E4:DF:9E:E8:FF:FE:11:5D:80:72:FB:F6:CF:8B X509v3 Basic Constraints: critical CA:TRUE X509v3 Subject Alternative Name: DNS:wicked-beat, DNS:wicked-beat.fireball.local Signature Algorithm: sha256WithRSAEncryption Signature Value: 68:9e:7f:a9:17:6e:86:83:16:fb:2b:45:7b:20:bb:5b:7e:7e: c9:77:45:ce:f6:a2:05:c2:c5:cb:9f:22:2b:aa:90:2e:0d:e7: 5a:6d:e9:09:24:3c:c8:1e:bd:43:14:c5:8c:45:0e:6d:66:93: 85:6c:69:c8:63:e5:9c:20:4e:77:4f:6e:eb:cc:0e:10:ea:40: fb:be:41:32:e9:c9:c6:a9:93:f6:3e:9a:70:e0:57:1e:4c:2b: 88:23:85:d9:bd:f6:95:40:cd:5f:0f:eb:8b:77:c3:09:f2:b1: f2:7d:02:0d:d6:ec:4d:eb:c4:13:b4:ba:9b:01:4a:ec:eb:79: 0d:da:8d:e2:cc:93:d5:d5:f5:a4:45:4b:25:6a:ee:c1:73:bd: d5:f0:e7:59:1c:b5:e8:96:45:47:6e:8d:bd:ef:5b:06:19:7d: 25:60:f4:56:f5:4f:5e:e1:52:15:df:e2:1c:60:f4:20:5e:7e: c8:7c:09:36:46:93:e8:7a:fa:3c:50:05:bc:8d:16:c6:50:f7: 85:e0:8b:db:f7:6c:3f:17:b3:bf:ac:1d:98:b5:15:59:f1:89: 4e:45:8b:ea:a5:fc:80:6f:fc:cd:da:2e:d6:4c:47:5c:5b:da: 51:99:7f:87:80:ec:07:05:63:17:23:f0:f0:c7:d4:87:8a:fb: 0d:ab:c6:c3:54:37:ad:66:a3:17:f0:27:80:99:39:70:9f:d8: 8e:92:18:04:03:96:3c:6d:12:8c:1c:4f:a6:d2:3d:96:95:36: 0f:4e:ba:12:da:fb:e9:bb:f7:27:d6:37:ce:52:98:40:2c:02: 5a:77:41:85:e3:45:54:2d:23:38:cf:5e:34:13:21:e7:f6:83: 36:1e:9b:9b:5f:bf:54:41:20:68:29:e4:1d:85:7e:8b:a3:39: 07:d7:b6:79:a0:bd:09:b0:31:27:ba:ee:24:ac:f7:95:c8:5c: ac:e2:20:b6:8b:ea:7f:5a:45:15:76:5d:76:18:8e:b0:36:23: 1f:31:2f:27:17:59:6d:37:0a:ea:bf:08:bc:db:1d:2a:e7:89: 49:b1:7f:e8:1c:62:23:ed:cf:44:1a:97:df:d0:8b:8d:45:d1: 0a:f2:cc:2e:ea:97:59:4e:13:45:d2:0d:ee:57:97:b4:aa:05: 72:1b:29:14:47:bc:47:e4:2b:7c:73:bf:30:81:43:a2:88:e0: 47:81:a7:06:42:7f:7e:35:83:33:c3:08:d2:58:a3:ad:9e:48: fe:45:49:e0:d3:e7:91:7c:c0:be:36:5f:c4:82:b2:90:5b:5b: ae:c7:0b:d1:19:72:15:2d:67:db:fe:b7:d0:46:c0:87:dc:c1: aa:e9:3b:ce:e8:5c:11:e0
ホストでの証明書の信頼🤔
$ sudo cp /var/lib/registry/certs/domain.crt /etc/pki/ca-trust/source/anchors/ $ sudo update-ca-trust $ trust list | grep -i "wicked-beat"
label: wicked-beat,wicked-beat.fireball.local
ホストのファイアウォールを設定🤔
$ sudo firewall-cmd --add-port=5000/tcp --zone=internal --permanent
success
$ sudo firewall-cmd --add-port=5000/tcp --zone=public --permanent
success
$ sudo firewall-cmd --reload
success
レジストリの起動
$ sudo podman run -d --restart always --name registry \ -p 5000:5000 \ -v /var/lib/registry/data:/var/lib/registry:z \ -v /var/lib/registry/auth:/auth:z \ -e "REGISTRY_AUTH=htpasswd" \ -e "REGISTRY_AUTH_HTPASSWD_REALM=Registry Realm" \ -e REGISTRY_AUTH_HTPASSWD_PATH=/auth/htpasswd \ -v /var/lib/registry/certs:/certs:z \ -e "REGISTRY_HTTP_TLS_CERTIFICATE=/certs/domain.crt" \ -e "REGISTRY_HTTP_TLS_KEY=/certs/domain.key" \ -e REGISTRY_COMPATIBILITY_SCHEMA1_ENABLED=true \ docker.io/library/registry:2.8.3
Trying to pull docker.io/library/registry:2.8.3... Getting image source signatures Copying blob 5daf2fb85fb9 done | Copying blob 68c26f40ad80 done | Copying blob 8f2a82336004 done | Copying blob ca5f23059090 done | Copying blob 619be1103602 done | Copying config 9363667f8a done | Writing manifest to image destination 304e2169d684ff81b5dd76f0de4a49035c73d1d7c70d59c4306feac5b66779be
registry Tags | Docker Hub で最新バージョンを確認できる🤔
レジストリへのアクセス確認🤔
$ curl -u tomoyan https://wicked-beat:5000/v2/_catalog
Enter host password for user 'tomoyan': {"repositories":[]}
証明書の検証🤔
$ openssl s_client -connect wicked-beat:5000 -servername wicked-beat
CONNECTED(00000003) depth=0 CN = "wicked-beat,wicked-beat.fireball.local" verify return:1 --- Certificate chain 0 s:CN = "wicked-beat,wicked-beat.fireball.local" i:CN = "wicked-beat,wicked-beat.fireball.local" a:PKEY: rsaEncryption, 4096 (bit); sigalg: RSA-SHA256 v:NotBefore: Mar 20 20:20:12 2024 GMT; NotAfter: Mar 20 20:20:12 2025 GMT --- Server certificate -----BEGIN CERTIFICATE----- MIIFeTCCA2GgAwIBAgIUItMtxtFJlg4OwxuJ/3QYs5TB5JEwDQYJKoZIhvcNAQEL BQAwMTEvMC0GA1UEAwwmd2lja2VkLWJlYXQsd2lja2VkLWJlYXQuZmlyZWJhbGwu bG9jYWwwHhcNMjQwMzIwMjAyMDEyWhcNMjUwMzIwMjAyMDEyWjAxMS8wLQYDVQQD DCZ3aWNrZWQtYmVhdCx3aWNrZWQtYmVhdC5maXJlYmFsbC5sb2NhbDCCAiIwDQYJ KoZIhvcNAQEBBQADggIPADCCAgoCggIBAKU5eypWIT954zZW3oNHOjX1xtSv6yak V7XVMHtQb9JlkbXLpR/QBHn/qrAPoq2itsRJFvyjlYt+pIHMq9eWxt426Jnyqsg7 XadYXmD6PfSgypNMmmEstt8bbsO8Qbq1dr7xmMS8pxSKnp2sFqLf+dhU6HdEHmJW f2GhRqB8WU+d+qhxL4AJvd76Z/8G+fKHdlWOklH7YqXIU9oH869OOsVot2UROrkn 2vDth1TU1/Fv0Qs436xZ7OSpbC9Z9udP1r/ANFxXei3c3QzaoJkAIDTP4fVa+AbY sPY6fVvhPFAxMQDf+Es9TVqrUqtYMYTYWjEjVPOvEU4MnQJVuz6TV9ZZeEi6c46C yXgSnZEebq1SJiSG5/10CKg0ngVIGmlrNRzxZKYwAkbuAuAcsJ4YbOQSoOPam4qg vmYmP/jiqgSfLWSTrSNmXp5qkPMvP3NtayMS2fZ0UUEVnVWmiY8jz3wS52zs8kUU dOZ55Q+quKuR8DaS0OxlZeaPUfYFJs60VLkwN2oB0R70en1GE6eXu+3YunVN7AMJ yIAl4xcZ3mLmdHvifvr8XZGiJk0oiic+nDOCHPm7mw0EXh54scRLHjOQyhnMXLOc Bv7oxz82RFGjzfvuC9b3csyXfkP5BE88lNjkk3ScwCMZ3vleC8iFoVRqkEKjApkR POevKCWSLxUFAgMBAAGjgYgwgYUwHQYDVR0OBBYEFD+/vezvjPaSqRot9zLNaqXl NHwmMB8GA1UdIwQYMBaAFD+/vezvjPaSqRot9zLNaqXlNHwmMA8GA1UdEwEB/wQF MAMBAf8wMgYDVR0RBCswKYILd2lja2VkLWJlYXSCGndpY2tlZC1iZWF0LmZpcmVi YWxsLmxvY2FsMA0GCSqGSIb3DQEBCwUAA4ICAQBFURGP68S5V9UwEKLraWr0WR+i 7sGBvuEymDdGbS1ThyQTB7p7VCV5vC6TvtcR+IQYL2a/m1RaxjaqOjsbDJYtUREa QGljZkJpB0kj/VeZUnPyW7T7e3Lkb/Pv/EWYhBNoSH9oKA6iJh7g7ch2ghqg9kvQ TmHhrHLaQhLdES0pNpbPpQCL5Z0u9JThdW1chSGGbUIy+UNXrhndOrOwxp/CJzF9 plkli6ptDBSIsT/LRC8+Z5kU4t/yXXoMEePL97IDBlkkksbnEN4EN9RaE8K0NYHe GxRHXvOKY/BBvA+6vS9PSKf6jvr01IQeLvC0E8FyrZmaCdFSg6Vxnq+qvgXLxsZn T78wnHhUbFoZv8DriFAWWk3eC2Jh5wzWZ3WaaiGjICqPutZ8+IJ7J0vjnKwkEwU8 zH/Xo1YaQscxtIrytLtXPCTgcPAH6i9UZixplJpv2iVnhmL1ffvJ/JhZQr+dOTP4 cxfPCURtPtZtA6Vdd1DyScHJ4C3wZ9Eeo1OM6aEq7G7kaPGCCXRn/MIFAl0Q2dpE BbSmv2VxfnnrBAhQN3bro/j+iDZb+hWSNc1OI/LuEo0UTAXZuXVTsfmiaCoW6QBc I72x52OQk9dfvXp2yiXhTSjZVcqY2axwvdEm8dA7kBE+vImTbxUJYzGWetMo3n4a oZEMw11w4NNmuw1fvw== -----END CERTIFICATE----- subject=CN = "wicked-beat,wicked-beat.fireball.local" issuer=CN = "wicked-beat,wicked-beat.fireball.local" --- No client certificate CA names sent Peer signing digest: SHA256 Peer signature type: RSA-PSS Server Temp Key: X25519, 253 bits --- SSL handshake has read 2201 bytes and written 379 bytes Verification: OK --- New, TLSv1.3, Cipher is TLS_CHACHA20_POLY1305_SHA256 Server public key is 4096 bit This TLS version forbids renegotiation. Compression: NONE Expansion: NONE No ALPN negotiated Early data was not sent Verify return code: 0 (ok) --- --- Post-Handshake New Session Ticket arrived: SSL-Session: Protocol : TLSv1.3 Cipher : TLS_CHACHA20_POLY1305_SHA256 Session-ID: A930863BF5140DE8683A6A979F0BA450D05FE1871A5DF7C41B21412014C626BB Session-ID-ctx: Resumption PSK: 8A1A0CC8DBCD3534B4B3BD4572450A4DE453E6FB693AFCC8A371F8BAA22D33AE PSK identity: None PSK identity hint: None SRP username: None TLS session ticket lifetime hint: 604800 (seconds) TLS session ticket: 0000 - 43 d1 3e 3d 52 05 5d 46-04 5a 5e 6c 78 f3 be 80 C.>=R.]F.Z^lx... 0010 - 13 48 4b 79 4a df 76 2b-e0 29 5f 5b e1 81 e3 f6 .HKyJ.v+.)_[.... 0020 - 16 b3 4a 66 84 78 41 26-22 4b 5e a9 f6 0a 5f f6 ..Jf.xA&"K^..._. 0030 - 84 45 b9 da 86 77 e2 cf-d6 ac bf c1 6b ac 9d 7d .E...w......k..} 0040 - d9 5a eb 61 9c e4 f6 8f-10 8e 0e 99 37 70 a5 75 .Z.a........7p.u 0050 - 38 e0 3b f3 2f fa b9 fb-60 d4 82 6e 8a cb 55 56 8.;./...`..n..UV 0060 - 49 5a 21 6f 1a 25 31 ca-26 c2 ce 22 00 0e a7 e1 IZ!o.%1.&..".... 0070 - 28 ( Start Time: 1710966295 Timeout : 7200 (sec) Verify return code: 0 (ok) Extended master secret: no Max Early Data: 0 --- read R BLOCK
レジストリにログインする🤔
$ podman login wicked-beat:5000
Username: tomoyan Password: Login Succeeded!
ログイン中の認証情報は /run/user/<gid>/containers/auth.json
に base64 エンコードで保存されている🤔
$ bat -n /run/user/1000/containers/auth.json
1 { 2 "auths": { 3 "wicked-beat:5000": { 4 "auth": "aB1cd2efghiJklMnOPQ3STUv" 5 } 6 } 7 }
レジストリからログアウトする🤔
$ podman logout wicked-beat:5000
Removed login credentials for wicked-beat:5000
$ bat -n /run/user/1000/containers/auth.json
1 { 2 "auths": {} 3 }
レジストリへのプッシュ/プル
ログインする🤔
$ podman login wicked-beat:5000
Username: tomoyan Password: Login Succeeded!