Open-Source-Software-Entwicklung und Downloads

Browse Subversion Repository

Diff of /trunk/1.8.x/ccs-patch/README.ccs

Parent Directory Parent Directory | Revision Log Revision Log | View Patch Patch

revision 2998 by kumaneko, Sun Sep 6 02:18:23 2009 UTC revision 3502 by kumaneko, Mon Mar 8 08:44:55 2010 UTC
# Line 193  Fix 2006/02/27 Line 193  Fix 2006/02/27
193      @ Fix handling of trailing '\*' in PathMatchesToPattern().      @ Fix handling of trailing '\*' in PathMatchesToPattern().
194    
195        PathMatchesToPattern("/tmp/", "/tmp/\*") returned true        PathMatchesToPattern("/tmp/", "/tmp/\*") returned true
196        because "\*" matches to "more than or equals to 0 character        because "\*" matches "zero or more repetitions of characters
197        until '/' or end". But since this is a comparison between        until '/' or end". But since this is a comparison between
198        directory and non-directory, this should not match.        directory and non-directory, this should not match.
199    
# Line 404  Fix 2006/07/14 Line 404  Fix 2006/07/14
404    
405      @ Change behavior of pathname pattern matching.      @ Change behavior of pathname pattern matching.
406    
407        Until now, it was impossible to use patterns like "\*.txt"        Until now, it was impossible to use patterns like "\*.txt" because
408        because "\*" matched to more than 0 characters until next '/'.        "\*" matched zero or more repetitions of characters until next '/'.
409        Now, "\*" matches to more than 0 characters.        Now, "\*" matches zero or more repetitions of characters.
410    
411        Until now, it was impossible to use patterns like "\$00"        Until now, it was impossible to use patterns like "\$00"
412        because "\$" matched to more than 1 digits until next        because "\$" matched one or more repetitions of digits until next
413        non digit character.        non digit character.
414        Now, "\$" matches to more than 1 digits.        Now, "\$" matches one or more repetitions of digits.
415    
416        Also, new patterns "\x" "\X" "\a" "\A" "\@" are added.        Also, new patterns "\x" "\X" "\a" "\A" "\@" are added.
417    
# Line 428  Fix 2006/07/25 Line 428  Fix 2006/07/25
428    
429      @ Change matching rule for CheckFileACL().      @ Change matching rule for CheckFileACL().
430    
431        Until now, only first entry that matched to the requested pathname        Until now, only first entry that matched the requested pathname
432        was used for permission checking. For example, two entries        was used for permission checking. For example, two entries
433    
434        "2 /tmp/file-\$.txt"        "2 /tmp/file-\$.txt"
# Line 444  Fix 2006/07/25 Line 444  Fix 2006/07/25
444        This may potentially cause trouble because the result of        This may potentially cause trouble because the result of
445        permission checks depends on the order of entries.        permission checks depends on the order of entries.
446    
447        Now, all entries that matched to the requested pathname        Now, all entries that matched the requested pathname
448        are used for permission checking so that the result of        are used for permission checking so that the result of
449        permission checks doesn't depend on the order of entries.        permission checks doesn't depend on the order of entries.
450    
# Line 485  Fix 2006/08/10 Line 485  Fix 2006/08/10
485        domain ACL. For example,        domain ACL. For example,
486    
487          "1 /bin/sh if task.euid!=0"          "1 /bin/sh if task.euid!=0"
488    
489        allows the domain to execute /bin/sh only when the process's euid        allows the domain to execute /bin/sh only when the process's euid
490        is not 0, and        is not 0, and
491    
492          "6 /home/\*/\* if task.uid=path1.uid"          "6 /home/\*/\* if task.uid=path1.uid"
493    
494        allows the domain to read-write user's home directory        allows the domain to read-write user's home directory
495        only when the file's owner matches to the process's uid.        only when the file's owner matches the process's uid.
496    
497  Fix 2006/08/22  Fix 2006/08/22
498    
# Line 758  Fix 2006/12/22 Line 758  Fix 2006/12/22
758        if /some/program is called from "some_domain" domain.        if /some/program is called from "some_domain" domain.
759    
760        "some_domain" can be just the last component of domainname.        "some_domain" can be just the last component of domainname.
761        For example, giving "/bin/mail" as "some_domain" matches to        For example, giving "/bin/mail" as "some_domain" matches
762        all domains whose domainname ends with "/bin/mail".        all domains whose domainname ends with "/bin/mail".
763    
764  Fix 2007/01/19  Fix 2007/01/19
# Line 871  Fix 2007/04/18 Line 871  Fix 2007/04/18
871        based on realpath while argv[0] check is done based on the symlink's        based on realpath while argv[0] check is done based on the symlink's
872        pathname and argv[0], this specification will allow attackers behave        pathname and argv[0], this specification will allow attackers behave
873        as /bin/cat in the domain of /bin/ls if "/bin/ls and /bin/cat are        as /bin/cat in the domain of /bin/ls if "/bin/ls and /bin/cat are
874        links to /sbin/busybox" and "the attacker is permitted to create        links to /sbin/busybox" and "the attacker is permitted to create
875        a symlink named ~/cat that points to /bin/ls" and "the attacker is        a symlink named ~/cat that points to /bin/ls" and "the attacker is
876        permitted to run /bin/ls".        permitted to run /bin/ls".
877        So, I changed to compare the basename of realpath and argv[0].        So, I changed to compare the basename of realpath and argv[0].
# Line 959  Fix 2007/08/06 Line 959  Fix 2007/08/06
959    
960        Until now, users had to add init=/.init parameter to load policy        Until now, users had to add init=/.init parameter to load policy
961        before /sbin/init starts.        before /sbin/init starts.
962        I inserted call_usermodehelper() to call external policy loader when        I inserted call_usermodehelper() to call external policy loader when
963        execve("/sbin/init") is requested and external policy loader exists.        execve("/sbin/init") is requested and external policy loader exists.
964    
965        This change will remove init=/.init parameter from most environment,        This change will remove init=/.init parameter from most environment,
# Line 1003  Fix 2007/08/17 Line 1003  Fix 2007/08/17
1003    
1004      @ Remove initializer directive.      @ Remove initializer directive.
1005    
1006        Use "initialize_domain" instrad of "initializer".        Use "initialize_domain" instead of "initializer".
1007    
1008  Fix 2007/08/21  Fix 2007/08/21
1009    
# Line 1984  Fix 2009/07/03 Line 1984  Fix 2009/07/03
1984        overrun when slob allocator is used, for slob allocator allocates exactly        overrun when slob allocator is used, for slob allocator allocates exactly
1985        4000 bytes whereas slab and slub allocators allocate 4096 bytes.        4000 bytes whereas slab and slub allocators allocate 4096 bytes.
1986    
1987  Fix 2008/09/01  Fix 2009/09/01
1988    
1989      @ Add garbage collector support.      @ Add garbage collector support.
1990    
# Line 2046  Fix 2008/09/01 Line 2046  Fix 2008/09/01
2046        kernel 2.6.31 introduced memory leak detection mechanism        kernel 2.6.31 introduced memory leak detection mechanism
2047        ( CONFIG_DEBUG_KMEMLEAK ), TOMOYO no longer needs to use own list.        ( CONFIG_DEBUG_KMEMLEAK ), TOMOYO no longer needs to use own list.
2048    
2049        I removed the list to ruduce use of spinlocks.        I removed the list to reduce use of spinlocks.
2050    
2051      @ Rewrite ccs-patch-2.\*.diff .      @ Rewrite ccs-patch-2.\*.diff .
2052    
2053        ccs-patch-2.\*.diff was rewriteen like LSM hooks.        ccs-patch-2.\*.diff was rewritten like LSM hooks.
2054    
2055      @ Don't check "allow_read/write" for open-for-ioctl-only.      @ Don't check "allow_read/write" for open-for-ioctl-only.
2056    
# Line 2066  Fix 2008/09/01 Line 2066  Fix 2008/09/01
2066    
2067      @ Move files from fs/ to security/ccsecurity.      @ Move files from fs/ to security/ccsecurity.
2068    
2069        Config menu section changed from "File systems" to "Security options".        Config menu section changed from "File systems" to "Security options".
2070    
2071        Kernel config symbols changed from CONFIG_SAKURA CONFIG_TOMOYO        Kernel config symbols changed from CONFIG_SAKURA CONFIG_TOMOYO
2072        CONFIG_SYAORAN to CONFIG_CCSECURITY .        CONFIG_SYAORAN to CONFIG_CCSECURITY .
# Line 2084  Fix 2008/09/01 Line 2084  Fix 2008/09/01
2084        the domain which the process belongs to.        the domain which the process belongs to.
2085    
2086        Thus, I added global PID in audit logs.        Thus, I added global PID in audit logs.
2087          
2088      @ Transit to new domain before do_execve() suceeds.      @ Transit to new domain before do_execve() succeeds.
2089    
2090        Permission checks for interpreters and environment variables are        Permission checks for interpreters and environment variables are
2091        done using new domain. In order to be allow ccs-queryd to reach the new        done using new domain. In order to allow ccs-queryd to reach the new
2092        domain via global PID, I reverted "Don't transit to new domain until        domain via global PID, I reverted "Don't transit to new domain until
2093        do_execve() succeeds." made on 2008/10/07.        do_execve() succeeds." made on 2008/10/07.
2094    
2095  Version 1.7.0 2008/09/03   Feature enhancement release.  Version 1.7.0 2009/09/03   Feature enhancement release.
2096    
2097  Fix 2008/09/04  Fix 2009/09/04
2098    
2099      @ Fix wrong ccs_profile() calls.      @ Fix wrong ccs_profile() calls.
2100    
2101        I can't call ccs_profile() for profile existence test because        I can't call ccs_profile() for profile existence test because
2102        ccs_profile() never returns NULL.        ccs_profile() never returns NULL.
2103    
2104  Fix 2008/09/06  Fix 2009/09/06
2105    
2106      @ Fix wrong error code in ccs_try_alt_exec().      @ Fix wrong error code in ccs_try_alt_exec().
2107    
2108        ccs_try_alt_exec() was returning ENOMEM when kmalloc() failed.        ccs_try_alt_exec() was returning ENOMEM when kmalloc() failed.
2109        It needs to return -ENOMEM to fail.        It needs to return -ENOMEM to fail.
2110    
2111    Fix 2009/09/10
2112    
2113        @ Do not check umount() permission for mount(MS_MOVE) requests.
2114    
2115          Until 1.6.x , umount() restriction was black listing. In 1.7.0 , it is
2116          white listing. This change caused "mount --move old new" requests to
2117          require "allow_unmount old" permission in addition to
2118          "allow_mount old new --move 0" permission.
2119          But we don't want to allow umount(old) requests when we want to allow
2120          only mount(old, new, MS_MOVE) requests. Thus, I modified not to check
2121          "allow_unmount old" permission for mount(old, new, MS_MOVE) requests.
2122    
2123    Fix 2009/09/11
2124    
2125        @ Support recursive match operators.
2126    
2127          Until now, ccs_path_matches_pattern() did not support recursive
2128          comparison. Thus, users had to repeat "/\*" when they want to specify
2129          recursively.
2130    
2131          I introduced "\{" and "\}" as repetition operator.
2132          To ensure consistency with TOMOYO's '/'-tokenized pattern matching rules
2133          and "\-" operator, only "/\{dir\}/" sequences (where dir does not contain
2134          '/') is permitted.
2135    
2136    Fix 2009/09/24
2137    
2138        @ Don't check chmod/chown capability for requests from kernel.
2139    
2140          Until now, ccs_setattr_permission() was inserted in notify_change().
2141          But notify_change() is also called by requests from kernel (e.g. UnionFS)
2142          and it made difficult to use TOMOYO on UnionFS.
2143    
2144          Thus, I moved ccs_capable() checks from ccs_setattr_permission() to
2145          ccs_chmod_permission() and ccs_chown_permission(), and removed
2146          ccs_setattr_permission().
2147    
2148    Fix 2009/09/25
2149    
2150        @ Embed more information into audit logs.
2151    
2152          Until now, /proc/ccs/grant_log /proc/ccs/reject_log /proc/ccs/query were
2153          not printing file's information (e.g. file's uid/gid/mode).
2154    
2155          Recently, users who started using "if" clause expect that the learning
2156          mode automatically adds various conditions like "if task.uid=path1.uid".
2157    
2158          But the profile will become too complicated if I support all possible
2159          conditions. Thus, I added all information which is enough to generate
2160          "if" clause with all possible conditions from audit logs.
2161    
2162          Now, the learning mode got different usage. Users can specify
2163          "CONFIG::learning={ max_entry=0 }" in the profile. All requests which
2164          are not permitted by policy will be sent to /proc/ccs/reject_log with
2165          "mode=learning" header lines. Users can selectively append conditions
2166          and append to the policy using "/usr/sbin/ccs-loadpolicy -d".
2167          The learning mode with "CONFIG::learning={ max_entry=0 }" is almost
2168          the same with the permissive mode, only difference is "mode=learning"
2169          and "mode=permissive".
2170    
2171    Fix 2009/10/05
2172    
2173        @ Fix size truncation bug at ccs_memcmp().
2174    
2175          ccs_memcmp() was using "u8" for size parameter by error. Therefore, when
2176          size >= 256 was passed to ccs_memcmp(), it was doing partial comparison
2177          (incorrect result) or read overrun (CPU stall).
2178    
2179          ccs_memcmp() should use "size_t" for size parameter because size of
2180          "struct ccs_condition" may exceed 256 bytes if complicated condition was
2181          given.
2182    
2183    Fix 2009/10/08
2184    
2185        @ Add CONFIG_CCSECURITY_DEFAULT_LOADER option.
2186    
2187          I made the default policy loader's pathname ( /sbin/ccs-init )
2188          configurable.
2189    
2190        @ Add CONFIG_CCSECURITY_ALTERNATIVE_TRIGGER option.
2191    
2192          Some environments do not have /sbin/init . In such environments, we need
2193          to use different program's pathname (e.g. /init or /linuxrc ) as
2194          activation trigger.
2195    
2196          Thus, I made the alternative trigger ( /sbin/ccs-start ) configurable.
2197    
2198    Fix 2009/11/02
2199    
2200        @ Fix buffer contention.
2201    
2202          A permission like
2203    
2204            allow_env PATH if exec.envp["PATH"]="/"
2205    
2206          was not working since I was using the same buffer for both environment
2207          variable's name and value.
2208    
2209    Fix 2009/11/03
2210    
2211        @ Fix memory leak in ccs_write_address_group_policy().
2212    
2213          I forgot to call kfree() if same entry was added.
2214    
2215        @ Reduce mutexes.
2216    
2217          I was using mutex_lock()/mutex_unlock() so that I can use
2218          atomic_dec_and_test() for removing an element from a list.
2219          I moved that operation to garbage collector in order to reduce frequency
2220          of mutex_lock()/mutex_unlock() calls.
2221    
2222        @ Escape from nested loops correctly.
2223    
2224          In ccs_read_address_group_policy(), I was escaping from nested loops
2225          correctly. But in ccs_read_path_group_policy() and
2226          ccs_read_number_group_policy(), I wasn't.
2227    
2228          As a result, reading path_group and number_group caused kernel oops
2229          when they were not read atomically.
2230    
2231    Fix 2009/11/06
2232    
2233        @ Fix incorrect allow_mount audit log.
2234    
2235          Audit log for allow_mount was using decimal format.
2236          It needs to use hexadecimal format.
2237    
2238    Fix 2009/11/09
2239    
2240        @ Add profile version check.
2241    
2242          To avoid upgrading from TOMOYO 1.6.x to TOMOYO 1.7.x without upgrading
2243          /proc/ccs/profile (which results in not protecting the system at all),
2244          I added a check for PROFILE_VERSION= .
2245    
2246    Version 1.7.1   2009/11/11   Fourth anniversary release.
2247    
2248    Fix 2009/11/13
2249    
2250        @ Don't use core_initcall() for initializing lock for GC.
2251    
2252         Some kernels call TOMOYO's hooks before processing core_initcall().
2253         Thus, I can't use core_initcall() for initializing lock for GC.
2254    
2255    Fix 2009/11/18
2256    
2257        @ Don't check "allow_write" permission for open(O_RDONLY | O_TRUNC).
2258    
2259          Since TOMOYO checks "allow_truncate" permission rather than "allow_write"
2260          permission for O_TRUNC, I need to distinguish open(O_RDONLY | O_TRUNC)
2261          and open(O_RDWR | O_TRUNC). But I made a mistake between TOMOYO 1.7.0 and
2262          1.7.1 which made it impossible for TOMOYO for kernels 2.6.14 and earlier
2263          to distinguish them.
2264    
2265    Fix 2009/11/27
2266    
2267        @ Use newly created domain's name for domain creation audit log.
2268    
2269          Since 1.7.0 , /proc/ccs/reject_log was by error using existing domain's
2270          name when auditing newly created domain's "use_profile" line.
2271    
2272    Fix 2009/12/12
2273    
2274        @ Use rcu_read_lock() for find_task_by_pid().
2275    
2276          Since kernel 2.6.18 , caller of find_task_by_pid() needs to call
2277          rcu_read_lock() rather than read_lock(&tasklist_lock) because find_pid()
2278          uses RCU primitives but spinlock does not prevent RCU callback if
2279          preemptive RCU ( CONFIG_PREEMPT_RCU or CONFIG_TREE_PREEMPT_RCU ) is
2280          enabled.
2281    
2282    Fix 2009/12/15
2283    
2284        @ Allow deleting "quota_exceeded" and "transition_failed" entries.
2285    
2286          To notify users of "this domain has too many entries to hold" and "some
2287          process in this domain was not able to perform domain transition",
2288          "quota_exceeded" and "transition_failed" messages are used respectively.
2289          These messages were not deletable. But it is more convenient for users
2290          to be notified again if such events occurred again after tuning policy.
2291          Thus, I made these messages deletable.
2292    
2293    Fix 2009/12/17
2294    
2295        @ Don't check read permission in ccs_try_alt_exec().
2296    
2297          While I was trying to remove ccs_execve_list list for GC optimization
2298          between TOMOYO 1.7.0 and 1.7.1 , I made a mistake which made TOMOYO to
2299          check allow_read permission of the programs specified by execute_handler
2300          and denied_execute_handler keywords.
2301    
2302        @ Don't check DAC permission if disabled mode.
2303    
2304          I was checking DAC permissions regarding directory entry modification
2305          operations (e.g. mkdir()) even if mode=disabled . It is a waste of CPU
2306          resource to check DAC permissions when MAC permissions are not checked.
2307          Thus, I modified to skip DAC permission checks if mode=disabled .
2308    
2309    Fix 2009/12/19
2310    
2311        @ Fix memory leak in ccs_environ().
2312    
2313          When I fixed a bug that a permission like
2314    
2315            allow_env PATH if exec.envp["PATH"]="/"
2316    
2317          was not working (2009/11/02), I allocated two buffers but only one buffer
2318          was released.
2319    
2320          This bug will trigger OOM killer if environment variable checking is
2321          enabled.
2322    
2323    Fix 2010/01/17
2324    
2325        @ Use current domain's name for execute_handler audit log.
2326    
2327          Since 1.6.7 , /proc/ccs/grant_log was by error using next domain's name
2328          when auditing current domain's "execute_handler" line.
2329    
2330    Fix 2010/03/02
2331    
2332        @ Allow domain transition without execve().
2333    
2334          To be able to split permissions for Apache's CGI programs which are
2335          executed without execve(), I added special domain transition which is
2336          performed by atomically writing '\0'-terminated binary string to
2337          /proc/ccs/.transition interface. For example, a process which belongs to
2338          "<kernel> /usr/sbin/httpd" domain will transit to
2339          "<kernel> /usr/sbin/httpd //app=cgi1\040id=10000" domain by atomically
2340          writing "app=cgi1 id=10000" + '\0' to /proc/ccs/.transition using
2341          Apache's ap_hook_handler() functionality.
2342    
2343          Note that '\0'-terminated binary string is converted to TOMOYO's string
2344          inside kernel and prefix "//" is automatically added to the string so
2345          that domainname does not confclict with domainnames created by execve().
2346          Without this prefix, if "<kernel> /usr/sbin/sshd /bin/bash" domain is
2347          allowed to open /proc/ccs/.transition for writing and
2348          "<kernel> /usr/sbin/sshd /bin/bash /usr/bin/passwd" domain is allowed to
2349          access /etc/shadow , /bin/bash will be able to access /etc/shadow by
2350          atomically writing "/usr/bin/passwd" + '\0' to /proc/ccs/.transition .
2351          Allowing /bin/bash to access /etc/shadow is not what people want.
2352    
2353          Permission for this operation is checked by "allow_transit" keyword.
2354          Unlike "allow_execute" keyword, the string parameter for "allow_transit"
2355          keyword does not refer a real file on filesystem's namespace. Therefore,
2356          you can store any combination of parameters like LDAP's DN entry in the
2357          string parameter for "allow_transit" keyword.
2358    
2359    Fix 2010/03/08
2360    
2361        @ Allow building as loadable kernel module.
2362    
2363          To be able to minimize filesize increment on vmlinux, I made it
2364          possible to compile TOMOYO Linux as loadable kernel module.
2365          Although patching the kernel source and recompiling the kernel are
2366          inevitable, this change will make it easier to enable TOMOYO Linux
2367          when there is a filesize limitation on vmlinux (e.g. embedded systems).

Legend:
Removed from v.2998  
changed lines
  Added in v.3502

Back to OSDN">Back to OSDN
ViewVC Help
Powered by ViewVC 1.1.26