オープンソース・ソフトウェアの開発とダウンロード

Subversion リポジトリの参照

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

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

trunk/1.6.x/ccs-patch/README.ccs revision 2003 by kumaneko, Wed Dec 24 07:07:28 2008 UTC trunk/1.7.x/ccs-patch/README.ccs revision 3134 by kumaneko, Tue Nov 3 11:05:19 2009 UTC
# Line 16  and you enjoy the life with Linux. Line 16  and you enjoy the life with Linux.
16    
17  This project was very inspired by the comic "Card Captor SAKURA",  This project was very inspired by the comic "Card Captor SAKURA",
18  one of the CLAMP's masterworks.  one of the CLAMP's masterworks.
 The names SAKURA and TOMOYO and SYAORAN were borrowed from the comic  
 with the heartfelt thanks to CLAMP.  
   
   
19    
20  ChangeLog:  ChangeLog:
21    
# Line 197  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 408  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 432  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 448  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 496  Fix 2006/08/10 Line 492  Fix 2006/08/10
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 762  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 1007  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 1753  Fix 2008/12/01 Line 1749  Fix 2008/12/01
1749        new conditions for checking file's type and permissions.        new conditions for checking file's type and permissions.
1750        For example,        For example,
1751    
1752          allow_read /etc/fstab if path1.type=regular path1.perm=0644          allow_read /etc/fstab if path1.type=file path1.perm=0644
1753    
1754        will allow opening /etc/fstab for reading only if /etc/fstab is a regular        will allow opening /etc/fstab for reading only if /etc/fstab is a regular
1755        file and it's permission is 0644, and        file and it's permission is 0644, and
# Line 1796  Fix 2008/12/24 Line 1792  Fix 2008/12/24
1792    
1793        I meant to print SYAORAN-ERROR: message when error == -EPERM,        I meant to print SYAORAN-ERROR: message when error == -EPERM,
1794        but I was printing it when error == 0 since 1.6.0 .        but I was printing it when error == 0 since 1.6.0 .
1795    
1796    Fix 2009/01/05
1797    
1798        @ Use kmap_atomic()/kunmap_atomic() for reading "struct linux_binprm".
1799    
1800          As remove_arg_zero() uses kmap_atomic(KM_USER0), I modified to use
1801          kmap_atomic(KM_USER0) rather than kmap().
1802    
1803    Fix 2009/01/28
1804    
1805        @ Fix "allow_read" + "allow_write" != "allow_read/write" problem.
1806    
1807          Since 1.6.0 , due to a bug in ccs_update_single_path_acl(),
1808          appending "allow_read/write" entry didn't update internal "allow_read"
1809          and "allow_write" entries. As a result, attempt to open(O_RDWR) succeeds
1810          but open(O_RDONLY) and open(O_WRONLY) fail.
1811    
1812          Workaround is to write an entry twice when newly appending that entry.
1813          If written twice, internal "allow_read" and "allow_write" entries
1814          are updated.
1815    
1816    Fix 2009/02/26
1817    
1818        @ Fix profile read error.
1819    
1820          Incorrect profiles were shown in /proc/ccs/profile
1821          if either CONFIG_SAKURA or CONFIG_TOMOYO is disabled.
1822    
1823    Fix 2009/03/02
1824    
1825        @ Undelete CONFIG_TOMOYO_AUDIT option.
1826    
1827          While HDD-less systems can use profiles with MAX_GRANT_LOG=0 and
1828          MAX_REJECT_LOG=0 , I undeleted CONFIG_TOMOYO_AUDIT option for saving
1829          memory used for /proc/ccs/grant_log and /proc/ccs/reject_log interfaces.
1830    
1831    Fix 2009/03/13
1832    
1833        @ Show only profile entry names ever specified.
1834    
1835          Even if an administrator specifies only COMMENT= and MAC_FOR_FILE=
1836          entries for /proc/ccs/profile , all available profile entries are shown.
1837          This was designed to help administrators to know what entries are
1838          available, but sometimes makes administrators feel noisy because of
1839          entries showing default values.
1840    
1841          Thus, I modified to show only profile entry names ever specified.
1842    
1843    Fix 2009/03/18
1844    
1845        @ Add MAC_FOR_IOCTL functionality.
1846    
1847          To be able to restrict ioctl() requests, I added MAC_FOR_IOCTL
1848          functionality.
1849    
1850          This functionality requires modification of ccs-patch-\*.diff .
1851    
1852        @ Use better name for socket's pathname.
1853    
1854          Until now, socket's pathname was represented as "socket:[\$]" format
1855          where \$ is inode's number. But inode's number is useless for name based
1856          access control. Therefore, I modified to represent socket's pathname as
1857          "socket:[family=\$:type=\$:protocol=\$]" format.
1858    
1859          This will help administrator to control ioctl() against sockets more
1860          precisely.
1861    
1862        @ Fix misplaced ccs_capable() call.  (only 2.6.8-\* and 2.6.9-\*)
1863    
1864          Location to insert ccs_capable(TOMOYO_SYS_IOCTL) in sys_ioctl() was
1865          wrong since version 1.1 .
1866    
1867        @ Insert ccs_check_ioctl_permission() call.
1868    
1869          To make MAC_FOR_IOCTL functionality working, I inserted
1870          ccs_check_ioctl_permission() call into ccs-patch-\*.diff .
1871    
1872    Fix 2009/03/23
1873    
1874        @ Move sysctl()'s check from ccs-patch-\*.diff to fs/tomoyo_file.c .
1875    
1876          Since try_parse_table() in kernel/sysctl.c is almost identical between
1877          all versions, I moved that function to fs/tomoyo_file.c .
1878    
1879        @ Relocate definitions and functions.
1880    
1881          To reduce exposed symbols, I relocated some definitions and functions.
1882    
1883    Fix 2009/03/24
1884    
1885        @ Add CONFIG_TOMOYO_BUILTIN_INITIALIZERS option.
1886    
1887          Some systems don't have /sbin/modprobe and /sbin/hotplug .
1888          Thus, I made these pathnames configurable.
1889    
1890    Version 1.6.7 2009/04/01   Feature enhancement release.
1891    
1892    Fix 2009/04/06
1893    
1894        @ Drop "undelete domain" command.
1895    
1896          I added "undelete domain" command on 2007/01/19, but never used by policy
1897          management tools. The garbage collector I added on 2007/01/29 will
1898          automatically reuse memory and allow administrators switch domain policy
1899          periodically, provided that the administrator kills processes in old
1900          domains before recreating new domains with the same domainnames.
1901    
1902          Thus, I dropped "undelete domain" command.
1903    
1904        @ Escape invalid characters in ccs_check_mount_permission2().
1905    
1906          ccs_check_mount_permission2() was passing unencoded strings to printk()
1907          and ccs_update_mount_acl() and ccs_check_supervisor(). This may cause
1908          /proc/ccs/system_policy and /proc/ccs/query to contain invalid
1909          characters within a string.
1910    
1911    Fix 2009/04/07
1912    
1913        @ Fix IPv4's "address_group" handling error.
1914    
1915          Since 1.6.5 , due to lack of ntohl() (byte order conversion) in
1916          ccs_update_address_group_entry(), "address_group" with IPv4 address was
1917          not working.
1918    
1919          This problem happens on little endian platforms (e.g. x86).
1920    
1921    Fix 2009/05/08
1922    
1923        @ Add condition for symlink's target pathname.
1924    
1925          Until now, "allow_symlink" keyword allows creation of a symlink but does
1926          not check the symlink's target. Usually it is no problem because
1927          permission checks are done using dereferenced pathname. But in some
1928          cases, we should restrict the symlink's target. For example,
1929          "ln -s .htpasswd /var/www/html/readme.html" by CGI program should be
1930          blocked because we will allow Apache to read both
1931          /var/www/html/readme.html and /var/www/html/.htpasswd .
1932    
1933          Thus, I added new condition, "symlink.target".
1934    
1935            allow_symlink /var/www/html/\*.html if symlink.target="\*.html"
1936    
1937            allow_symlink /var/www/html/\*\-.\* if symlink.target="\*\-.\*"
1938    
1939        @ Don't return -EAGAIN at ccs_socket_recvmsg_permission().
1940    
1941          It turned out that it is not permitted for accept() and recvmsg() to
1942          return -EAGAIN if poll() said connections/datagrams are ready. However,
1943          recvmsg() may return -EAGAIN and potentially confuse some applications
1944          because ccs_socket_recvmsg_permission() is returning -EAGAIN.
1945    
1946          Thus, I modified ccs_socket_recvmsg_permission() to return -ENOMEM
1947          rather than -EAGAIN.
1948    
1949    Fix 2009/05/19
1950    
1951        @ Don't call get_fs_type() with a mutex held.
1952    
1953          Until now, when ccs_update_mount_acl() is called with unsupported
1954          filesystem, /sbin/modprobe is executed from get_fs_type() to load
1955          filesystem module. And get_fs_type() does not return until /sbin/modprobe
1956          finishes.
1957    
1958          This means that it will cause deadlock if /sbin/modprobe (which is
1959          executed via get_fs_type() in ccs_update_mount_acl()) calls
1960          ccs_update_mount_acl(); although it won't happen unless an administrator
1961          inserts execute_handler to call mount() requests in learning mode or to
1962          add "allow_mount" entries to /proc/ccs/system_policy .
1963    
1964          I modified to unlock the mutex before calling get_fs_type().
1965    
1966    Fix 2009/05/20
1967    
1968        @ Update recvmsg() hooks.
1969    
1970          Since 1.5.0, I was doing network access control for incoming UDP and RAW
1971          packets inside skb_recv_datagram(). But to synchronize with LSM version,
1972          I moved ccs_recv_datagram_permission() hook from skb_recv_datagram() to
1973          udp_recvmsg()/udpv6_recvmsg()/raw_recvmsg()/rawv6_recvmsg() with name
1974          change to ccs_recvmsg_permission().
1975    
1976    Version 1.6.8 2009/05/28   Feature enhancement release.
1977    
1978    Fix 2009/07/03
1979    
1980        @ Fix buffer overrun when used with CONFIG_SLOB=y .
1981    
1982          Since 1.6.7 , ccs_allocate_execve_entry() was requesting for only 4000
1983          bytes while the comment says it is 4096 bytes. This may lead to buffer
1984          overrun when slob allocator is used, for slob allocator allocates exactly
1985          4000 bytes whereas slab and slub allocators allocate 4096 bytes.
1986    
1987    Fix 2009/09/01
1988    
1989        @ Add garbage collector support.
1990    
1991          Until now, it was impossible to release memory used by deleted policy.
1992          I added SRCU based garbage collector so that memory used by deleted
1993          policy will be automatically released.
1994    
1995        @ Remove word length limitation and line length limitation.
1996    
1997          Until now, the max length of a word is 4000 and the max length of a line
1998          is 8192. To be able to handle longer pathnames, I removed these
1999          limitations. Now, the max length (except the domainname and
2000          argv[]/envp[]) is 128K (which is the max amount of memory kmalloc()
2001          can allocate in most environments).
2002    
2003        @ Support more fine grained profile configuration.
2004    
2005          Profile was reconstructed.
2006    
2007        @ Support more fine grained parameters restrictions.
2008    
2009          "allow_create", "allow_mkdir", "allow_mkfifo", "allow_mksock" check
2010          create mode. "allow_mkblock" and "allow_mkchar" check create mode and
2011          major/minor device numbers. "allow_chmod" check new mode. "allow_chown"
2012          checks new owner. "allow_chgrp" checks new group.
2013    
2014        @ Allow number grouping.
2015    
2016          To help specifying numeric values, a new directive "number_group" is
2017          introduced.
2018    
2019        @ Remove "alias" directive and "allow_argv0" directive.
2020    
2021          Until now, "allow_execute" used dereferenced pathname if it is a symlink
2022          unless explicitly specified by "alias" directive.
2023    
2024          Now, "allow_execute" uses symlink's pathname if it is a symlink.
2025          "exec.realpath" in "if" clause checks the dereferenced pathname.
2026          "exec.argv[0]" in "if" clause checks the invocation name.
2027    
2028        @ Remove /proc/ccs/system_policy and /etc/ccs/system_policy.conf .
2029    
2030          "deny_autobind" was moved to /proc/ccs/exception_policy and
2031          /etc/ccs/exception_policy.conf . Other directives were moved to
2032          /proc/ccs/domain_policy and /etc/ccs/domain_policy.conf .
2033    
2034        @ Remove syaoran filesystem.
2035    
2036          Since "allow_create"/"allow_mkdir"/"allow_mkfifo"/"allow_mksock"/
2037          "allow_mkblock"/"allow_mkchar"/"allow_chmod"/"allow_chown"/"allow_chgrp"
2038          can restrict mode changes and owner/group changes, there is no need to
2039          restrict these changes at filesystem level.
2040    
2041          Thus, I removed syaoran filesystem.
2042    
2043        @ Reduce spinlocks.
2044    
2045          Until now, TOMOYO was using own list for detecting memory leak. But as
2046          kernel 2.6.31 introduced memory leak detection mechanism
2047          ( CONFIG_DEBUG_KMEMLEAK ), TOMOYO no longer needs to use own list.
2048    
2049          I removed the list to reduce use of spinlocks.
2050    
2051        @ Rewrite ccs-patch-2.\*.diff .
2052    
2053          ccs-patch-2.\*.diff was rewritten like LSM hooks.
2054    
2055        @ Don't check "allow_read/write" for open-for-ioctl-only.
2056    
2057          open(pathname, 3) means open for ioctl() only.
2058          Until now, TOMOYO was checking "allow_read/write" for open(pathname, 3).
2059          But since TOMOYO checks "allow_ioctl" for ioctl(), I modified not to
2060          require "allow_read/write" for open(pathname, 3).
2061    
2062        @ Add missing sigqueue() and tgsigqueue() hooks.
2063    
2064          Until now, kill(), tkill(), tgkill() had hooks but sigqueue() and
2065          tgsigqueue() didn't.
2066    
2067        @ Move files from fs/ to security/ccsecurity.
2068    
2069          Config menu section changed from "File systems" to "Security options".
2070    
2071          Kernel config symbols changed from CONFIG_SAKURA CONFIG_TOMOYO
2072          CONFIG_SYAORAN to CONFIG_CCSECURITY .
2073    
2074        @ Add global PID to audit logs.
2075    
2076          ccs-queryd was using domainname for reaching the domain which the process
2077          belongs to, but the domain could be deleted while ccs-queryd is handling
2078          policy violation. If the domain is deleted, ccs-queryd no longer can
2079          reach the domain by domainname. Thus, ccs-queryd now uses PID for
2080          reaching the domain which the process belongs to.
2081    
2082          Kernel 2.6.24 introduced PID namespace. The PID in access logs generated
2083          by a process inside a container is useless for ccs-queryd for reaching
2084          the domain which the process belongs to.
2085    
2086          Thus, I added global PID in audit logs.
2087          
2088        @ Transit to new domain before do_execve() succeeds.
2089    
2090          Permission checks for interpreters and environment variables are
2091          done using new domain. In order to be allow ccs-queryd to reach the new
2092          domain via global PID, I reverted "Don't transit to new domain until
2093          do_execve() succeeds." made on 2008/10/07.
2094    
2095    Version 1.7.0 2009/09/03   Feature enhancement release.
2096    
2097    Fix 2009/09/04
2098    
2099        @ Fix wrong ccs_profile() calls.
2100    
2101          I can't call ccs_profile() for profile existence test because
2102          ccs_profile() never returns NULL.
2103    
2104    Fix 2009/09/06
2105    
2106        @ Fix wrong error code in ccs_try_alt_exec().
2107    
2108          ccs_try_alt_exec() was returning ENOMEM when kmalloc() failed.
2109          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.

Legend:
Removed from v.2003  
changed lines
  Added in v.3134

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