2
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

NetBSDAdvent Calendar 2024

Day 8

NetBSD-10における所有者とグループを考慮したハードリンク作成制限機能

Posted at

NetBSD Advent Calendar 2024 8日目の記事です。今日はNetBSD-10で追加されたハードリンクの作成制限機能を紹介しようと思います。

ハードリンクの作成制限機能

NetBSD-10のリリースノートを読んでいると、secmodel_extensions(9)に関連する以下のMIB(Management Information Base)エントリがsysctl(8)に追加されていました。

Hardlink restrictions
Prevent hardlinks to files that the user does not own or has group access to.
 
To enable user ownership checks, set the sysctl(7) variable
security.models.extensions.hardlink_check_uid to a non-zero value.
 
To enable group membership checks, set the sysctl(7) variable
security.models.extensions.hardlink_check_gid to a non-zero value.

ざっくりと翻訳すると以下のようになります。

ハードリンクの制限
ユーザーが所有していない、またはグループアクセス権を持っていないファイルへのハードリンクを防止する。
 
ユーザの所有権チェックを有効にするには、sysctl(7)変数のsecurity.models.extensions.hardlink_check_uidをゼロ以外の値に設定します。
 
グループメンバーシップチェックを有効にするには、sysctl(7)変数のsecurity.models.extensions.hardlink_check_gidをゼロ以外の値に設定する。

どうやらハードリンクの作成において、所有者とグループをチェックする設定となっているようです。

さっそく試してみる

ユーザとグループの作成

事前準備として、確認用のユーザとグループを作成します。とりあえず tarohanako というユーザを作成し、それぞれを tarogrouphanakogroup に所属させます。

# # ユーザtaro,hanakoを作成する。
# useradd -g users -G wheel -m -s /usr/pkg/bin/bash taro
# useradd -g users -G wheel -m -s /usr/pkg/bin/bash hanako
#
# # それぞれのユーザにパスワードを設定する。
# passwd taro
# passwd hanako
#
# # グループ作成する。
# groupadd -g 2000 tarogroup
# groupadd -g 2001 hanakogroup
#
# # グループを確認する。
# egrep '^taro|^hanako' /etc/group
tarogroup:*:2000:taro
hanakogroup:*:2001:hanako

それぞれ以下のようなユーザとグループ設定になりました。

# # 所属しているグループを確認する。
# id taro
uid=1000(taro) gid=100(users) groups=100(users),0(wheel),2000(tarogroup)
# id hanako
uid=1001(hanako) gid=100(users) groups=100(users),0(wheel),2001(hanakogroup)

ハードリンク用のファイルを作成し、これで準備は完了です。

# sudo -i -u taro touch /tmp/taro_file
# sudo -i -u hanako touch /tmp/hanako_file
#
# ls -la /tmp
total 6
drwxrwxrwt   2 root    wheel   96 Dec 10 21:01 ./
drwxr-xr-x  21 root    wheel  512 Dec 10 20:50 ../
-rw-r--r--   1 hanako  wheel    0 Dec 10 21:01 hanako_file
-rw-r--r--   1 taro    wheel    0 Dec 10 21:01 taro_file

ファイル所有者以外のハードリンク作成を制限する

まずはファイル所有者以外のハードリンク作成制限を試してみます。 security.models.extensions.hardlink_check_* のデフォルト値は以下のようになっており、ハードリンク作成は制限なく行えます。

# sysctl -a | grep hardlink_check
security.models.extensions.hardlink_check_uid = 0
security.models.extensions.hardlink_check_gid = 0

ユーザ tarohanako の所有するファイルに対してハードリンクを作成できます。

# sudo -i -u taro ln /tmp/hanako_file /tmp/taro_file_hardlink02
# ls -l /tmp/taro_file_hardlink
-rw-r--r--  4 hanako  hanakogroup  0 Dec 10 21:01 /tmp/taro_file_hardlink

ここで security.models.extensions.hardlink_check_uid の値を変更し、ハードリンク作成時の所有者チェックを有効にしてみます。

# sysctl security.models.extensions.hardlink_check_uid
security.models.extensions.hardlink_check_uid = 0
#
# sysctl -w security.models.extensions.hardlink_check_uid=1
security.models.extensions.hardlink_check_uid: 0 -> 1
#
# sysctl -a | grep hardlink_check
security.models.extensions.hardlink_check_uid = 1
security.models.extensions.hardlink_check_gid = 0

ファイル所有者が hanako のファイルに対し、ユーザ taro がハードリンクを作成しようとするとエラーとして扱われるようになりました。

# sudo -i -u taro ln /tmp/hanako_file /tmp/taro_file_hardlink02
ln: /tmp/taro_file_hardlink02: Permission denied

グループメンバ以外のハードリンク作成を制限する

次にグループメンバ以外のハードリンク作成制限を試してみます。ファイルの所有者とグループをそれぞれ taro:tarogrouphanako:hanakogroup に設定します。

# cat /etc/group | egrep '^taro|^hanako'
tarogroup:*:2000:taro
hanakogroup:*:2001:hanako

# chown taro:tarogroup /tmp/taro_file
# chown hanako:hanakogroup /tmp/hanako_file

# # ファイルのグループを確認する。
# ls -l /tmp/ | grep file$
-rw-r--r--  3 hanako  hanakogroup  0 Dec 10 21:01 hanako_file
-rw-r--r--  1 taro    tarogroup    0 Dec 10 21:01 taro_file

security.models.extensions.hardlink_check_* がデフォルト値の状態でハードリンクを作成してみます。 hanakogroup のファイルに対し、ユーザ taro によるハードリンク作成が行えます。

# sysctl -a | grep hardlink_check
security.models.extensions.hardlink_check_uid = 0
security.models.extensions.hardlink_check_gid = 0
#
# sudo -i -u taro ln /tmp/hanako_file /tmp/taro_file_hardlink03
# ls -l /tmp/taro_file_hardlink03
-rw-r--r--  4 hanako  hanakogroup  0 Dec 10 21:01 /tmp/taro_file_hardlink03

ここで security.models.extensions.hardlink_check_gid の値を変更し、ハードリンク作成時のグループチェックを有効化します。

# sysctl -w security.models.extensions.hardlink_check_gid=1
security.models.extensions.hardlink_check_gid: 0 -> 1
#
# sysctl -a | grep hardlink_check
security.models.extensions.hardlink_check_uid = 0
security.models.extensions.hardlink_check_gid = 1

設定変更により、所属していないグループのファイルに対するハードリンク作成がエラーとして扱われるようになりました。

# sudo -i -u taro ln /tmp/hanako_file /tmp/taro_file_hardlink04
ln: /tmp/taro_file_hardlink04: Permission denied

まとめ

NetBSD-10でついかされたハードリンク作成制限機能を試してみました。ファイルへのリンクはセキュリティ上の問題を発生させることがあり、OSレベルで制限をかけることでよりセキュアな構成にできそうです。

参考URL

2
0
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
2
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?