日本語 man コマンド類 (ja-man-1.1j_5) と日本語 man ドキュメント (ja-man-doc-5.4 (5.4-RELEASE 用) など) をインストールすると、以下のような man コマンド閲覧、キーワード検索が コンソールからできるようになります。
4.11-RELEASE-K, 5.4-RELEASE-K, 5.5-RELEASE-K, 6.0-RELEASE-K から 6.4-RELEASE-K, 7.0-RELEASE-K から 7.4-RELEASE-K, 8.0-RELEASE-K から 8.4-RELEASE-K, 9.0-RELEASE-K から 9.3-RELEASE-K, 10.0-RELEASE-K から 10.3-RELEASE-K, 11.0-RELEASE-K から 11.4-RELEASE-K, 12.0-RELEASE-K, 12.1-RELEASE-K は、 プライベート版 (小金丸が編集してまとめたもの) ですが、 より多くの翻訳したファイルが含まれています。 (5.4-RELEASE-K から 6.4-RELEASE-K, 7.0-RELEASE-K から 7.4-RELEASE-K, 8.0-RELEASE-K から 8.4-RELEASE-K, 9.0-RELEASE-K から 9.3-RELEASE-K, 10.0-RELEASE-K から 10.3-RELEASE-K, 11.0-RELEASE-K から 11.4-RELEASE-K, 12.0-RELEASE-K から 12.4-RELEASE-K, 13.0-RELEASE-K から 13.3-RELEASE-K, 14.0-RELEASE-K から 14.1-RELEASE-K は、全翻訳済み)
13.3-STABLE-K, 15.0-CURRENT-K は現在、作成中で日々更新されています。
Table of Contents
UNIX(4) FreeBSD カーネルインタフェースマニュアル UNIX(4) 名称 unix -- UNIX ドメインプロトコルファミリ 書式 #include <sys/types.h> #include <sys/un.h> 解説 UNIX ドメインプロトコルファミリは、通常の socket(2) メカニズムを介して ローカル (マシンの) プロセス間通信を提供するプロトコルの集まりです。UNIX ドメインファミリは、SOCK_STREAM, SOCK_SEQPACKET と SOCK_DGRAM ソケットタ イプをサポートし、アドレシングにファイルシステムのパス名を使用します。 アドレッシング UNIX ドメインのアドレスは、多くても 104 の文字の可変長のファイルシステム パス名です。インクルードファイル <sys/un.h> は、次のアドレスを定義してい ます: struct sockaddr_un { u_char sun_len; u_char sun_family; char sun_path[104]; }; bind(2) で UNIX ドメインソケットに名前をバインドすることによって、ファイ ルシステムにソケットファイルを作成されます。このファイルは、ソケットがク ローズされても削除されません -- ファイルを削除するためには、unlink(2) を 使用しなければなりません。 bind(2) と connect(2) によって要求される UNIX ドメインアドレスの長さは、 <sys/un.h> で定義されたマクロ SUN_LEN() を使用して計算することができま す。sun_path フィールドは、SUN_LEN() で使用されるためにヌル文字で終了して いなければなりませんが、終端のヌルは、アドレスの一部ではありません。 UNIX ドメインプロトコルファミリは、着信メッセージでブロードキャストアドレ シングも ``ワイルドカード'' に適合するどんな形式もサポートしていません。 すべてのアドレスは、他の UNIX ドメインソケットの絶対的パス名か相対的パス 名です。また、パス名を参照するとき、通常のファイルシステムアクセス制御メ カニズムが適用されます。例えば、connect(2) または sendto(2) の宛先は、書 き込み可能でなければなりません。 制御メッセージ UNIX ドメインソケットは、UNIX ファイル記述子の通信をサポートし、 sendmsg(2) と recvmsg(2) への msg 引数の msg_control フィールドの使用を通 して資格証明を処理します。渡される項目は、インクルードファイル <sys/socket.h> で定義されている struct cmsghdr を使用して記述されていま す。 ファイル記述子を送信するために、メッセージのタイプは、SCM_RIGHTS であり、 メッセージのデータ部分は、渡されるファイル記述子を表される整数の配列で す。渡される記述子の数は、メッセージの長さのフィールドによって定義されま す。長さのフィールドは、ヘッダのサイズとファイル記述子配列のサイズの合計 です。 受信された記述子は、MSG_CMSG_CLOEXEC が recvmsg(2) 呼び出しで渡されるかど うかに依存する dup(fd) または fcntl(fd, F_DUPFD_CLOEXEC, 0) を通して作成 されたかのように、送信側の記述子の複写です。配信を待っているか、または故 意に受信されない記述子は、宛先ソケットがクローズされるとき、システムに よって自動的にクローズされます。 次のような <sys/socket.h> で定義されるタイプ struct cmsgcred のデータ部分 があるタイプ SCM_CREDS の制御メッセージを明示的に使用して送信プロセスの資 格証明を送信することができます: struct cmsgcred { pid_t cmcred_pid; /* 送信プロセスの PID */ uid_t cmcred_uid; /* 送信プロセスの実 UID */ uid_t cmcred_euid; /* 送信プロセスの実効 UID */ gid_t cmcred_gid; /* 送信プロセスの実 GID */ short cmcred_ngroups; /* グループの数 */ gid_t cmcred_groups[CMGROUP_MAX]; /* グループ */ }; 送信側は、システムによって満たされたゼロクリアされたバッファを渡すべきで す。 グループリストは、多くても CMGROUP_MAX GID に切り詰められます。 プロセス ID cmcred_pid は、セキュリティの決定を行うために (KERN_PROC_PID sysctl を経るかのように) 検索されるべきではありません。送信プロセスが、終 了しましたが、そのプロセス ID は、新しいプロセスのために、すでに再利用さ れています。 ソケットオプション UNIX ドメインソケットは、setsockopt(2) で設定され、getsockopt(2) でテスト することができる多くのソケットオプションをサポートします: LOCAL_CREDS このオプションは、SOCK_DGRAM, SOCK_SEQPACKET または SOCK_STREAM ソケットで有効にされるかもしれません。このオ プションは、recvmsg(2) 制御メッセージとして write(2), send(2), sendto(2) または sendmsg(2) を呼び出しているプロ セスの資格証明を受信する受信側のメカニズムを提供していま す。cmsghdr 構造体を含むバッファを指す msghdr 構造体の msg_control フィールドは、次の <sys/socket.h> で定義され た可変長の sockcred 構造体が後に続きます: struct sockcred { uid_t sc_uid; /* 実ユーザ ID */ uid_t sc_euid; /* 実効ユーザ ID */ gid_t sc_gid; /* 実グループ ID */ gid_t sc_egid; /* 実効グループ ID */ int sc_ngroups; /* 追加グループの数 */ gid_t sc_groups[1]; /* 可変長 */ }; 現在の実装は、グループリストを多くても CMGROUP_MAX グルー プに切り詰めます。 SOCKCREDSIZE() マクロは、指定された数のグループのための sockcred 構造体のサイズを計算します。cmsghdr フィールドに は、次の値があります: cmsg_len = CMSG_LEN(SOCKCREDSIZE(ngroups)) cmsg_level = SOL_SOCKET cmsg_type = SCM_CREDS SOCK_STREAM と SOCK_SEQPACKET のソケット資格証明は、最初 にソケットから読み込まれたもののみ渡され、次に、システム は、ソケットのオプションをクリアします。 このオプションと上記の明示的 struct cmsgcred の両方は、同 じ値 SCM_CREDS を使用しますが、互換性がない制御メッセージ です。このオプションが有効にされ、送信側が struct cmsgcred で SCM_CREDS 制御メッセージをアタッチしたなら、 それは、破棄され、struct sockcred が、含まれます。 多くの setuid プログラムは、エラーメッセージのような呼び 出し側によって少なくとも部分的に制御されたデータを write(2) (書き込みます)。したがって、特定の sc_euid 値に 付随しているメッセージは、そのユーザからであるように信頼 されるべきではありません。 LOCAL_CONNWAIT SOCK_STREAM ソケットを使用して、このオプションによって connect(2) は、accept(2) が listen (接続を受け付け) して いるソケットで呼び出されるまで、ブロックします。 LOCAL_PEERCRED SOCK_STREAM で getsockopt(2) によって要求されたソケット は、リモート側の資格証明を返します。これらは、次のように <sys/ucred.h> で定義された xucred 構造体に書き込まれた形 式で到達します: struct xucred { u_int cr_version; /* 構造体レイアウト バージョン */ uid_t cr_uid; /* 実効ユーザ ID */ short cr_ngroups; /* グループの数 */ gid_t cr_groups[XU_NGROUPS]; /* グループ */ }; cr_version フィールドは、XUCRED_VERSION 定義と照合される べきです。 サーバ (listen(2) の呼び出し側) に提出された資格証明は、 connect(2) を呼び出したとき、クライアントの資格証明です。 クライアント connect(2) の呼び出し側) に提出された資格証 明は、listen(2) を呼び出したとき、サーバの資格証明です。 このメカニズムは、信頼できます。異なる有効な資格証明の下 で適切なシステムコール (例えば、connect(2) または listen(2)) を呼び出すことによる場合を除いて、そのピア (相 手側) に提出された資格証明に影響を及ぼす、いずれかの当事 者 (party) のための方法はありません。 SOCK_DGRAM で信頼されるピア (相手側) の資格証明を得るため には、ソケットは、LOCAL_CREDS ソケットオプションを参照し ます。 関連項目 connect(2), dup(2), fcntl(2), getsockopt(2), listen(2), recvmsg(2), sendto(2), setsockopt(2), socket(2), intro(4) "An Introductory 4.3 BSD Interprocess Communication Tutorial", PS1, 7. "An Advanced 4.3 BSD Interprocess Communication Tutorial", PS1, 8. FreeBSD 11.4 February 3, 2017 FreeBSD 11.4