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

SelinuxÅäÖÃÏê½â

·¢²¼Ê±¼ä:2009-08-11 09:02:34À´Ô´:ºìÁª×÷Õß:xzj4167
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µÄ¹¤¾ß£¬½«À´¶¨ÖƲßÂÔ»áÔ½À´Ô½ÈÝÒ׵ġ£
ÎÄÕÂÆÀÂÛ

¹²ÓÐ 3 ÌõÆÀÂÛ

  1. love35459 ÓÚ 2009-11-01 17:55:31·¢±í:

    ѧϰÁË
    лл

  2. 309809117 ÓÚ 2009-08-12 00:28:10·¢±í:

    GOOD!

  3. AOACGO ÓÚ 2009-08-11 09:53:28·¢±í:

    OH!