Hello.

I'm planning to release TOMOYO 1.7.2 on April 1st.
It contains three enhancements.

(1) Allow domain transition without execve().

    To be able to split permissions for Apache's CGI programs which are
    executed without execve(), I added special domain transition which is
    performed by atomically writing '\0'-terminated binary string to
    /proc/ccs/.transition interface.

    For example, a process which belongs to "<kernel> /usr/sbin/httpd" domain
    will transit to "<kernel> /usr/sbin/httpd //app=cgi1\040id=10000" domain
    by atomically writing "app=cgi1 id=10000" + '\0' to /proc/ccs/.transition
    using Apache's ap_hook_handler() functionality.

    Note that '\0'-terminated binary string is converted to TOMOYO's string
    inside kernel and prefix "//" is automatically added to the string so that
    domainname does not conflict with domainnames created by execve().
    Without this prefix, if "<kernel> /usr/sbin/sshd /bin/bash" domain is
    allowed to open /proc/ccs/.transition for writing and
    "<kernel> /usr/sbin/sshd /bin/bash /usr/bin/passwd" domain is allowed to
    access /etc/shadow , /bin/bash will be able to access /etc/shadow by
    atomically writing "/usr/bin/passwd" + '\0' to /proc/ccs/.transition .
    Allowing /bin/bash to access /etc/shadow is not what people want.

    Permission for this operation is checked by "allow_transit" keyword.
    Unlike "allow_execute" keyword, the string parameter for "allow_transit"
    keyword does not refer a real file on filesystem's namespace. Therefore,
    you can store any combination of parameters like LDAP's DN entry in the
    string parameter for "allow_transit" keyword.

(2) Allow building TOMOYO as a loadable kernel module.

    On embedded systems, there is a partition (e.g. /dev/mtdblock1) dedicated
    for vmlinuz file. Users have to adjust their kernel configs in order to fit
    vmlinuz to the partition. I tried Silicon Linux's CAT760 (SH4 architecture)
    and found that the size of vmlinuz exceeds the size of the partition by
    applying TOMOYO's patch (ccs-patch-1.7.1-20100214.tar.gz).

    Of course, it is possible to resize the partition. But since CAT760's
    kernel config supports loadable kernel modules, I thought it is better to
    build TOMOYO as a loadable kernel module if it is possible to do so.

    TOMOYO can track TOMOYO's domain tree information as long as TOMOYO is
    activated when /sbin/init starts. Thus, TOMOYO can work fine if TOMOYO's
    kernel module is loaded by initramfs or by /sbin/ccs-init .

    To split TOMOYO as a loadable kernel module, I introduced an indirection
    layer similar to LSM's "struct security_operations". Also, I added kernel
    command line parameter that allows disabling TOMOYO 1.7.2 upon boot in case
    of emergency.

    Modifications against vmlinuz are

     @ Hooks which TOMOYO 1.7.2 needs. (ccs-patch-2.\*.diff)
     @ Header files. (ccsecurity.h and ccsecurity_vfs.h)
     @ Policy loader launcher. (load_policy.c)
     @ A few EXPORT_SYMBOL_GPL() which TOMOYO 1.7.2 needs.

    All other components are detached from vmlinuz .
    Regarding filesize increment of vmlinuz for CAT760 was reduced by 44KB.
    (Filesize of gzipped TOMOYO's kernel module is about 57KB.)

    Although patching the kernel source and recompiling the kernel are
    inevitable, this change will make it easier to enable TOMOYO Linux
    when there is a filesize limitation on vmlinuz.

    I'm planning to make it possible for TOMOYO 2.x to compile as loadable
    kernel module like TOMOYO 1.7.2 does.
    Debian is considering enabling TOMOYO 2.2 for Squeeze, but the filesize
    increment of vmlinuz remains as the last problem.
    http://osdir.com/ml/debian-bugs-dist/2010-02/msg08758.html
    The filesize increment problem will become clearer when AppArmor is
    merged into mainline. I don't want distributors to worry about size of
    vmlinuz by compiling SELinux/Smack/TOMOYO/AppArmor into vmlinuz .
    If TOMOYO 2.x becomes a loadable kernel module, filesize increment by
    TOMOYO will become negligible.
    Of course, you can make TOMOYO 2.x as built-in even if TOMOYO 2.x became a
    loadable kernel module. But please let me know if you don't want TOMOYO 2.x
    to become a loadable kernel module.

(3) Improve garbage collector.

    Until now, garbage collector did not start garbage collection until
    /proc/ccs/ users call close(). But since it is not good behavior to leave
    the kernel with SRCU read lock held, I changed /proc/ccs/ users not to
    leave the kernel with SRCU read lock held. As a result, garbage collector
    can start garbage collection before /proc/ccs/ users call close().

_______________________________________________
tomoyo-users-en mailing list
[email protected]
http://lists.sourceforge.jp/mailman/listinfo/tomoyo-users-en

Reply via email to