ºìÁªLinuxÃÅ»§
Linux°ïÖú

SELinux ÈëÃÅ(תÔØ)

·¢²¼Ê±¼ä:2007-10-10 00:26:55À´Ô´:ºìÁª×÷Õß:gxf
¿ÉÄÜÄãÓÃÁËFedora£¬µ«ÊÇ»¹²»ÖªµÀSELinux µ½µ×ÊÇʲô¡£ÎÒÔÚÍøÉÏ¿´ÁËһƪÎÄÕ£¬Ï£Íû¶Ô´ó¼ÒÓÐËùÆôʾ¡­¡­

Ô­ÎĵØÖ· http://www.linuxforum.net/docnew/showflat.php?Board=new&Number=1009

1.±³¾°
SELinux ÊÇ¡¸Security-Enhanced Linux¡¹µÄ¼ò³Æ£¬ÊÇÃÀ¹ú¹ú¼Ò°²È«¾Ö¡¸NSA£½The National Security Agency¡¹ ºÍSCC£¨Secure Computing Corporation£©¿ª·¢µÄ LinuxµÄÒ»¸öÀ©ÕÅÇ¿ÖÆ·ÃÎÊ¿ØÖÆ°²È«Ä£¿é¡£Ô­ÏÈÊÇÔÚFlukeÉÏ¿ª·¢µÄ£¬2000ÄêÒÔ GNU GPL ·¢²¼¡£

ÏÖÔÚÒÔLinux×÷ΪÒòÌØÍø·þÎñÆ÷ÊÇÔ½À´Ô½ÆÕ±éµÄÊÂÁË¡£ÔÚÎÒÕ⼸Äê×÷¹ýµÄÏîÄ¿ÀWEBµÄ¿ª·¢»ù±¾¶¼ÊÇ»ùÓÚLinuxµÄ£¬ÕâÀïÓиø´ó¹«Ë¾×öµÄ£¬Ò²¸øÕþ¸®²¿ÃÅ×öµÄ£¬µ±È»¸ü¶àµÄÊÇÖÐСÆóÒµ×öµÄ¡£ÕâÆäÖиøÕþ¸®×öµÄ£¬ÎÒÃÇ°ÑSELinux×÷Ϊһ¸öÂôµã£¬½ÓÊÜÁ˲»ÉÙÏîÄ¿¡£

2.ÎÒÃÇÐèÒª°²È«²Ù×÷ϵͳµÄÀíÓÉ
ÏÖÔÚ²»ÂÛÊÇÕþ¸®»¹ÊÇÃñ¼äÆóÒµ£¬´ó¼Ò¶ÔÐÅÏ¢°²È«ÎÊÌâÊÇÔ½À´Ô½¹ØÐÄÁË£¬ÒòΪÆóÒµµÄÒµÎñƽ̨µÄ·þÎñÆ÷ÉÏ´æ´¢×Å´óÁ¿µÄÉÌÎñ»úÃÜ£¬¸öÈË×ÊÁÏ£¬¸öÈË×ÊÁÏËüÖ±½Ó¹Øϵµ½¸öÈ˵ÄÒþ˽ÎÊÌâ¡£ÌرðÊÇÎÒÃÇÕþ¸®µÄÍøÕ¾£¬×÷ΪÐÅÏ¢¹«¿ªµÄƽ̨£¬ËüµÄ°²È«¾Í¸üÏÔµÃÖØÒªÁË¡£ÕâЩÁ¬µ½»¥ÁªÍøµÄ·þÎñÆ÷£¬²»¿É±ÜÃâµÄÒªÊܵ½À´×ÔÊÀ½ç¸÷µØµÄ¸÷ÖÖÍþв¡£×µÄʱºòÎÒÃǵķþÎñÆ÷±»ÈëÇÖ£¬Ö÷Ò³Îļþ±»Ìæ»»£¬»úÃÜÎļþ±»µÁ×ß¡£³ýÁËÀ´×ÔÍⲿµÄÍþвÍ⣬ÄÚ²¿ÈËÔ±µÄ²»·¨·ÃÎÊ£¬¹¥»÷Ò²ÊDz»¿ÉºöÊӵġ£¶ÔÓÚÕâЩ¹¥»÷»òÕß˵ÊÇÍþв£¬µ±È»ÓкܶàµÄ°ì·¨£¬ÓзÀ»ðǽ£¬ÈëÇÖ¼ì²âϵͳ£¬´ò²¹¶¡µÈµÈ¡£ÒòΪLinuxÒ²ºÍÆäËûµÄÉÌÓÃUNIXÒ»Ñù£¬²»¶ÏÓи÷ÀàµÄ°²È«Â©¶´±»·¢ÏÖ¡£ÎÒÃǶԸ¶ÕâЩ©¶´²»µÃ²»»¨ºÜ¶àµÄÈËÁ¦À´¶ÂסËü¡£ÔÚÕâЩÊÖ¶ÎÖ®ÖУ¬Ìá¸ßOSϵͳ×ÔÉíµÄÀιÌÐÔ¾ÍÏԵ÷dz£µÄÖØÒª¡£

2.1´«Í³µÄLinux OSµÄ²»×ãÖ®´¦
ËäÈ»Linux ±ÈÆð Windows À´Ëµ£¬ËüµÄ¿É¿¿ÐÔ£¬Îȶ¨¶¨ÒªºÃµÃ¶à£¬µ«ÊÇËûÒ²ÊǺÍÆäËûµÄUNIX Ò»Ñù£¬ÓÐÒÔÏÂÕâЩ²»×ãÖ®´¦¡£
£±)´æÔÚÌØȨÓû§root
¡¡¡¡ÈκÎÈËÖ»ÒªµÃµ½rootµÄȨÏÞ£¬¶ÔÓÚÕû¸öϵͳ¶¼¿ÉÒÔΪËùÓûΪ¡£ÕâÒ»µãWindowsÒ²Ò»Ñù¡£
£²)¶ÔÓÚÎļþµÄ·ÃÎÊȨµÄ»®·Ö²»¹»Ï¸
¡¡¡¡ÔÚlinuxϵͳÀ¶ÔÓÚÎļþµÄ²Ù×÷£¬Ö»ÓС¸ËùÓÐÕß¡¹,¡¸ËùÓÐ×项,¡¸ÆäËû¡¹Õ⣳ÀàµÄ»®·Ö¡£
¡¡¡¡¶ÔÓÚ¡¸ÆäËû¡¹ÕâÒ»ÀàÀïµÄÓû§ÔÙϸϸµÄ»®·ÖµÄ»°¾ÍûÓа취ÁË¡£
£³)SUID³ÌÐòµÄȨÏÞÉý¼¶
¡¡¡¡Èç¹ûÉèÖÃÁËSUIDȨÏ޵ijÌÐòÓÐÁË©¶´µÄ»°£¬ºÜÈÝÒ×±»¹¥»÷ÕßËùÀûÓá£
£´)£Ä£Á£Ã(Discretionary Access Control)ÎÊÌâ
¡¡¡¡ÎļþĿ¼µÄËùÓÐÕß¿ÉÒÔ¶ÔÎļþ½øÐÐËùÓеIJÙ×÷£¬Õâ¸øϵͳÕûÌåµÄ¹ÜÀí´øÀ´²»±ã¡£

