Radius
Remote Authentication Dial IN User Serviceのこと。
認証のために使われるプロトコル。実は課金のアカウント機能もあるが課金機能で今使う人はまずいないだろう。と思ったがISPだとFlets, MVNOの認証はRadiusだったりするのでそこで使うのかな。
実装としては
Format
https://gyazo.com/cc7288ccaf0a863ce6b2398ccec3c619
Code
1byte。Code番号によりそのパケットの種類を表す。
1. Access-Request
2. Access-Accept
3. Access-Reject
4. Accounting-Request
5. Accounting-Response
Authenticatorは認証符号
Attributes
細かいユーザー名、パスワードやその他の情報はAttributesフィールドに任意個数つけてやりとりする。
Attributesはkey value pairで構成される。属性値は3-255の間の整数。
exmaple attributes
User-Name(1) ユーザー名
User-Password(2) PAP利用時のパスワード
CHAP-Password(3) CHAP利用時のパスワードハッシュ値
User-Password Atrribute
ユーザーパスワードを示す。Access-Request のみで使われる属性。というかaccess-Requestでは必須のattributeとなる。
この値には実は直接パスワードを挿入していない。雑に書くとパスワードを16octetごとのstreamで分割(最後のあまったoctetについてはnullでパディング)、各streamでMD5ハッシュ値をとり、そのハッシュ値と分割されたパス16octetでXORをとった結果を順次User-Passwordに格納する。
Sequence
基本的には次の流れ。かなりシンプル。ただし認証方式(chap等)によってはチャレンジなどが追加発生する。
1. RADIUSクライアントからサーバーにアクセス要求パケット(Code1)を送る。この際のパケットにはUser-Name, User-Password等のattribute及びその値が付与されている。
2. サーバーは認証してクライアントにアクセス許可(code2)、またはアクセス拒否(code3)のパケットを応答する。
VSA(Vendoer Specific Attribute)
各ベンダー独自のRadius Attributeが存在する。これをVSAと呼ぶ。
SSH認証にRADIUSを使う
pamにradiusに対応したモジュールが存在する。参考 ubuntuなら次のコマンドでpamをinstallできる。 code:bash
# apt-get install libpam-radius-auth
設定ファイルに認証サーバーや共通鍵を設定する。
code:pam_radius_auth.conf
# server:port shared_secret timtou(s) xx.xx.xx.xx MY_SECRET 1
最後にsshの設定でradius-auth PAMを利用するように設定する。/etc/pam.d/sshdを編集
code: /etc/pamd.d/sshd
auth sufficient pam_radius_auth.so
認証に使用するパスワードハッシュはこんな感じ
code:hash生成
openssl dgst -sha256 -binary | openssl enc -base64