follow me

Smackで参考になりそうなページ

Smackは使うには情報がすくないので、よさげなページをメモ。
どちらもDebian系ですがディストリビューションに関係なく読めます。
記載されている内容で設定はできますが、複雑なポリシーを作るのは難しいかもしれません。

debianforum.de
Ubuntu Documentation
follow me

SmackでとりあえずMAC

Linuxの標準Kernelで搭載されてるSmackです。
MAC系の比較にはよく出てくる訳ですが、SELinuxや、RSBACに比べ情報は少なめです。

とりあえず、catコマンドに制限をつけて動作確認してみました。
catコマンドとpasswdファイルに別のラベルを付けてみる。
# attr -S -s SMACK64 -V CAT_EXEC /bin/cat
# attr -S -s SMACK64 -V PASS_T /etc/passwd
/etc/smack/accessesに対しこんな設定を入れてみる。
CAT_EXEC _ r
_ CAT_EXEC rwax
smackloadコマンドでポリシーをロード。
# smackload < /etc/smack/accesses
すると、CAT_EXECは、PASS_Tに対して権限がないのでミスる。
# ls -al /etc/passwd
-rw-r--r-- 1 root root 962 12月14日 21:38 /etc/passwd
# su - tivoli
id: cannot find name for user ID 500
[I have no name!@ ~]$ cat /etc/passwd
cat: /etc/passwd: 許可がありません
各ファイルに対し、attrでラベルを埋め込む為、複雑な事は難しいでしょう。
SELinuxや、TOMOYOの方がポリシーの記述はやりやすいので、あえてSmackを選ぶメリットは少ないかも。
シンプルなMAC実装ではあるが、この扱いにくさはなんとかならないものか。。。

で設定方法もろもろのメモを以下にちまちまと記載。

follow me

Smack(coreutils)パッチ

Smack対応のlsコマンドが欲しくて、coreutilsビルドしてみたんですが。。。
coreutils-6.9が以下エラーで、Vine5でビルドできないので、以下の問題修正されている6.10用にパッチを直してみました。
In file included from utimecmp.c:33:
utimens.h:2: error: conflicting types for 'futimens'
///usr/include/sys/stat.h:370: error: previous declaration of 'futimens' was here
make[2]: *** [utimecmp.o] Error 1
make[2]: Leaving directory `/root/okw/coreutils-6.9/lib'
make[1]: *** [all] Error 2
make[1]: Leaving directory `/root/okw/coreutils-6.9/lib'
make: *** [all-recursive] エラー 1
coreutils-6.10と6.11用のパッチを用意してみました、ソース読んだ限り問題はないと思います。
coreutils-6.10.patch
coreutils-6.11.patch
follow me

smack(busybox)準備

busyboxパッチを利用し、lsコマンドをSmackに対応させてみます。
提供されているパッチは、busybox-1.7.2用ですが、busybox-1.7.5でも問題ありません。

busyboxにパッチ適用し、make menuconfigで以下Smackオプションを有効化。
CONFIG_SMACK:

Enable support for Smack in applets ls, ps, and id.  Also provide
the option of compiling in Smack applets.

Symbol: SMACK [=y]
Prompt: Support Smack
  Defined at Config.in:225
  Location:
    -> Busybox Settings
      -> General Configuration

Vine5では以下エラーとなる。
今回は、ipsvd utilities機能は不要なので、ipsvd utilitiesのオプションをmenuconfigで外す事で回避。
In file included from /usr/include/linux/netfilter_ipv4.h:8,
                 from ipsvd/tcpudp.c:33:
/usr/include/linux/netfilter.h:45: error: field ‘in’ has incomplete type
/usr/include/linux/netfilter.h:46: error: field ‘in6’ has incomplete type
ipsvd/tcpudp.c: In function ‘tcpudpsvd_main’:
ipsvd/tcpudp.c:314: 警告: ignoring return value of ‘write’, declared with attribute warn_unused_result
make[1]: *** [ipsvd/tcpudp.o] エラー 1
make: *** [ipsvd] エラー 2
作成されたbusyboxのlsで-Zオプションを付ければ、SMACK64のラベルが表示されます。
まじめにやりだすと面倒なので、x86用に提供されているstaticバイナリが存在しますので、そちらを使ったほうがラクかも。
提供されてるバイナリでは、-Mオプションです。