¶ÔÓÚÒÔÉÏÕâЩµÄ²»×㣬·À»ðǽ£¬ÈëÇÖ¼ì²âϵͳ¶¼ÊÇÎÞÄÜΪÁ¦µÄ¡£
ÔÚÕâÖÖ±³¾°Ï£¬¶ÔÓÚ·ÃÎÊȨÏÞ´ó·ùÇ¿»¯µÄOS SELinuxÀ´Ëµ£¬ËüµÄ÷ÈÁ¦µÄÎÞÇîµÄ¡£

2.2 SELinuxµÄÓŵã
SELinuxϵͳ±ÈÆðͨ³£µÄLinuxϵͳÀ´£¬°²È«ÐÔÄÜÒª¸ßµÄ¶à£¬Ëüͨ¹ý¶ÔÓÚÓû§£¬½ø³ÌȨÏÞµÄ×îС»¯£¬¼´Ê¹Êܵ½¹¥»÷£¬½ø³Ì»òÕßÓû§È¨ÏÞ±»¶áÈ¥£¬Ò²²»»á¶ÔÕû¸öϵͳÔì³ÉÖØ´óÓ°Ïì¡£

½ÓÏÂÀ´ÎÒÀ´½éÉÜSELinuxµÄһЩÌص㡣

Ìصã1£ºMAC(Mandatory Access Control)¡ª¡ª¡ª¶Ô·ÃÎʵĿØÖƳ¹µ×»¯
¶ÔÓÚËùÓеÄÎļþ£¬Ä¿Â¼£¬¶Ë¿ÚÕâÀàµÄ×ÊÔ´µÄ·ÃÎÊ£¬¶¼¿ÉÒÔÊÇ»ùÓÚ²ßÂÔÉ趨µÄ£¬ÕâЩ²ßÂÔÊÇÓɹÜÀíÔ±¶¨ÖƵġ¢Ò»°ãÓû§ÊÇûÓÐȨÏÞ¸ü¸ÄµÄ¡£

Ìصã2£º TE £¨Type Enforcement£©¡ª¡ª¡ª ¶ÔÓÚ½ø³ÌÖ»¸¶Óë×îСµÄȨÏÞ
Te¸ÅÄîÔÚ SELinuxÀï·Ç³£µÄÖØÒª¡£ËüµÄÌصãÊǶÔËùÓеÄÎļþ¶¼¸³ÓèÒ»¸ö½ÐtypeµÄÎļþÀàÐͱêÇ©£¬¶ÔÓÚËùÓеĽø³ÌÒ²¸³Óè¸÷×ÔµÄÒ»¸ö½Ð domainµÄ ±êÇ©¡£Domain±êÇ©Äܹ»Ö´ÐеIJÙ×÷Ò²ÊÇÓÉaccess vectorÔÚ²ßÂÔÀﶨºÃµÄ¡£
ÎÒÃÇÊìϤµÄapache·þÎñÆ÷£¬httpd½ø³ÌÖ»ÄÜÔÚhttpd_t ÀïÔËÐУ¬Õâ¸öhttpd_t µÄdomainÄÜÖ´ÐеIJÙ×÷£¬±ÈÈçÄܶÁÍøÒ³ÄÚÈÝÎļþ¸³Óèhttpd_sys_content_t, ÃÜÂëÎļþ¸³Óèshadow_t, TCPµÄ80¶Ë¿Ú¸³Óè http_port_tµÈµÈ¡£Èç¹ûÔÚaccess vectorÀïÎÒÃDz»ÔÊÐí http_tÀ´¶Ôhttp_port_t½øÐвÙ×÷µÄ»¨£¬ApacheÆô¶¯¶¼Æô¶¯²»ÁË¡£·´¹ýÀ´Ëµ£¬ÎÒÃÇÖ»ÔÊÐí80¶Ë¿Ú£¬Ö»ÔÊÐí¶ÁÈ¡±»±êΪ httpd_sys_content_tµÄÎļþ£¬httpd_t¾Í²»ÄÜÓñðµÄ¶Ë¿Ú£¬Ò²²»Äܸü¸ÄÄÇЩ±»±êΪhttpd_sys_content_tµÄÎļþ£¨read only)¡£

