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

Subversion リポジトリの参照

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

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

revision 1012 by kumaneko, Mon Mar 3 05:07:11 2008 UTC revision 1578 by kumaneko, Thu Sep 11 03:40:09 2008 UTC
# Line 1  Line 1 
1  Notes for TOMOYO Linux project  Notes for TOMOYO Linux project
2    
3  This is a handy Mandatory Access Control patch for Linux kernels.  This is a handy Mandatory Access Control patch for Linux kernels.
4  This patch is released under the GPL.  This patch is released under the GPLv2.
5    
6  Project URL: http://tomoyo.sourceforge.jp/  Project URL: http://tomoyo.sourceforge.jp/
7    
# Line 1146  Fix 2008/01/15 Line 1146  Fix 2008/01/15
1146    
1147  Fix 2008/02/05  Fix 2008/02/05
1148    
1149      @ Use find_task_by_vpid() instead of find_task_pid().      @ Use find_task_by_vpid() instead of find_task_by_pid().
1150    
1151        Kernel 2.6.24 introduced PID namespace.        Kernel 2.6.24 introduced PID namespace.
1152        To search PID given from userland, the kernel needs to use        To search PID given from userland, the kernel needs to use
1153        find_task_by_vpid() instead of find_task_pid().        find_task_by_vpid() instead of find_task_by_pid().
1154    
1155  Fix 2008/02/14  Fix 2008/02/14
1156    
# Line 1247  Fix 2008/02/29 Line 1247  Fix 2008/02/29
1247        By default, this handler does nothing (i.e. merely reject execve()        By default, this handler does nothing (i.e. merely reject execve()
1248        request). You can specify any program to start what you want to do.        request). You can specify any program to start what you want to do.
1249    
1250        You can redirect attackers to somewhere else (e.g. honeypot).        You can redirect attackers to somewhere else (e.g. honey pot).
1251        This makes it possible to act your Linux box as an on-demand honeypot        This makes it possible to act your Linux box as an on-demand honey pot
1252        while keeping regular services for your usage.        while keeping regular services for your usage.
1253    
1254        You can collect information of the attacker (e.g. IP address) and        You can collect information of the attacker (e.g. IP address) and
# Line 1277  Fix 2008/03/03 Line 1277  Fix 2008/03/03
1277        to the caller to tell the execute request was rejected,        to the caller to tell the execute request was rejected,
1278        this is more flexible approach than in-kernel execve() parameter        this is more flexible approach than in-kernel execve() parameter
1279        checking because we can do argv[] and envp[] checking easily.        checking because we can do argv[] and envp[] checking easily.
1280    
1281    Fix 2008/03/04
1282    
1283        @ Use string for access control mode.
1284    
1285          An integer expression for access control mode sometimes confuses
1286          administrators because profile number is also an integer expression.
1287          To avoid confusion between profile number and access control mode,
1288          I introduced a string expression for access control mode.
1289    
1290            Modes which take an integer between 0 and 3.
1291    
1292              0 -> disabled
1293              1 -> learning
1294              2 -> permissive
1295              3 -> enforcing
1296    
1297            Modes which take 0 or 1.
1298    
1299              0 -> disabled
1300              1 -> enabled
1301    
1302    Fix 2008/03/10
1303    
1304        @ Rename "force_alt_exec" keyword to "execute_handler".
1305    
1306          To be able to use different programs for validating execve() parameters,
1307          I moved the location to specify the program's pathname from profile
1308          to domain policy.
1309    
1310          The "execute_handler" keyword takes one pathname which is
1311          invoked whenever execve() request is issued. Thus, any "allow_execute"
1312          keywords in a domain with "execute_handler" are ignored.
1313          This keyword is designed for validating expected/desirable execve()
1314          requests in userspace, although there is no way to tell the caller
1315          that the execve() request was rejected.
1316    
1317        @ Rename "alt_exec" keyword to "denied_execute_handler".
1318    
1319          The "denied_execute_handler" keyword takes one pathname which is
1320          invoked only when execve() request was rejected. In other words,
1321          this program is invoked only when the following conditions are met.
1322    
1323            (1) None of "allow_execute" keywords in the domain matched.
1324            (2) The execve() request was rejected in enforcing mode.
1325            (3) "execute_handler" keyword is not used by the domain.
1326    
1327          This keyword is designed for handling unexpected/undesirable execve()
1328          requests, to redirect the process issuing such requests to somewhere.
1329    
1330    Fix 2008/03/18
1331    
1332        @ Fix wrong/redundant locks in pre-vfs functions.
1333    
1334          lock_kernel()/unlock_kernel() in pre_vfs_rename() were redundant for
1335          2.6 kernels.
1336    
1337          Locking order in pre_vfs_link() and pre_vfs_unlink() for 2.4 kernels
1338          after 2.4.33 were different from before 2.4.32 .
1339    
1340    Fix 2008/03/28
1341    
1342        @ Disable execute handler loop.
1343    
1344          To be able to use "execute_handler" in a "keep_domain" domain,
1345          ignore "execute_handler" and "denied_execute_handler" keywords
1346          if the current process is executing programs specified by
1347          "execute_handler" or "denied_execute_handler" keyword.
1348    
1349          This exception is needed to avoid infinite execute handler loop.
1350          If a domain has both "keep_domain" and "execute_handler",
1351          any execute request by that domain is handled by an execute handler,
1352          and the execute handler attempts to process original execute request.
1353          But the original execute request is handled by the same execute handler
1354          unless the execute handler ignores "execute_handler".
1355    
1356        @ Update coding style.
1357    
1358          I rewrote the code to pass scripts/checkpatch.pl as much as possible.
1359          Function names were changed to use only lower letters.
1360    
1361    Version 1.6.0 2008/04/01   Feature enhancement release.
1362    
1363    Fix 2008/04/14
1364    
1365        @ Fix "Compilation failures" and "Initialization ordering bugs"
1366          with kernels before 2.4.30/2.6.11 .
1367    
1368          2.6 kernels before 2.6.9 didn't have include/linux/hardirq.h ,
1369          resulting compilation error at #include <linux/hardirq.h> .
1370          I added #elif condition.
1371    
1372          CentOS 4.6's 2.6.9 kernel calls do_execve() before initialization of
1373          ccs_alloc(), resulting NULL pointer dereference.
1374          I changed __initcall to core_initcall.
1375    
1376          CentOS 4.6's 2.6.9 kernel backported kzalloc() from 2.6.14 ,
1377          resulting compilation error at kzalloc().
1378          I modified prototype of kzalloc().
1379    
1380    Fix 2008/04/20
1381    
1382        @ Fix "Compilation failures" with kernels before 2.4.30/2.6.11 .
1383    
1384          Turbolinux 10 Server's 2.6.8 kernel backported kzalloc() as an inlined
1385          function, resulting compilation error at kzalloc().
1386          I converted kzalloc() from an inlined function into a macro.
1387    
1388    Fix 2008/04/21
1389    
1390        @ Add workaround for gcc 3.2.2's inline bug.
1391    
1392          RedHat Linux 9's gcc 3.2.2 generated a bad code
1393             if ((var_of_u8 & 0x000000BF) & 0x80000000) { }
1394          where the expected code is
1395             if ((var_of_u8 & 0xBF) & 0x80) { }
1396          when embedding ccs_acl_type2() into print_entry(),
1397          resulting runtime BUG().
1398          I added the expected code explicitly as a workaround.
1399    
1400    Fix 2008/05/06
1401    
1402        @ Add memory quota.
1403    
1404          1.5.x returns -ENOMEM when FindNextDomain() failed to create a new
1405          domain, but I forgot to return -ENOMEM when find_next_domain() failed to
1406          create a new domain.
1407    
1408          A domain is automatically created by find_next_domain() only if
1409          the domain for the requested program doesn't exist.
1410          This behavior is for the administrator's convenience.
1411          The administrator needn't to know how many domains are needed for running
1412          the whole programs in the system beforehand when developing the policy.
1413          But the administrator does not want the kernel to reject execution of the
1414          requested program when developing the policy.
1415    
1416          So, I think it is better to grant execution of programs even if
1417          find_next_domain() failed to create a new domain than reject execution.
1418          Thus, I decided not to return -ENOMEM when find_next_domain() failed to
1419          create a new domain. This exception breaks the domain transition rules,
1420          so I print "transition_failed" warning in /proc/ccs/domain_policy
1421          when this exception happened.
1422    
1423          Also, to prevent the system from being halted by unexpectedly allocating
1424          all kernel memory for the policy, I added memory quota.
1425          This quota is configurable via /proc/ccs/meminfo like
1426    
1427            echo Shared:  1048576 > /proc/ccs/meminfo
1428            echo Private: 1048576 > /proc/ccs/meminfo
1429    
1430    Version 1.6.1 2008/05/10   Bug fix release.
1431    
1432    Fix 2008/06/04
1433    
1434        @ Check open mode of /proc/ccs/ interface.
1435    
1436          It turned out that I can avoid allocating memory for reading if
1437          FMODE_READ is not set and memory for writing if FMODE_WRITE is not set.
1438    
1439        @ Wait for completion of /sbin/ccs-init .
1440    
1441          Since 2.4 kernel's call_usermodehelper() can't wait for termination of
1442          the executed program, I was using the close() request of
1443          /proc/ccs/meminfo to indicate that loading policy has finished.
1444          But since /proc/ccs/meminfo could be accessed for setting memory quota
1445          by /etc/ccs/ccs-post-init , I stopped using the close() request.
1446          The policy loader no longer need to access /proc/ccs/meminfo to notify
1447          the kernel that loading policy has finished.
1448    
1449    Fix 2008/06/05
1450    
1451        @ Fix realpath for pipes and sockets.
1452    
1453          Kernel 2.6.22 and later use different method for calculating d_path().
1454          Since fs/realpath.c didn't notice the change, the realpath of pipes
1455          appeared as "pipe:" rather than "pipe:[\$]" when they are opened via
1456          /proc/PID/fd/ directory.
1457    
1458        @ Add process's information into /proc/ccs/query .
1459    
1460          While /proc/ccs/grant_log and /proc/ccs/reject_log contain process's
1461          information, /proc/ccs/query doesn't contain it.
1462          To be able to utilize ccs-queryd and ccs-notifyd more, I added it into
1463          /proc/ccs/query .
1464    
1465    Fix 2008/06/10
1466    
1467        @ Allow using patterns for globally readable files.
1468    
1469          To allow users specify locale specific files to globally readable files,
1470          I relaxed checking in update_globally_readable_entry().
1471    
1472    Fix 2008/06/11
1473    
1474        @ Remove ALLOW_ENFORCE_GRACE parameter.
1475    
1476          Since unexpected requests caused by doing software updates can happen
1477          in all profiles, users likely have to write ALLOW_ENFORCE_GRACE=enabled
1478          to all profiles. And it makes meaningless to allow users to selectively
1479          enable specific profile's ALLOW_ENFORCE_GRACE parameter.
1480          So, I removed ALLOW_ENFORCE_GRACE parameter.
1481          Now, the system behaves as if ALLOW_ENFORCE_GRACE=enabled is specified.
1482          The behavior of "delayed enforcing" mode is defined in the following
1483          order.
1484    
1485          (1) The requests are rejected immediately if nobody is opening
1486              /proc/ccs/query interface.
1487          (2) The requests will be rejected in 10 seconds if somebody other than
1488              ccs-queryd (such as less(1)) is opening /proc/ccs/query interface,
1489              for such process doesn't write dummy decisions.
1490    
1491    Fix 2008/06/22
1492    
1493        @ Pass escaped pathname to audit_execute_handler_log().
1494    
1495          I was passing unescaped pathname to audit_execute_handler_log()
1496          which causes /proc/ccs/grant_log contain whitespace characters
1497          if execute handler's pathname contains whitespace characters.
1498    
1499    Fix 2008/06/25
1500    
1501        @ Return 0 when ccs_may_umount() succeeds.
1502    
1503          I forgot to clear error value in ccs_may_umount() when the requested
1504          directory didn't match "deny_unmount" keyword. As a result, any umount()
1505          request with RESTRICT_UNMOUNT=enforcing returned -EPERM error.
1506    
1507    Version 1.6.2 2008/06/25   Usability enhancement release.
1508    
1509    Fix 2008/07/01
1510    
1511        @ Fix "Compilation failure" with 2.4.20 kernel.
1512    
1513          RedHat Linux 9's 2.4.20 kernel backported O(1) scheduler patch,
1514          resulting compilation error at ccs_load_policy().
1515          I added defined(TASK_DEAD) check.
1516    
1517    Fix 2008/07/08
1518    
1519        @ Don't check permissions if vfsmount is NULL.
1520    
1521          Some filesystems (e.g. unionfs) pass NULL vfsmount.
1522          I changed fs/tomoyo_file.c not to try to calculate pathnames
1523          if vfsmount is NULL.
1524    
1525    Version 1.6.3 2008/07/15   Bug fix release.
1526    
1527    Fix 2008/08/21
1528    
1529        @ Add workaround for gcc 4.3's bug.
1530    
1531          In some environments, fs/tomoyo_network.c could not be compiled
1532          because of gcc 4.3's bug.
1533          I modified save_ipv6_address() to use "integer literal" value
1534          instead for "static const u8" variable.
1535    
1536        @ Change prototypes of some functions.
1537    
1538          To support 2.6.27 kernels, I replaced "struct nameidata" with
1539          "struct path" for some functions.
1540    
1541        @ Detect distributor specific patches automatically.
1542    
1543          Since kernels with AppArmor patch applied is increasing,
1544          I introduced a mechanism which determines whether specific patches
1545          are applied or not, based on "#define" directives in the patches.
1546    
1547    Fix 2008/08/29
1548    
1549        @ Remove "-ccs" suffix from Makefile's EXTRAVERSION.
1550    
1551          To reduce conflicts on Makefile's EXTRAVERSION,
1552          I removed "-ccs" suffix from ccs-patch-2.\*.diff .
1553          Those who build kernels without using specs/build-\*.sh ,
1554          please edit EXTRAVERSION tag manually so that original kernels
1555          will not be overwritten by TOMOYO Linux kernels.
1556    
1557    Version 1.6.4 2008/09/03   Minor update release.
1558    
1559    Fix 2008/09/09
1560    
1561        @ Add "try again" response to "delayed enforcing" mode.
1562    
1563          To be able to handle pathname changes caused by software updates,
1564          "delayed enforcing" mode was introduced. It allows administrator to
1565          grant access requests which are about to be rejected by the kernel.
1566    
1567          To be able to handle pathname changes caused by software updates better,
1568          I introduced "try again" response. As "delayed enforcing" mode sleeps
1569          a process which violated policy, administrator can update policy while
1570          the process is sleeping. This "try again" response allows administrator
1571          to restart policy checks from the beginning after updating policy.
1572    
1573    Fix 2008/09/11
1574    
1575        @ Remember whether the process is allowed to write to /proc/ccs/ interface.
1576    
1577          Since programs for manipulating policy (e.g. ccs-queryd ) are installed
1578          in the form of RPM/DEB packages, these programs lose the original
1579          pathnames when they are updated by the package manager. The package
1580          manager renames these programs before deleting these programs so that
1581          the package manager can rollback the operation.
1582          This causes a problem when the programs are listed into /proc/ccs/manager
1583          using pathnames, as the programs will no longer be allowed to write to
1584          /proc/ccs/ interface while the process of old version of the program is
1585          alive.
1586    
1587          To solve this problem, I modified to remember the fact that the process
1588          is once allowed to write to /proc/ccs/ interface until the process
1589          attempts to execute a different program.
1590          This change makes it impossible to revoke permission to write to
1591          /proc/ccs/ interface without killing the process, but it will be better
1592          than nonfunctioning ccs-queryd program.

Legend:
Removed from v.1012  
changed lines
  Added in v.1578

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