-Mオプションを使うには、coreutils-6.9.patch側の様です。
ネットで調べるより、パッチの中身を見る方がはやかった。。。
follow me

smack-util準備

Smackのカーネル入れたなら、ポリシー設定の為のツールの準備です。
http://www.schaufler-ca.com/data/080616/smack-util-0.1.tarをダウンロードし、ビルド。
# tar xf smack-util-0.1.tar
# cd smack-util-0.1
# make
# cp smackcipso smackload smackpolyport /usr/sbin
initスクリプトのサンプルが用意されているので、initに登録。
# cp etc-init.d-smack /etc/init.d/smack
# chmod 755 /etc/init.d/smack
# ln -s ../init.d/smack /etc/rc3.d/S01smack
# ln -s ../init.d/smack /etc/rc5.d/S01smack
お決まりのポリシーを設定。
# attr -S -s SMACK64 -V "*" /dev/null
# attr -S -s SMACK64 -V "*" /dev/zero
リブートした後に、もう一個設定。
# attr -S -s SMACK64 -V "*" /tmp
smack-utilに本当はパッチが数個含まれていて、opensshやらbusyboxやらもビルドしなおすべきなのだろうが、今回は放置。
busybox-1.7.2.patch
coreutils-6.9.patch
openssh-4.5p1.patch

コレで準備は完了。
あとは、ラベル付けとポリシー設定でアクセス制御可能になります。
自分が試した感じだとこんな感じだけど、あってるのかなぁ。。。
ソースまで読んでないし微妙なんですよね。。。
follow me

SmackをVineで使おう

SmackをVine5.0で使おうって訳で、Kernelパッケージ作りました。
オプションは、元のオプションにSmack追加しただけです。
導入はカーネルRPMを導入し、fstabに以下を追記してください。
smackfs /smack smackfs smackfsdef=* 0 0
後のポリシー設定は、楽しんでください。
情報少ないと思うので、徐々に書いて行きたいと思います。

通常はコレ一個で問題ないです。
kernel-2.6.27-43vl5.smack.i586.rpm

一応置いときます。
kernel-2.6.27-43vl5.smack.src.rpm
kernel-devel-2.6.27-43vl5.smack.i586.rpm
kernel-headers-2.6.27-43vl5.smack.i586.rpm


以下がカーネル変更オプション(個人的めも)
Location:
     -> Networking
       -> Networking support (NET [=y])
         -> Networking options
           -> TCP/IP networking (INET [=y])
[ * ] NetLabel subsystem support 有効化
Location:
     -> Security options
[ * ] Simplified Mandatory Access Control Kernel Support 有効化

Vine5.0はXenやSELinuxなどが無効化され、無駄な関連パッケージも入らないため、カーネルを自分で再ビルドして試すには良さげなディストリビューションになってます。
僕のいまのお気に入りディストリです。
follow me

Smack

SELinuxでもなく、TOMOYO Linuxでもない、Smackという選択値。
2.6.25からメインライン化されているSmackですが。
SELinuxや、LIDS、AppArmorに比べるとあまり聞かない存在です。(比較資料には良く登場しますが。。。)

で、Smackって?
Smackは、SELinuxと同じくラベル方式を採用したMACの実装です。
機能をMACに絞っている為、シンプルで組み込みに適しているとの発言も見られます。

で、Smack使うには?
SELinuxが標準で組み込まれてしまう良い時代ですので、Smackを使うには。。。
Kernelをビルドする時に、SELinuxのチェックを外して、NetLabel subsystem supportを追加。
NetLabel subsystem supportが必要なんですね。
config SECURITY_SMACK
        bool "Simplified Mandatory Access Control Kernel Support"
        depends on NETLABEL && SECURITY_NETWORK
        default n
        help
          This selects the Simplified Mandatory Access Control Kernel.
          Smack is useful for sensitivity, integrity, and a variety
          of other mandatory security schemes.
          If you are unsure how to answer this question, answer N.