Ìصã3£º £ä£ï£í£á£é£îǨÒÆ ¡ª¡ª ·ÀֹȨÏÞÉý¼¶
ÔÚÓû§»·¾³ÀïÔËÐеã¶ÔµãÏÂÔØÈí¼þ azureus£¬Ä㵱ǰµÄdomainÊÇfu_t, µ«ÊÇ£¬Ä㿼Âǵ½°²È«ÎÊÌ⣬Äã´òËãÈÃËûÔÚazureus_tÀïÔËÐУ¬ÄãÒªÊÇÔÚterminalÀïÓÃÃüÁîÆô¶¯azureusµÄ»°£¬ËüµÄ½ø³ÌµÄdomain¾Í»áĬÈϼ̳ÐÄãʵÐеÄshellµÄfu_t¡£
ÓÐÁË£ä£ï£í£á£é£îǨÒƵĻ°£¬ÎÒÃǾͿÉÒÔÈÃazureusÔÚÎÒÃÇÖ¸¶¨µÄazureus_tÀïÔËÐУ¬ÔÚ°²È«ÉÏÃ棬ÕâÖÖ×ö·¨¸ü¿ÉÈ¡£¬Ëü²»»áÓ°Ïìµ½ÄãµÄfu_t¡£
ÏÂÃæÊÇdomainǨÒÆָʾµÄÀý×Ó£º
domain_auto_trans(fu_t, azureus_exec_t, azureus_t)
Òâ˼¾ÍÊÇ£¬µ±ÔÚ fu_t domainÀʵÐÐÁË ±»±êΪ azureus_exec_tµÄÎļþʱ£¬domain ´Ófu_tǨÒƵ½ azureus_t ¡£ÏÂÃæÊÇApacheÆô¶¯µÄǨÒÆͼ¡£×¢ÒâÁË£¬ÒòΪ´ÓÄÄÒ»¸ödomainÄÜǨÒƵ½httpd_tÊÇÔÚ²ßÂÔÀﶨºÃÁË£¬ËùÒÔÒªÊÇÎÒÃÇÊÖ¶¯ (/etc/init.d/httpd start)Æô¶¯apacheµÄ»°£¬¿ÉÄÜÈÔÈ»ÁôÔÚsysadm_tÀÕâÑù¾Í²»ÄÜÍê³ÉÕýÈ·µÄǨÒÆ¡£ÒªÓÃrun_initÃüÁîÀ´ÊÖ¶¯Æô¶¯¡£


Ìصã4£º RBAC£¨role base access control) ¡ª¡ª¡ª¡ª¡ª ¶ÔÓÚÓû§Ö»¸¶Óë×îСµÄȨÏÞ
¶ÔÓÚÓû§À´Ëµ£¬±»»®·Ö³ÉһЩROLE£¬¼´Ê¹ÊÇROOTÓû§£¬ÄãÒªÊDz»ÔÚsysadm_rÀҲ»¹ÊDz»ÄÜʵÐÐsysadm_t¹ÜÀí²Ù×÷µÄ¡£ÒòΪ£¬ÄÇЩROLE¿ÉÒÔÖ´ÐÐÄÇЩdomainÒ²ÊÇÔÚ²ßÂÔÀïÉ趨µÄ¡£ROLEÒ²ÊÇ¿ÉÒÔǨÒƵģ¬µ«ÊÇÒ²Ö»ÄÜ°²²ßÂԹ涨µÄǨÒÆ¡£

3. ¿ØÖÆÇл»
´Ófedora core 2¿ªÊ¼£¬ 2.6Äں˵İ汾¶¼Ö§³Öselinux.ÎÒÃÇ¿´¿´ Fedora core 5 ÀïµÄ/etc/sysconfig/selinux±ê×¼É趨°É¡£
³ÌÐò´úÂë:


# This file controls the state of SELinux on the system.
# SELINUX= can take one of these three values:
# enforcing - SELinux security policy is enforced.
# permissive - SELinux prints warnings instead of enforcing.
# disabled - SELinux is fully disabled.
SELINUX=enforcing
#SELINUX=disabled
# SELINUXTYPE= type of policy in use. Possible values are:
# targeted - Only targeted network daemons are protected.
# strict - Full SELinux protection.
SELINUXTYPE=targeted

SELINUXÓС¸disabled¡¹¡¸permissive¡¹£¬¡¸enforcing¡¹3ÖÖÑ¡Ôñ¡£

Disabled¾Í²»ÓÃ˵ÁË£¬permissive¾ÍÊÇSelinuxÓÐЧ£¬µ«ÊǼ´Ê¹ÄãÎ¥·´Á˲ßÂԵĻ°ËüÈÃÄã¼ÌÐø²Ù×÷£¬µ«ÊÇ°ÑÄãµÄÎ¥·´µÄÄÚÈݼǼÏÂÀ´¡£ÔÚÎÒÃÇ¿ª·¢²ßÂÔµÄʱºò·Ç³£µÄÓÐÓá£
Ï൱ÓÚDebugģʽ¡£
Enforcing¾ÍÊÇÄãÎ¥·´Á˲ßÂÔ£¬Äã¾ÍÎÞ·¨¼ÌÐø²Ù×÷ÏÂÈ¥¡£

SELINUXTYPE ÄØ£¬ÏÖÔÚÖ÷ÒªÓÐ2´óÀ࣬һÀà¾ÍÊǺìñ×Ó¿ª·¢µÄtargeted£¬ËüÖ»ÊǶÔÓÚ£¬Ö÷ÒªµÄÍøÂç·þÎñ½øÐб£»¤£¬±ÈÈç apache ,sendmail, bind,postgresqlµÈ£¬²»ÊôÓÚÄÇЩdomainµÄ¾Í¶¼ÈÃËûÃÇÔÚunconfined_tÀ¿Éµ¼ÈëÐԸߣ¬¿ÉÓÃÐԺõ«ÊDz»ÄܶÔÕûÌå½øÐб£»¤¡£
ÁíÒ»ÀàÊÇStrict£¬ÊÇNAS¿ª·¢µÄ£¬ÄܶÔÕû¸öϵͳ½øÐб£»¤£¬µ«ÊÇÉ趨¸´ÔÓ£¬ÎÒÈÏΪËäÈ»Ëü¸´ÔÓ£¬µ«ÊÇһЩ»ù±¾µÄ»áÁË£¬»¹ÊÇ¿ÉÒÔÍæµÃ¶¯µÄ¡£

ÎÒÃdzýÁËÔÚ/etc/sysconfig/selinuxÉèËüÓÐЧÎÞЧÍ⣬ÔÚÆô¶¯µÄʱºò£¬Ò²¿ÉÒÔͨ¹ý´«µÝ²ÎÊýselinux¸øÄÚºËÀ´¿ØÖÆËü¡£(Fedora 5ĬÈÏÊÇÓÐЧ£©

³ÌÐò´úÂë:

kernel /boot/vmlinuz-2.6.15-1.2054_FC5 ro root=LABEL=/ rhgb quiet selinux=0


ÉÏÃæµÄ±ä¸ü¿ÉÒÔÈÃËüÎÞЧ¡£

³ÌÐò´úÂë:

[root@python sysconfig]# /usr/sbin/getenforce
Enforcing

È·ÈÏÓÐЧºóÖØжÔÎļþϵͳ¸³Óè±êÇ©£º
³ÌÐò´úÂë:

[root@python sysconfig]# /sbin/fixfiles relabel


»òÕß
³ÌÐò´úÂë:

[root@python /]# touch /.autorelabel


È»ºó reboot ,Äã¾ÍÔÚsecureµÄLinux»·¾³Ï¹¤×÷ÁË¡£

4. SELinuxµÄ»ù±¾²Ù×÷
SELinux ÊǸö¾­¹ý°²È«Ç¿»¯µÄLinux²Ù×÷ϵͳ£¬Êµ¼ÊÉÏ£¬»ù±¾ÉÏÔ­À´µÄÔËÓÃÈí¼þûÓбØÒªÐ޸ľÍÄÜÔÚËüÉÏÃæÔËÐС£ÕæÕý×öÁËÌرðÐ޸ĵÄRPM°üÖ»Òª50¶à¸ö¡£ÏñÎļþϵͳEXT3¶¼ÊǾ­¹ýÁËÀ©Õ¹¡£¶ÔÓÚһЩԭÓеÄÃüÁîÒ²½øÐÐÁËÀ©Õ¹£¬ÁíÍ⻹Ôö¼ÓÁËһЩеÄÃüÁ½ÓÏÂÀ´ÎÒÃǾÍÀ´¿´¿´ÕâЩÃüÁî¡£

4.1 Îļþ²Ù×÷
1£©lsÃüÁî
ÔÚÃüÁîºó¼Ó¸ö £­Z »òÕß¼Ó -context
³ÌÐò´úÂë:

[root@python azureus]# ls -Z
-rwxr-xr-x fu fu user_u:object_r:user_home_t azureus
-rw-r--r-- fu fu user_u:object_r:user_home_t Azureus2.jar
-rw-r--r-- fu fu user_u:object_r:user_home_t Azureus.png



2£©chcon
¸ü¸ÄÎļþµÄ±êÇ©
³ÌÐò´úÂë:

[root@python tmp]# ls --context test.txt
-rw-r--r-- root root root:object_r:staff_tmp_t test.txt



³ÌÐò´úÂë:

[root@python tmp]# chcon -t etc_t test.txt
[root@python tmp]# ls -lZ test.txt
-rw-r--r-- root root root:object_r:etc_t test.txt



3)restorecon
µ±Õâ¸öÎļþÔÚ²ßÂÔÀïÓж¨ÒåÊÇ£¬¿ÉÒÔ»Ö¸´Ô­À´µÄ Îļþ±êÇ©¡£

4£©setfiles
¸úchconÒ»Ñù¿ÉÒÔ¸ü¸ÄÒ»²¿·ÖÎļþµÄ±êÇ©£¬²»ÐèÒª¶ÔÕû¸öÎļþϵͳÖØÐÂÉ趨±êÇ©¡£

5£©fixfiles
Ò»°ãÊǶÔÕû¸öÎļþϵͳµÄ£¬ ºóÃæÒ»°ã¸ú relabel,¶ÔÕû¸öϵͳ relabelºó£¬Ò»°ãÎÒÃǶ¼ÖØÐÂÆô¶¯¡£Èç¹û£¬ÔÚ¸ùĿ¼ÏÂÓÐ.autorelabel¿ÕÎļþµÄ»°£¬Ã¿´ÎÖØÐÂÆô¶¯Ê±¶¼µ÷Óà fixfiles relabel

6£©star
¾ÍÊÇtarÔÚSELinuxϵĻ¥»»ÃüÁÄÜ°ÑÎļþµÄ±êÇ©Ò²Ò»Æ𱸷ÝÆðÀ´¡£

7£©cp
¿ÉÒÔ¸ú -Z, --context=CONTEXT ÔÚ¿½±´µÄʱºòÖ¸¶¨Ä¿µÄµØÎļþµÄsecurity context

8£©find
¿ÉÒÔ¸ú -context ²éÌض¨µÄtypeµÄÎļþ¡£
Àý×Ó£º
³ÌÐò´úÂë:

find /home/fu/ --context fu:fu_r:amule_t -exec ls -Z {} \:



9£©run_init
ÔÚsysadm_tÀïÊÖ¶¯Æô¶¯Ò»Ð©ÈçApacheÖ®ÀàµÄ³ÌÐò£¬Ò²¿ÉÒÔÈÃËüÕý³£½øÐУ¬domainǨÒÆ¡£

4.2½ø³ÌdomainµÄÈ·ÈÏ
³ÌÐòÏÖÔÚÔÚÄǸödomainÀïÔËÐУ¬ÎÒÃÇ¿ÉÒÔÔÚps ÃüÁîºó¼Ó £­Z
³ÌÐò´úÂë:

[root@python /]# ps -eZ
LABEL PID TTY TIME CMD
system_u:system_r:init_t 1 ? 00:00:00 init
system_u:system_r:kernel_t 2 ? 00:00:00 ksoftirqd/0
system_u:system_r:kernel_t 3 ? 00:00:00 watchdog/0



4.3ROLEµÄÈ·ÈϺͱä¸ü
ÃüÁîidÄÜÓÃÀ´È·ÈÏ×Ô¼ºµÄ security context
³ÌÐò´úÂë:

[root@python ~]# id
uid=0(root) gid=0(root) groups=0(root),1(bin),2(daemon),3(sys),4(adm),6(disk),10(wheel) context=root:staff_r:staff_t


ÕâÀËäÈ»ÊÇROOTÓû§£¬µ«Ò²Ö»ÊÇÔÚÒ»°ãµÄROLEºÍstaff_tÀïÔËÐУ¬Èç¹ûÔÚenforcingģʽÏ£¬ÕâʱµÄROOT¶ÔÓÚϵͳ¹ÜÀí¹¤×÷À´Ëµ£¬ÊÇʲôҲ¸É²»ÁË¡£

³ÌÐò´úÂë:

[root@python ~]# newrole -r sysadm_r
Authenticating root.
¿ÚÁ
[root@python ~]# id
uid=0(root) gid=0(root) groups=0(root),1(bin),2(daemon),3(sys),4(adm),6(disk),10(wheel) context=root:sysadm_r:sysadm_t



4.4ģʽÇл»
1£©getenforce
µÃµ½µ±Ç°µÄSELINUXÖµ
³ÌÐò´úÂë:

[root@python bin]# getenforce
Permissive


2£©setenforce
¸ü¸Äµ±Ç°µÄSELINUXÖµ £¬ºóÃæ¿ÉÒÔ¸ú enforcing,permissive »òÕß 1, 0¡£
³ÌÐò´úÂë:

[root@python bin]# setenforce permissive



3£©sestatus
ÏÔʾµ±Ç°µÄ SELinuxµÄÐÅÏ¢
³ÌÐò´úÂë:

[root@python bin]# sestatus -v
SELinux status: enabled
SELinuxfs mount: /selinux
Current mode: permissive
Mode from config file: permissive
Policy version: 20
Policy from config file: refpolicy

Process contexts:
Current context: user_u:user_r:user_t
Init context: system_u:system_r:init_t
/sbin/mingetty system_u:system_r:getty_t
/usr/sbin/sshd system_u:system_r:sshd_t

File contexts:
Controlling term: user_u:object_r:user_devpts_t
/etc/passwd system_u:object_r:etc_t
/etc/shadow system_u:object_r:shadow_t
/bin/bash system_u:object_r:shell_exec_t
/bin/login system_u:object_r:login_exec_t
/bin/sh system_u:object_r:bin_t -> system_u:object_r:shell_exec_t
/sbin/agetty system_u:object_r:getty_exec_t
/sbin/init system_u:object_r:init_exec_t
/sbin/mingetty system_u:object_r:getty_exec_t


4.5ÆäËûÖØÒªÃüÁî
1£©Audit2allow
ºÜÖØÒªµÄÒ»¸öÒÔpythonдµÄÃüÁÖ÷ÒªÓÃÀ´´¦ÀíÈÕÖ¾£¬°ÑÈÕÖ¾ÖеÄÎ¥·´²ßÂԵĶ¯×÷µÄ¼Ç¼£¬×ª»»³É access vector£¬¶Ô¿ª·¢°²È«²ßÂԷdz£ÓÐÓá£ÔÚrefpolicyÀËüµÄ¹¦ÄܱÈÒÔÇ°ÓÐÁ˺ܴóµÄÀ©Õ¹¡£
³ÌÐò´úÂë:

[root@python log]# cat dmesg | audit2allow -m local > local.te



2£©checkmodule -m -o local.mod local.te ±àÒëÄ£¿é
³ÌÐò´úÂë:

[root@python log]# checkmodule -m -o local.mod local.te
checkmodule: loading policy configuration from local.te
checkmodule: policy configuration loaded
checkmodule: writing binary representation (version 5) to local.mod



3£©semodule_package
´´½¨ÐµÄÄ£¿é
³ÌÐò´úÂë:

[root@python log]# semodule_package -o local.pp -m local.mod



4)semodule
¿ÉÒÔÏÔʾ£¬¼ÓÔØ£¬É¾³ý Ä£¿é
¼ÓÔصÄÀý×Ó£º
³ÌÐò´úÂë:

[root@python log]# semodule -i local.pp



5£©semanage
ÕâÊÇÒ»¸ö¹¦ÄÜÇ¿´óµÄ²ßÂÔ¹ÜÀí¹¤¾ß£¬ÓÐÁËËü¼´Ê¹Ã»ÓвßÂÔµÄÔ´´úÂ룬ҲÊÇ¿ÉÒÔ¹ÜÀí°²È«²ßÂԵġ£ÒòΪÎÒÖ÷ÒªÊǽéÉÜÓÃÔ´´úÂëÀ´Ð޸IJßÂԵģ¬ÏêϸÓ÷¨´ó¼Ò¿ÉÒԲο¼ËüµÄmanÒ³¡£

5. ¶¨ÖƲßÂÔ
FC4, RHEL4µÈ¶¼ÊDzÉÓòßÂÔ1.X°æ±¾µÄ£¬²¢ÇÒÊÇÌṩ²ßÂÔÔ´´úÂëµÄRPM°ü¡£´ÓFC5¿ªÊ¼²ßÂԵİ汾´Ó1.X Éý¼¶µ½2.X¡£2.X°æ±¾µÄrefpolicy(reference policy)×î´óµÄÒ»¸ö±ä»¯¾ÍÊÇÒý½øÄ£¿é£¨module)Õâ¸ö¸ÅÄî, ͬһÌײßÂÔÔ´´úÂë¾Í¿ÉÒÔÖ§³ÖMulti-LevelSecurity£¨MLS£©ºÍnon-MLS¡£
http://serefpolicy.sf.net/
±ê×¼µÄFC5Àï²»ÌṩԴ´úÂëµÄRPM°ü¡£FC5ÌṩµÄaudit2allow,semanage,semoduleÒ²ÊÇ¿ÉÒÔ¿ª·¢Ò»Ð©¼òµ¥µÄ²ßÂÔÄ£¿éµÄ¡£µ«ÊÇ£¬ÒªÊÇ×÷²ßÂÔÄ£¿éµÄ¿ª·¢£¬Ôö¼ÓÒ»¸öROLEÖ®ÀàµÄ£¬×îºÃ»¹ÊÇÏÂÔØrefpolicyµÄÔ´´úÂë¡£

5.1²ßÂÔÔ´ÎļþµÄ°²×°
´ÓCVS·þÎñÆ÷ÏÂÔصÄÔ´´úÂëÊÇ×îеģ¬Èç¹ûÓöµ½ÏómakeµÄʱºò³ö´í£¬ÄÇô×îºÃ¾ÍÊÇ°ÑÄãϵͳÀïºÍSELinuxÓйصÄÄÇЩ°ü¸üе½×îеÄ״̬¡£
´Ósource ForgeµÄCVS·þÎñÆ÷ÏÂÔØÔ´´úÂë

³ÌÐò´úÂë:

[root@python src]# cd /usr/local/src
[root@python src]# cvs -d:pserver:anonymous@cvs.sourceforge.net:/cvsroot/serefpolicy login
[root@python src]# cvs -z3 -d:pserver:anonymous@cvs.sourceforge.net:/cvsroot/serefpolicy co -P refpolicy

[root@python src]# cd refpolicy/

[root@python src]# make install-src


°²×°ºÃÁ˵ÄÔ´´úÂëĿ¼½á¹¹ÈçÏÂͼËùʾ£º



ÿһ¸öÄ£¿éÓÐ3¸öÎļþ¹¹³É£¬±ÈÈçÉÏͼµÄsudo.fc ¾ÍÊÇºÍ ÃüÁîsudoÏà¹ØµÄÎļþµÄ¶¨Òå±êÇ©£¬£¨file context rabel)£¬sudo.teÊÇType Enforcement¶¨Ò壬°üÀ¨TE·ÃÎʹæÔòµÈ£¬sudo.ifÊÇÒ»¸öÍⲿģ¿éµ÷ÓÃÕâ¸öÄ£¿éµÄ½Ó¿Ú¶¨Òå¡£

³ÌÐò´úÂë:

[root@python src]# cd /etc/selinux/refpolicy/src/policy
[root@python policy]# cp build.conf build.conf.org
[root@python policy]# vi build.conf
[root@python policy]# diff build.conf build.conf.org
32c32
< DISTRO = redhat
---
> #DISTRO = redhat
43c43
< MONOLITHIC=n
---
> MONOLITHIC=y
[root@python src]# make conf
[root@python src]# make


ÕâÑù£¬ÔÚ/etc/selinux/refpolicy/src/policyÏÂÉú³ÉºÜ¶àµÄÒÔppΪºó׺µÄÎļþ£¬ÕâЩ¾ÍÊÇSELinuxÄ£¿é¡£½ÓÏÂÀ´ÎÒÃÇÐÞ¸Ä/etc/sysconfig/selinux£¬Éè³ÉSELINUXTYPE=refpolicy£¬È»ºóreboot.

Æô¶¯ºó£¬È·ÈϲßÂÔµÄÊÊÓÃÇé¿ö£¬ ÏÖÔڵİ汾ÊÇ20¡£
³ÌÐò´úÂë:

[fu@python ~]$ /usr/sbin/sestatus
SELinux status: enabled
SELinuxfs mount: /selinux
Current mode: permissive
Mode from config file: permissive
Policy version: 20
Policy from config file: refpolicy


5.2¸ø³ÌÐò¶¨ÖÆdomain
¿ª·¢³ÌÐò²ßÂÔµÄÒ»°ã²½Öè
1.¸øÎļþ£¬¶Ë¿ÚÖ®ÀàµÄobject¸³Óètype ±êÇ©
2.ÉèÖà Type Enforcement (Domain ǨÒÆ£¬·ÃÎÊÐí¿É£©
3.²ßÂÔ¼ÓÔØ
4.permissiveģʽÏÂÔËÐгÌÐò
5.È·ÈÏÈÕÖ¾£¬ÓÃaudit2allowÉú³É·ÃÎÊÐí¿É
6.Öظ´1£¬2£¬3£¬4£¬5¶¯×÷£¬Ö±µ½Ã»ÓÐÎ¥·´µÄÈÕÖ¾³öÏÖ
7.Çл»µ½enforcingģʽ£¬ÕýʽÔËÓÃ
ÒòΪÎÒÃÇËù³£ÓõÄÄÇЩ·þÎñµÄ²ßÂÔÄ£¿é¶¼ÒѾ­ÓÐÁË£¬Ð޸ĵÄʱºòÒ²±È½Ï¼òµ¥¡£ÔÚÕâÀïÎҾ;ٸöÒ»°ãµÄÀý×Ó¡£Óõã¶ÔµãÏÂÔصÄÅóÓѹÀ¼Æ¶¼¸úÎÒÒ»Ñù£¬ÔÚLinuxÉÏÓà azureus£¬AmuleÀ´ÏÂÔض«Î÷°É¡£
½ÓÏÂÀ´ÒÔazureusΪÀý£¬½éÕÙÈçºÎÔÚFC5Àï×·¼ÓÒ»¸öazureus.ppÄ£¿é¡£ÎÒÃÇÔÚ×·¼Óazureus.ppÄ£¿é֮ǰ£¬azureusÊÇÔÚϵͳ¸øÓû§ÉèºÃµÄuser_t domainÀïÔËÐС£
³ÌÐò´úÂë:

[fu@python azureus]$ ps -efZ|grep azureus
user_u:user_r:user_t fu 1751 1732 0 22:28 pts/3 00:00:00 /bin/bash ./azureus


½ÓÏÂÀ´ÎÒÃÇÔÚ×·¼Ó3¸öÎļþ¡£
1£©azureus.fc
ÔÚÕâÀïÎÒÖ»¶¨ÒåÒ»¸öÎļþ£¬Êµ¼ÊÒªÊÇÕæµÄÓõģ¬»¹Òª¶¨Òåazureus_tÄÜдµÄĿ¼µÈ¡£
³ÌÐò´úÂë:

[root@python apps]# more azureus.fc
/home/fu/azureus -- gen_context(user_u:object_r:azureus_exec_t,s0)



2£©azureus.te
³ÌÐò´úÂë:

[root@python apps]# more azureus.te
policy_module(azureus,1.0.0)
type azureus_t;
type azureus_exec_t;
role user_r types azureus_t;
require {
type user_t;
};
domain_type(azureus_t)
domain_entry_file(azureus_t, azureus_exec_t)
domain_auto_trans(user_t, azureus_exec_t, azureus_t)




3)azureus.if
ʵ¼ÊÉÏûÓбðµÄÄ£¿éÒªµ÷ÓÃazureus£¬ËùÒÔÕâ¸öÎļþ¾ÍÊÇ¿ÕÎļþÒ²²»Òª½ô¡£
³ÌÐò´úÂë:

[root@python apps]# more azureus.if
# policy/modules/apps/azureus.if
## Myapp example policy
##
## Execute a domain transition to run azureus.
##

##
## Domain allowed to transition.
##
interface(`azureus_domtrans',`
gen_requires(`
type azureus_t, azureus_exec_t;
')
domain_auto_trans($1,azureus_exec_t,azureus_t)
allow $1 azureus_t:fd use;
allow azureus_t $1:fd use;
allow $1 azureus_t:fifo_file rw_file_perms;
allow $1 azureus_t:process sigchld;
')

ÔÚ/etc/selinux/refpolicy/src/policy/policy/module.conf Àï¼ÓÈëÏÂÃæÒ»ÐÐ
³ÌÐò´úÂë:

[root@python policy]# tail -1 modules.conf
azureus = module



È·ÈÏ/etc/selinux/refpolicy/src/policyÀïMONOLITHIC=n
×îºómake , make load
³ÌÐò´úÂë:

[root@python policy]# pwd
/etc/selinux/refpolicy/src/policy
[root@python policy]# make;make load


Õý³£ÖÕÁ˺ó£¬ÎÒÃÇ¿ÉÒÔÓà semoduleÃüÁîÀ´È·ÈÏ azureus.ppÏÂÔØÏÂÈ¥ÁËûÓС£
³ÌÐò´úÂë:

[root@python policy]# semodule -l |grep azureus
azureus 1.0.0


¿´Ñù×ÓÊÇûÓÐÎÊÌâ¡£ºÃÁËÎÒÃÇÔÙ¿´¿´ /home/fu/azureus/azureusµÄsecurity context£¬ÎÒÃǸղÅÔÚazureus.fcÀïÊÇÆÚÍûËüÊÇ user_u:object_r:azureus_exec_t £¬¿ÉÊÇËüÕâ¸öʱºò»¹ÊǼ̳ÐÁËĬÈ쵀 user_u:object_r:user_home_t £¬Èç¹û²»ÊÇÎÒÃÇÆÚÍûµÄÎļþ±êÇ©µÄ»°£¬domainÊÇÎÞ·¨´Óuser_tǨÒƵ½azureus_tµÄ£¬ÒòΪrelabelµÄ»°£¬»á¶ÔÕû¸öÎļþϵͳ½øÐÐÖØÐÂÉè±êÇ©£¬ºÜ»¨Ê±¼ä£¬ËùÒÔÎÒÃÇÓÃÔÚÉÏÃæ½éÉܹýÎļþ±êÇ©¸ü¸ÄµÄÃüÁîchconÃüÁîÀ´¸Ä±êÇ©¡£
³ÌÐò´úÂë:

[root@python azureus]# chcon -t azureus_exec_t azureus


ÔÙ¿´¿´Õâ´ÎµÄбêÇ©£¬¹ûÈ»ÈçÎÒÃÇÆÚÍûµÄ£¬±ä³Éazureus_exec_tÁË¡£
³ÌÐò´úÂë:

[root@python policy]# ls -lZ /home/fu/azureus/
-rwxr-xr-x fu fu user_u:object_r:azureus_exec_t azureus
-rw-r--r-- fu fu user_u:object_r:user_home_t Azureus2.jar


½ÓÏÂÀ´Í˳öROOTÓû§£¬ÒÔÓû§fuµÇ¼£¬ÔËÐÐazureusÃüÁî¡£
³ÌÐò´úÂë:

[root@python azureus]# ps -efZ|grep azureus
user_u:user_r:azureus_t fu 8703 8647 0 23:23 pts/1 00:00:00 /bin/bash ./azureus
user_u:user_r:azureus_t fu 8717 8703 4 23:24 pts/1 00:01:29 java -Djava.ext.dirs=/usr/lib/jvm/java-1.4.2-gcj-1.4.2.0/jre/lib/ext -Xms16m -Xmx128m -cp /home/fu/azureus/Azureus2.jar:/home/fu/azureus/swt.jar -Djava.library.path=/home/fu/azureus -Dazureus.install.path=/home/fu/azureus org.gudy.azureus2.ui.swt.Main
user_u:user_r:user_t root 9347 1956 0 23:59 pts/2 00:00:00 grep azureus



¸ßÐË°É£¡ ³É¹¦ÁË¡£
ÔÚÕâÀïÎÒÖ»ÊÇÑÝʾÈçºÎÈÃdomainǨÒÆ£¬ÖÁÓÚazureusµÄÑϸñµÄaccess vectorµÄÉèÖÃÎÒ¶¼ºöÂÔÁË¡£

5.3 ¸ø×Ô¼ºÔö¼Ó¸öרÓõÄROLE
ÔÚÕâÀïÎÒÃÇÒªÔö¼ÓÒ»¸ö½ÐmadiaµÄROLE£¬ÔÚ×·¼ÓʱҪ¶ÔһЩÎļþ½øÐÐÐ޸ġ£

5.3.1 /etc/selinux/refpolicy/src/policy/policy/modules/kernelϵÄÎļþÐÞ¸Ä
1) kernel.te
³ÌÐò´úÂë:

[root@python kernel]# vi kernel.te


ÔÚrole user_r µÄÏÂÃæ¼ÓÉÏÒ»ÐÐ
role madia_r;
2) domain.te
³ÌÐò´úÂë:

[root@python kernel]# vi domain.te


ÔÚ role user_r types domain; µÄÏÂÃæ¼ÓÉÏÒ»ÐÐ
role madia_r type domain;

5.3.2 /etc/selinux/refpolicy/src/policy/policy/modules/systemϵÄÎļþÐÞ¸Ä
³ÌÐò´úÂë:

[root@python system]# vi userdomain.te


ÔÚµÚ5ÐÐ×·¼Ómadia_r,ÈçÏÂËùʾ£º
role sysadm_r, staff_r, user_r,madia_r;
ÔÚunpriv_user_template(user)ÏÂÃæ¼ÓÉÏÏÂÃæµÄÒ»ÐС£
unpriv_user_template(madia)

5.3.3 /etc/selinux/refpolicy/src/policy/policyϵÄÎļþÐÞ¸Ä
1£©user
usersºÍ²ßÂÔ1.XÀïµÄusers²î²»¶à¡£¶¨ÒåÓû§ÄÜÀûÓõÄROLE¡£
³ÌÐò´úÂë:

[root@python policy]# vi users
gen_user(madia, madia, madia_r, s0, s0)

2£©rolemap
³ÌÐò´úÂë:

[root@python policy]# vi rolemap


ÔÚuser_r user user_tÏÂÃæ¼ÓÉÏÒ»ÐÐ
madia_r madia madia_t

5.3.4 ÖØÐÂmake ²ßÂÔ
³ÌÐò´úÂë:

[root@python policy]# make load



5.3.5 /etc/selinux/refpolicy/seusers ÎļþµÄÐÞ¸Ä
SeusersÊÇϵͳһ°ãÓû§ºÍSELinuxµÄÓû§Ó³Éä¡£
³ÌÐò´úÂë:

[root@python refpolicy]# vi seusers
madia:madia



5.3.6 /etc/selinux/refpolicy/contextsϵÄÎļþÐÞ¸Ä
1)default_type
¾ö¶¨Óû§µÇ¼ʱµÄĬÈÏROLE¡£
³ÌÐò´úÂë:

[root@python refpolicy]# vi contexts/default_type
madia_r:madia_t


2£©default_contexts
¾ö¶¨Óû§µÇ¼ʱµÄĬÈÏsecurity context
³ÌÐò´úÂë:

[root@python refpolicy]# vi contexts/default_contexts
system_r:local_login_t madia_r:madia_t staff_r:staff_t user_r:user_t sysadm_r:sysadm_t



5.3.7 ÒÔmadiaÓû§ÖØеǼ
×îºóÒÔÓû§madiaµÇ¼£¬²é¿´ÊDz»ÊÇ ½øÈëmadia_tÁË¡£
³ÌÐò´úÂë:

[madia@python ~]$ id
uid=501(madia) gid=501(madia) groups=501(madia) context=madia:madia_r:madia_t


ÒÔÉÏÎÒÃÇ¿ÉÒÔ¿´³ö£¬madiaÓû§È·ÊµÊǽøÈëÁËmadia_t ÔËÐÐÁË¡£
ÎÒÃÇÔÚÒÔÉϵIJÙ×÷ÖУ¬Êµ¼ÊÉÏ»¹ÓÐÐÞ¸ÄÒÅ©µÄµØ·½£¬Ã¿µ±ÖØÐÂmakeµÄʱºò£¬seusers¶¼»á»Øµ½Ô­À´µÄÉ趨£¬ÓÐÐËȤµÄÅóÓÑ¿ÉÒÔ×Ô¼ºÕÒ³öÄÄÀﻹÐèÒªÐ޸ġ£

6.×îºó
ÎÒÃÇÏÖÔÚÖ÷Òª»¹ÊÇtargeted²ßÂÔ£¬ÒòΪÎÒÃǵķþÎñÆ÷£¬»ù±¾ÉÏÒ²¾ÍÅÜapache,postgresql,tomcat,bind,postfixÕ⼸¸ö·þÎñ¡£TargetedÄܹ»±£»¤Ëü¡£ÎÒÃǵÄÄ¿±êÊǽ«Ò»Ð©Ó°Ïì±È½ÏСµÄ£¬·þÎñ±È½Ïµ¥Ò»µÄ·þÎñÆ÷ÒÆÖ²µ½ÄÜÔËÐÐstrict²ßÂԵķþÎñÆ÷ÉÏ¡£µ±È»£¬¼´Ê¹ÎÒÃÇÓà SELinux£¬¶ÔÓÚϵͳµÄ°²È«Ò²²»ÄܵôÒÔÇáÐÄ£¬ÈÏΪÓÐÁËSELinux¾Í100£¥°²È«¡£
±ÈÈçtargetedÀïÓÐunconfined_t£¬ÈκÎÔÚÕâ¸ödomainÀïÔËÐеĶ¼ÊDz»±»±£»¤µÄ¡£»¹ÓУ¬ÏµÍ³¹ÜÀíÔ±¶ÔTEµÄÉèÖôíÎóÔì³É²»Äܺܺõı£»¤£¬»¹Äں˵Ä©¶´£¬Dos¹¥»÷µÈ£¬SELinuxÒ²ÊÇÎÞÄÜΪÁ¦µÄ¡£
³ýÁËSELinuxÍ⣬»¹ÓÐLIDS £¬TOMOYO LINUX£¬AppArmorµÈ°²È«²Ù×÷ϵͳ¡£´ó¼Ò¶ÔLIDSºÍAppArmorÓпÉÄܱȽÏÊìϤ£¬TOMOYOÊÇ ÈÕ±¾NTTÊý¾Ý¹«Ë¾¿ª·¢µÄ¡£Ò²ÐíÓÐÅóÓÑÔÚÑ¡ÔñµÄʱºò²»ÖªµÀ¸ÃÓÃÄǸöºÃ¡£
°²È«¼¶±ð¸ß<----------------------------------->Ò×ÓÃÐÔ¸ß
SELINUX >> TOMOYO >> LIDS >> AppArmor

¸öÈ˾õµÃ£¬SELinuxËäÈ»ÅäÖÃÆðÀ´Âé·³Á˵㣬µ«ÊÇÄÜ´ïµ½¾üÊ°²È«¼¶±ð£¬ÒªÍæµÄ¾Í»°£¬»¹ÊÇSELinuxÓÐ÷ÈÁ¦¡£
ÏÖÔÚÒ²ÓÐÈËÔÚ¿ª·¢²ßÂÔµÄGUI±à¼­Æ÷£¬ÈçSEEDIT£¬ÊÇÈÕ±¾ÈÕÁ¢Èí¼þ¹¤³Ì¹«Ë¾µÄÒ»¸ö½ÐÖдåÐÛһΪÖÐÐÄ¿ª·¢µÄ¡£ÓÐÁËÕâЩGUIµÄ¹¤¾ß£¬½«À´¶¨ÖƲßÂÔ»áÔ½À´Ô½ÈÝÒ׵ġ£

<²Î¿¼>
1.http://danwalsh.livejournal.com/
2.http://d.hatena.ne.jp/himainu/
3.http://seedit.sourceforge.net/
4.http://www.linuxtopia.org/online_books/linux_security_index.html
ÎÄÕÂÆÀÂÛ

¹²ÓÐ 1 ÌõÆÀÂÛ

  1. Ä̲èdsk ÓÚ 2007-10-10 11:15:26·¢±í:

    ѧϰÁË,¶¥ÏÂ..:0L