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

selinuxÈëÃŽ̳Ì

·¢²¼Ê±¼ä:2006-09-18 20:41:57À´Ô´:ºìÁª×÷Õß:Service
Getting Started with SE Linux HOWTO: the new SE Linux

£¨ÒëÕß×¢£º±¾ÎĵÄ×îԭʼ°æ±¾Îª2004Äê3ÔÂËùд£¬´Ë·ÝHOWTOÊÇ×÷ÕßÔÚ½ñÄê2Ô¸ù¾Ý×îеÄSE LinuxËù×÷µÄÐ޸ĺóµÄ°æ±¾¡£ÐµÄSE LinuxÓëÒÔǰµÄÓбȽϴóµÄ±ä»¯£¬¶øÇÒÕâÏî¼¼Êõ±¾ÉíÒ²ÕýÔÚ·ÉËٵķ¢Õ¹£¬²¢Î´×îºó³ÉÊì¡£ÔĶÁ±¾ÎÄÊÇÐèÒª¶ÔLinux±¾ÉíÓÐÒ»¶¨Éî¶ÈµÄÁ˽â×÷Ϊ»ù´¡µÄ¡£±¾ÎIJ¢²»ÊÇLinuxµÄ³õ¼¶½Ì³Ì£¬µ«È´ÊÇSE Linux¼¼ÊõµÄ³õ¼¶½Ì³Ì¡££©

Ô­Öø£ºFaye Coker, March 2004. faye@lurking-grue.org

ÖÐÎÄÒëÕߣº×ÞÁ¢Î¡, 2006Äê7ÔÂ

mini.jerry@gmail.com;

ÖØÒªµÄÌáʾ£¡×¢Ò⣡

ÎÒÕýÔÚ¸ù¾Ý×îеÄSE LinuxÀ´¸ù±¾µÄÉý¼¶Õâ·ÝÎĵµ¡£ÎÒÓÃÁ˺ܳ¤Ê±¼äÀ´×öÕâ¼þÊÂÇ飬²»¹ý¿´À´ÎÒºÃÏñÓÀԶûÓÐ×ã¹»µÄʱ¼ä×÷ÍêËü¡£ÎÒÏÖÔÚÕýÔÚ¼ÌÐø×ö£¬ÇëÏàÐÅÎÒ£¡

Faye Coker, Feb 04, 2006

£¨ÒëÕß×¢£º±¾È˼¼Êõ³öÉí£¬Ó¢ÓïʵÔڱȽϲ·­ÒëÈçÓв»µ±Ö®´¦£¬¾´ÇëÖ¸Õý£¡£©

Õâ·ÝÎĵµÒѾ­¸ù¾Ý×îеÄSE Linux×öÁ˸ü¸Ä¡£¾ÉµÄ"Getting Started with SE Linux HOWTO"µÄÄÚÈݽ«±£ÁôÔÚ´Ë·ÝÎĵµÀ²»¹ý¾ø´ó¶àÊýµÄÄÚÈÝÊǸù¾Ý×îеÄSE LinuxµÄÌØµã×÷ÁËÐ޸ġ£ÐµÄSE LinuxÊÇ»ùÓÚ2.6.*Äں˵쬵«ÊÇÈÔȻ֧³Ö2.4.*µÄÄںˡ£Õâ·ÝÎĵµµÄ´ó²¿·ÖÄÚÈÝÊÇÔ­À´µÄ£¬ÎÒÔÚÐèÒªÐ޸ĵĵط½×öÁ˵÷Õû¡£

Õâ·ÝÎĵµÊÇÃÀ¹ú¹ú¼Ò°²È«¾ÖµÄ°²È«¼ÓÇ¿µÄLinux£¨NSA SE Linux£©µÄ¸ÅÊöÐÔµÄ˵Ã÷¡£ÎÒÃÇÖ÷ÒªµÄ»·¾³ÊÇ»ùÓÚDebian LinuxµÄ£¬¶øÇҴ󲿷ֵÄÈí¼þ°üµÄ²Ù×÷ÃüÁîʵÀý¶¼ÊÇ»ùÓÚDebianµÄ¡£Õâ·ÝÎĵµÖ÷ÒªÊÇÕë¶ÔÄÇЩÏëÒª»ù´¡Á˽âSE LinuxµÄÈË£¬ËùÒÔÕâÀïûÓжÔSE Linux±È½Ï½ø½éµÄ½éÉÜ¡£Äã¿ÉÒÔÔÚ¸½Â¼µÄ×ÊÔ´²¿·ÖÕÒµ½ÆäËü½éÉÜSE LinuxµÄ×ÊÁÏ¡£

Õâ·ÝÎĵµÒѾ­±»Ivan Pesin·­Òë³ÉÁ˶íÎÄ¡£Äã¿ÉÒÔÔÚhttp://gazette.linux.ru.net/rus/articles/intro_selinux.htmlÕÒµ½¶íÎĵİ汾¡£Ð»Ð»Ivan×öÁËÕâЩ¡£

Ŀ¼

1£® ½éÉÜ

1.1£® »¶Ó­·´À¡£¡

1.2£® ×¢Ò⣡

1.3£® ×îеÄSE LinuxµÄÌØÉ«

1.4£® FedoraÓû§µÄ²ßÂÔ£¨policy£©Ô´´úÂëĿ¼½éÉÜ

2£® ¸ÅÀÀ

2.1£® ΪʲôҪʹÓÃSE Linux£¿

2.2£® ÊõÓïµÄʹÓÃ

2.2.1£® Éí·Ý£¨identity£©

2.2.2£® Óò£¨domain£©

2.2.3£® ÀàÐÍ£¨type£©

2.2.4£® ½ÇÉ«£¨role£©

2.2.5£® °²È«ÉÏÏÂÎÄ£¨security context£©

2.2.6£® ת»»£¨transition£©

2.2.7£® ²ßÂÔ£¨policy£©

3£®°²×°

3.1. »ùÓÚDebianµÄ°²×°

3.1.1. ÐÞ¸ÄDebian°ü¹ÜÀí¹¤¾ß

3.2. »ùÓÚFedoraµÄ°²×°

4£®µÇ¼ 4.1. ÔڵǼʱÌṩÓû§ÉÏÏÂÎÄ 4.2. Óà newrole -r ÃüÁî¸Ä±äÉÏÏÂÎÄ 4.3. ÔÚsysadm_tÓòÖÐÖ´ÐÐÃüÁî 4.4. Permissive ºÍ Enforcing ģʽ 4.5. ²»Í¬½ÇÉ«ÔËÐÐÃüÁîµÄ±È½Ï

5£®½¨Á¢Óû§ÕÊ»§ 5.1. ½¨Á¢Ò»¸öеÄÓû§ 5.2. ¸øÓû§·ÖÅä½ÇÉ«ºÍÉêÇë¸Ä±ä 5.3. ¸øÓû§ÉèÖÃȱʡµÄ°²È«ÉÏÏÂÎÄ 5.4. ÖØÐ±ê¼ÇÓû§Ö÷Ŀ¼

6£®Ìí¼ÓеÄÓû§Óò 6.1. ±à¼­Óû§µÄÓòÎļþ 6.2. Ôڴ˽¨Á¢Ò»¸öеIJâÊÔÓû§

7£®ÈÕÖ¾ÎļþÐÅÏ¢µÄ˵Ã÷

1. ½éÉÜ

Õâ·ÝÎĵµÊÇÒ»¸öSE LinuxµÄ¼ò½é£¬¿ÉÒÔÖ¸µ¼Ò»²¿·ÖÈ˳õ²½µÄѧ»áSE Linux¡£Ëüº­¸ÇºÍ½âÊÍÁËSE Linux µÄ¸÷·½ÃæµÄÊõÓï,°²×°ºÍÌí¼ÓÓû§²¢ÇÒº­¸ÇÁËһС²¿·Ö±ðµÄ֪ʶ¡£Ò»¸ö¸ü¸ß¼¶µÄ°ïÖúÎĵµ½«»áÔÚ²»¾Ã·¢²¼£¨ÒëÕß×¢£ºÕýÔÚ·­ÒëÖУ©, °üº¬ÁËÈçºÎ±à¼­²ßÂÔµÈÄÚÈÝ¡£ (which causes a little too much information overload with users new to SE Linux and is not included here).

1.1. »¶Ó­·´À¡£¡

ÎÒÃÇ»¶Ó­¶ÔÕâ·ÝÎĵµµÄ·´À¡ÐÅÏ¢£¬Çë·¢Óʼþ¸øfaye@lurking-grue.org £¨ÖÐÎĵľ͸øÎÒ°É£¡£»£©mini.jerry@gmail.com£©

1.2. ×¢Ò⣡

Õâ·ÝÎĵµÖ»ÊÇÒ»·ÝÖ¸µ¼¡£ÎÒÇ¿ÁҵĽ¨ÒéÄãÔÚʵ¼Ê¹¤×÷µÄ»úÆ÷ÉÏÓ¦ÓÃ֮ǰÏÈÕÒһ̨ÊÔÑé»úÆ÷À´×öÁ·Ï° ¡£

1.3. ×îеÄSE LinuxµÄÌØµã

×îеÄSE LinuxÓÐһЩеÄÌØµã£¬ÏÂÃæÏȽéÉÜһϣº

/selinux Îļþϵͳ ¼ÓÈëÁËÒ»¸ö/selinux Îļþϵͳ. Òò´ËÓÐЩ°²×°³ÌÐòÐèÒªÄã±à¼­/etc/fstab Îļþ¡£ /selinuxÎļþϵͳºÍ /proc ÎļþϵͳÀàËÆ£¬¶¼ÊÇÐéÄâµÄÎļþϵͳ¡£Äã¿ÉÒÔÓÃls -l /selinux ÃüÁîÀ´ÏÔʾ¡£

total 0

-rw-rw-rw- 1 root root 0 Nov 25 11:27 access

-rw-rw-rw- 1 root root 0 Nov 25 11:27 context

-rw-rw-rw- 1 root root 0 Nov 25 11:27 create

-rw------- 1 root root 0 Nov 25 14:19 enforce

-rw------- 1 root root 0 Nov 25 11:27 load

-r--r--r-- 1 root root 0 Nov 25 11:27 policyvers

-rw-rw-rw- 1 root root 0 Nov 25 11:27 relabel

-rw-rw-rw- 1 root root 0 Nov 25 11:27 user

ÔËÐÐcat ÃüÁî²é¿´ "enforce"Îļþ½«»áÏÔʾһ¸öÖµ£¬´ú±íSE Linuxµ±Ç°µÄ״̬£¬1 ´ú±í enforcing״̬, 0´ú±ípermissive ״̬¡£

ʹÓÃÁËÎļþϵͳµÄÀ©Õ¹ÊôÐÔ Ð嵀 SE LinuxʹÓÃÁËÎļþϵͳµÄÀ©Õ¹ÊôÐÔ£¨Extended attributes£©À´´æ·Å°²È«ÉÏÏÂÎÄ£¨security contexts£©¡£Äã±ØÐëÈÃÄãµÄÄÚºËÖ§³ÖÕâÖÖÀ©Õ¹ÊôÐÔÊôÐÔ¡£ À©Õ¹ÊôÐÔÊÇÒ»¸öÃû³Æ--Êý¾Ý Ôª×é £¨name-data tuple£©-- ¾Ù¸öÀý×Ó˵, security.selinux ¾ÍÊÇÒ»¸öÊôÐÔµÄÃû³Æ£¬°²È«ÉÏÏÂÎÄ£¨security context£©¾ÍÊÇÒª´æµÄÊý¾Ý¡£ µ±SE LinuxÕýÔÚÔËÐÐʱ£¬Äã¿ÉÒÔÓà ls --context filename ÃüÁîÀ´²é¿´Ò»¸öÎļþµÄ°²È«ÉÏÏÂÎÄ(ÎÒÃǽ«ÔÚºóÃæ½øÒ»²½½âÊÍÕâ¸öÃüÁî),ÎÞÂÛSE LinuxÊÇ·ñ´ò¿ª£¬Äã¶¼¿ÉÒÔÓÃgetfattr ÃüÁî²é¿´ÎļþϵͳµÄÀ©Õ¹ÊôÐÔ¡£²»¹ýÄãÒªÏÈ×°Ö§³Ö attr µÄÈí¼þ°ü²¢ÇÒͨ¹ý getfattrÃüÁîµÄmanpageѧ»áʹÓÃËü¡£Õâ¸öÃüÁîµÄÔËÐз½·¨ÊÇ£º

faye@kaos:~$ getfattr -m . -d /etc/passwd

getfattr: Removing leading '/' from absolute path names

# file: etc/passwd

security.selinux="system_ubject_r:etc_t\000"

ÄãËù²é¿´µÄÎļþµÄ security.selinux ÊôÐÔÖд¢´æÁË´ËÎļþµÄ°²È«ÉÏÏÂÎÄ, ËùÒÔÉÏÃæÀý×ÓÖеÄÉÏÏÂÎľÍÊÇ system_ubject_r:etc_t ¡£ËùÓÐÔËÐÐÁËSE LinuxµÄext2/3ÎļþϵͳÉ϶¼ÓÐ security.selinux Õâ¸öÊôÐÔ(Õâ¸öÐÂÌØÐԵĹؼü). Èç¹ûÄãÒýµ¼ÁËÒ»¸öûÓÐ SE Linux µÄÄÚºË, Ä㽫ÈÔÈ»¿´µ½Õâ¸öÀ©Õ¹ÊôÐÔ. µ±ÄãÓÃmake relabel ²Ù×÷ÉèÖÃÁËÎļþµÄ°²È«ÉÏÏÂÎÄÆÚ¼ä£¬À©Õ¹ÊôÐԾͱ»setfiles ÉèÖÃÁË¡£

´Óinit¼ÓÔØSE Linux²ßÂÔ ´ò¿ªÁËSE LinuxµÄϵͳÔÚÒýµ¼Ê±£¬init½ø³Ì¼ÈÒª¹ÒÔØ /selinux Îļþϵͳ,²¢ÔÚÄÇÖ®ºóÔØÈëSE LinuxµÄ²ßÂÔ¡£

°²È«ID£¨SIDs£© ºÍ ¸¸½ø³Ì°²È«ID£¨PSIDs£© ²»ÔÙʹÓà SIDs (°²È«ID) ÔÚ¾ÉµÄ SE Linux ÊÇÓû§½ø³ÌµÄÄں˽ӿÚ. PSIDs (¸¸½ø³Ì°²È«ID SIDs) ÊÇÄÚºËÓ³É䣨ÉèÖã©´ÅÅÌÉϵÄÎļþµÄÉÏÏÂÎĵĸù¾Ý£¨ÒëÕß×¢£ºÕâÀïµÄ¸ÅÄî¿ÉÄܲ»ÊǺÜÇåÎú£¬×ܵÄÀ´Ëµ¾ÍÊÇSIDºÍPSIDÔھɵÄSE LinuxÖÐÆð×űê¼Ç°²È«ÉÏÏÂÎĵÄ×÷Óã©¡£ Çë¿´NSAµÄ Configuring the SELinux Policy »ñµÃ¸ü¶àµÄ°ïÖú¡£ÔÚеÄSE LinuxÖÐ, À©Õ¹ÊôÐԼǼÁ˰²È«ÉÏÏÂÎÄ£¬ËùÒÔSIDsºÍPSIDs Ò²¾Í²»±ØÒªÁË¡£

-Z ²ÎÊý -Z ¿ÉÒÔÌæ´ú --context ÃüÁî²ÎÊý£¬±ÈÈçls -Z ºÍ ps -Z.

Óà chcon ÃüÁîÌæ´úÁËchsidÃüÁî chsid ÃüÁîÔھɵÄSE LinuxÖÐÓÃÀ´ÉèÖÃÎļþµÄ°²È«ÉÏÏÂÎÄ¡£ÐµÄSE Linux ÖÐÓÃchcon ÃüÁîÀ´ÉèÖᣠchcon ÔھɵÄSE Linux ÖÐÒѾ­¿ÉÒÔʹÓ㬵«ÊÇÔÚеÄSE LinuxÖеÄÉèÖÃÓû§»òÀàÐÍ·½ÃæµÃµ½Á˽øÒ»²½¸ÄÉÆ¡£¿ÉÒԲ鿴manpage »ñµÃ¸ü¶àµÄÌáʾ¡£

1.4. Fedora Óû§µÄ²ßÂÔ£¨Policy£©Ô´´úÂëĿ¼½éÉÜ

ÔÚDebian ÖÐ, ²ßÂÔµÄÔ´´úÂëĿ¼ÊÇ/etc/selinux. ÔÚFedora ÖÐÊÇ/etc/security/selinux/src/policy¡£ÔÚÕâ·ÝÎĵµÖÐÎÒÊвÎÕÕ DebianµÄÔ´´úÂëĿ¼×öµÄ²Ù×÷, Èç¹ûÄãÊÇFedoraÓû§, ÇëÓà /etc/security/selinux/src/policyÌæ»»¡£

2. ×ÜÀ¿

½ÓÏÂÀ´ÊÇÓйØÔÚʲôÇé¿öÏÂÄã¸ÃʹÓÃSE LinuxºÍËüµÄ»ù±¾Ê¹Óõļò¶Ì½éÉÜ¡£ 2.2 ²¿·Ö¹æ¶¨Á˺óÃæÕ½ڽ«³£Ê¹ÓõĵÄÊõÓï¡£, ËùÒÔÇëÊìϤËûÃÇ¡£

2.1 ΪʲôʹÓÃSE Linux?

SE Linux ¿ÉÒÔΪÄãµÄϵͳÌṩ½Ï°ôµÄ°²È«·À»¤¡£ ʹÓÃÕßÄܱ»·ÖÅäÔ¤Ïȶ¨ÒåºÃµÄ½ÇÉ«£¬ÒÔ±ãËûÃDz»ÄÜ´æÈ¡Îļþ»òÕß·ÃÎÊËûÃDz»ÓµÓеijÌÐò¡£ Õâ¿É²»ÊǼòµ¥µÄ " chmod 777" ͬµÈÎï²Ù×÷¡£ ÕâÔÚ½ÇÉ«, »òËûËùÔڵݲȫÉÏÏÂÎÄÒѾ­ÏÞÖÆ½Ó´¥µÄÎļþºÍÆäËûµÄ×ÊÔ´µÄʹÓÃÕß¶¨ÒåÖÐÊDz»Í¬ÓÚÒ»°ãµÄ Unix Ðí¿ÉȨÏ޵쬳ýÁËÔÚÒ»ÖֱȽÏÊÜÔ¼ÊøµÄÁ÷ÐÐÖ®Íâ¡£´øÒ»¸öÓû§µÄ.rhosts ÎļþÔÚÒ»¸öÒ»°ãµÄ Unix ϵͳÉÏÉêÇë¡£ Èç¹ûËûÃÇʹËü³ÉΪÈκÎÈË¿ÉдÈë , ÄÇôÈκÎÄܵǼµÄÈ˶¼¿ÉÒÔ×÷ΣÏյIJÙ×÷¡£ÔÚ SE Linux ֮ϣ¬ÄãÄÜ¿ØÖÆÆäËüÓû§ÊÇ·ñÓÐÄÜÁ¦¸Ä±äËûÃǵÄ.rhostsÎļþ, ÒÔ¼°×èÖ¹ÆäËûµÄÈËдÈë , ¾ÍËãÓµÓÐÕßÒѾ­Ê¹Ëü³ÉΪÈκÎÈË¿ÉдÈë¡£

Ò»¸öͨ³£µÄÒÉÎÊÊÇ SE Linux µÄȨÏÞÉèÖÃÈçºÎÓë±ê×¼µÄ Unix µÄȨÏÞÉèÖù²´æ¡£µ±Äã×öÌØ¶¨µÄ²Ù×÷µÄʱºò£¬ Unix ȨÏÞÊ×Ïȱ»¼ì²é¡£ Èç¹ûËûÃÇÔÊÐíÄãµÄ²Ù×÷ , ÄÇôȻºó£¬ SE Linux ½«»á¼ì²é²¢ÇÒÔÊÐí»ò¾Ü¾øÊ¹ÓÃÕßµÄʹÓᣠµ«ÊÇÈç¹û Unix Ðí¿É²»ÈÃÄã×öijÊÂ,ÔÚÄÇÀïµÄÔËÐеIJÙ×÷±»½ûÖ¹ºÍ SE Linux ¼ì²éû¹ØÏµ¡£

ÁíÍâµÄÒ»¸öÀý×ÓÊÇ£¬Èç¹ûÓÐÒ»¸öÉèÖÃÁËSUIDµÄ¿ÉÖ´ÐÐÎļþ£¬Èç/usr/bin/passwd Ëû¿ÉÒÔÔËÐÐÃüÁîchmod 666 /etc/shadow£¬SE Linux »á×èÖ¹ÈκÎÈË·Ç·¨µÄÕâÑùÉèÖÃÎļþ¡£

2.2 ÊõÓï

½ÓÏÂÀ´µÄÊõÓォÔÚ±¾Îĵ±Öо­³£³öÏÖ, Ò²ÊÇÀ´×ÔSE LinuxµÄ»ù±¾¸ÅÄî. It is somewhat tricky to define one word without including the other terms so I realise my definitions include things that need defining£¨ÒëÕß×¢£ºÕâ¾äʵÔÚ²»¸ÒÂÒÒ룬sorry¡£²»¹ý²»µ¢Îóѧϰ£»-£©£©

2.2.1 £¨Éí·Ý£©identity

ÔÚ SE Linux ÖУ¬Éí·ÝµÄ¸ÅÄͬÓÚ´«Í³µÄUnix uid (user id). ËüÃÇ¿ÉÒÔ¹²´æÓÚÒ»¸öϵͳ, µ«È´ÊÇÊ®·Ö²»Í¬µÄ¸ÅÄî¡£ÔÚSE LinuxÖеÄÉí·ÝÊǰ²È«ÉÏÏÂÎĵÄÒ»²¿·Ö£¬Ëü»áÓ°ÏìÄĸöÓò¿ÉÒÔ½øÈë,Ò²¾ÍÊDZ¾ÖÊÉϵĿÉÒÔ±»Ö´ÐС£Ò»¸öSE Linux µÄÉí·Ý£¨identity£©»á¸ú±ê×¼µÄUnixµÇ¼ÃûÓкÜÏàËÆµÄÎı¾±íʾ (´ó²¿·ÖÇé¿öÏÂËüÃÇÊÇÕâÑù), ÎÞÂÛÈçºÎ£¬Á˽âËüÃÇÊÇÁ½¸öÍêÈ«²»Í¬µÄ¸ÅÄîÊǺÜÖØÒªµÄ¡£ ÔËÐÐsu ÃüÁî²»»á¸Ä±äSE LinuxÖеÄÉí·Ý£¨identity£©¡££¨ÒëÕß×¢£ºÎÒÔÚºìñϵͳÖÐ×öµÄʵÑéÈ´²»ÊÇÕâÑù£¬²»¹ýÕâÎÞËùν£¬¿ÉÄܺìñϵͳµÄ²ßÂÔÉèÖò»Í¬£¬ÎÒĿǰ»¹Ã»À´µÃ¼°Ñо¿¾ßÌåÊÇʲôÎÊÌ⣬ֻÊDz²⡣£©

¾ÙÀý: Ò»¸öÎÞÌØÈ¨Óû§ faye ÔËÐÐ id ÃüÁî (ÔÚÆô¶¯SE LinuxµÄÇé¿öÏÂ) ¿ÉÒÔ¿´µ½Óû§µÄ°²È«ÉÏÏÂÎÄ£º

context=faye:user_r:user_t

°²È«ÉÏÏÂÎÄÖеÄÉí·Ý²¿·Ö¾ÍÊÇ "faye"¡£ ÏÖÔÚ, Èç¹û faye suÇл»³É root ÔÙÔËÐÐid, Ëû½«·¢ÏÖ°²È«ÉÏÏÂÎÄÈÔÈ»ÊÇ£º

context=faye:user_r:user_t

Éí·Ý±£³ÖÏàͬ, ¸úûÇл»µ½rootʱһÑù¡£, ²»¹ÜÔõÑù£¬Èç¹ûfaye Éí·Ý±»ÔÊÐí½øÈësysadm_r ½ÇÉ«²¢×ª»»³ÉÁËsysadm_r (ÕâÀï¿ÉÒÔʹÓÃnewrole -r ÃüÁî),ÔÙÔËÐÐid ÃüÁî,Ëû½«¿´µ½£º

context=faye:sysadm_r:sysadm_t

Éí·Ý×ֶα£³ÖÒ»Ñùµ«ÊǽÇÉ«ºÍÓò(µÚ¶þºÍµÚÈý×Ö¶Î)µÄ×Ö¶ÎÒѾ­±äÁË¡£ÕâÑù±£³ÖÉí·ÝµÄ·½Ê½ÊÇÓû§Ö°ÔðËù±ØÐèµÄ¡£Éí·Ý½«Ó°Ïìϵͳ¾ö¶¨Äĸö½ÇÉ«ºÍÓò¿ÉÒÔ±»Ê²Ã´Éí·ÝËùʹÓã¬Õ⽫¶Ôϵͳ°²È«ÆÚ¾ö¶¨ÐÔµÄ×÷Óá£

2.2.2 Óò

ËùÓнø³Ì¶¼ÔÚÓòÖÐÔËÐС£ÓòÖ±½Ó¾ö¶¨Á˽ø³ÌµÄ·ÃÎÊ¡£ Óò»ù±¾ÉÏÊÇÒ»¸ö½ø³ÌÔÊÐí×öµÄ²Ù×÷µÄÁбí, »òÕß˵Ëü¾ö¶¨ÁËÒ»¸ö½ø³Ì¿ÉÒÔ¶ÔÄÄЩÀàÐͽøÐвÙ×÷¡£Óò¾ÍºÃÏñÒ»¸ö±ê×¼UNIXµÄuidµÄ¸ÅÄî¡£ ¼ÙÉèÒ»¸öÊôÓÚrootÓû§µÄ¿ÉÖ´ÐгÌÐò±»ÉèÖÃÁËsetuid¡£ÔÚÕâ¸öϵͳÉϵÄÈκÎÓû§£¬Ö»Òª¿ÉÒÔÖ´ÐÐÕâ¸ö³ÌÐò£¬Ëü¾ÍÓпÉÄÜ»ñµÃrootµÄȨÏÞ¡£ÕâÊÇÒ»¸öºÜ´óµÄ°²È«Â©¶´¡£ ÔÙÓÐSE LinuxµÄϵͳÉÏ, Èç¹ûÒ»¸öÕýÔÚÖ´ÐеĽø³ÌÏëҪת»»½øÈëÌØÈ¨ÓòÖ´ÐÐʱ,Èç¹ûÕâ¸ö½ø³ÌµÄ½ÇÉ«±»ÉèÖóɲ»ÔÊÐí½øÈëÌØÈ¨ÓëµÄ»°, Õâ¸ö½ø³Ì¾Í²»ÄÜÖ´ÐС£

³£¼ûµÄÀý×ÓÊÇsysadm_tÊÇϵͳ¹ÜÀíÓò, user_t ÊÇÎÞÌØÈ¨Óû§Óò¡£ InitÔËÐÐÔÚinit_t Óò, named ÔËÐÐÔÚ named_t Óò¡£

2.2.3 ÀàÐÍ

ÀàÐÍ·ÖÅä¸øÒ»¸ö¶ÔÏó²¢¾ö¶¨Ë­¿ÉÒÔ·ÃÎÊÕâ¸ö¶ÔÏó¡£ ËüµÄ¶¨ÒåºÍÓò»ù±¾Ïàͬ, ²»Í¬¾ÍÊÇÓòÊǶԽø³ÌµÄÓ¦ÓöøÀàÐÍÊÇ·ÖÅä¸øÄ¿Â¼£¬Îļþ£¬ºÍÌ×½Ó×ֵġ£

2.2.4 ½ÇÉ«

½ÇÉ«¾ö¶¨ÁËÄÇЩÓò¿ÉÒÔʹÓᣠÓйØÄÄЩÓë¿ÉÒÔ±»ÄÄЩ½ÇɫʹÓÿÉÒÔÔ¤Ïȶ¨ÒåÔÚ²ßÂÔµÄÅäÖÃÎļþÀï¡£Èç¹ûÒ»¸ö²ßÂÔÊý¾Ý¿âÖж¨ÒåÁËÒ»¸ö½ÇÉ«²»¿ÉÒÔʹÓÃÒ»¸öÓò, Ëü½«±»¾Ü¾ø¡£

Àý×Ó: Èç¹ûÔÊÐíÒ»¸öÊôÓÚ user_t Óò (ÎÞÌØÈ¨Óû§Óò) µÄÓû§Ö´ÐÐpasswd ÃüÁî, ÄÇô±ØÐèÔÚÏà¹ØµÄ²ßÂÔÅäÖÃÎļþÖнøÐÐÈçÏÂÉèÖÃ:

role user_r types user_passwd_t

ÕâÑùÉèÖÃÁËÒ»¸öÊôÓÚuser_r½ÇÉ«µÄÓû§ÔÊÐí½øÈëuser_passwd_tÓò¡£Ò²¾ÍÊÇ˵Ëû¿ÉÒÔÖ´ÐÐ passwd ÃüÁî¡£

2.2.5 °²È«ÉÏÏÂÎÄ

°²È«ÉÏÏÂÎİüÀ¨ÁËËùÓÐÊÂÇéµÄÊôÐÔµÄÃèÊö£¬°üÀ¨Îļþ, Ŀ¼, ½ø³Ì, TCP sockets ºÎÒÔÉÏËùÓеĶ«Î÷¡£°²È«ÉÏÏÂÎİüÀ¨ÁËÉí·Ý,½ÇÉ«ºÍÓò»òÕßÀàÐÍ¡£ÔÚSE LinuxϵͳÉÏÄã¿ÉÒÔÓÃid ÃüÁîÀ´²é¿´Ä㵱ǰÓû§µÄ°²È«ÉÏÏÂÎÄ¡£

Ò»¼þºÜÖØÒªµÄÊÂÇéÊÇÎÒÃÇÐèÒªÃ÷°×µÄÊÇÓòºÍÀàÐÍÊÇÓÐÇø±ðµÄ, Èç¹û²»Ã÷°×ÕâÒ»µãµÄ»°£¬½«Ê¹Äã²úÉúÀ§»ó¡£

ÓòÊÇΪ½ø³ÌÉèÖõġ£ µ±Äã²é¿´Ò»¸ö½ø³ÌµÄ°²È«ÉÏÏÂÎĵÄʱºò (¾Ù¸öÀý×Ó,Äã¿ÉÒԲ鿴ºóÃæ"ת»»"ÖеĽâÊÍ), ×îºóÒ»¸ö×ֶεÄÉèÖã¬ÀýÈçuser_passwd_t ¾ÍÊÇÕâ¸ö½ø³ÌµÄÓò(Èç¹ûÄãÔËÐÐÁËpasswd ÃüÁî)¡£

Ò»¸öÏñÎļþ£¬Ä¿Â¼£¬Ì×½Ó×ÖµÈÕâÑùµÄ¶ÔÏó»áÓÐÒ»¸öÀàÐÍ¡£ µ±ÄãÔËÐÐÁË ls --context ÃüÁîʱ, ×îºóÒ»¸ö×ֶξÍÊÇÀàÐ͵ÄÉèÖÃ, ±ÈÈç user_home_t Õâ¸öÀàÐ;ÍÊÇÒ»¸öÓÐuser_r ½ÇÉ«µÄÓû§ÔÚËûµÄÖ÷Ŀ¼Ï½¨Á¢µÄÎļþµÄÀàÐÍ¡£

×ܵÄÀ´Ëµ£¬ÓòÊÇ·ÖÅ䏸½ø³ÌµÄ£¬¶øÀàÐÍÊÇ·ÖÅ䏸³ý½ø³ÌÍâÆäËû¶ÔÏóµÄ¡£ÄÇôÔÚÕâÀï»áÓÐÒ»¸öССµÄ»ìÏý£¬¾ÍÊÇ/procÎļþϵͳ¡£ÎÒÃÇÖªµÀ/procÎļþϵͳÊÇÐéÄâµÄÎļþϵͳ¡£²¢ÇÒÀïÃæµÄÒÔÊý×ÖÃüÃûµÄĿ¼¾ÍÊÇ´ú±íÁ˸÷¸ö½ø³Ì£¬Êý×Ö¾ÍÊÇËûÃǵÄpid¡£ÄÇôÕâÀïÈç¹ûÎÒÃÇÓà ls -context ÏÔʾ/procĿ¼ÏµÄ1Õâ¸öĿ¼£¬Ëü»áÏÔʾ£º

dr-xr-xr-x root root system_u:system_r:init_t 1

ÄÇôÕâ¸ö°²È«ÉÏÏÂÎÄÖÐÏÔʾµÄÀàÐÍΪinit_t¡£ÔÚÕâÀïµÄº¬Òå¾ÍÊÇpidΪ1µÄÕâ¸ö½ø³ÌµÄÓòÒ²¾ÍÊÇinit_t ¡££¨ÒëÕß×¢£ºÕâÑùµÄÇø·Ö²»ÖªµÀÄܲ»ÄÜ˵Çå³þ£¿£©

ÁíÒ»¸öÐèҪ˵Ã÷µÄÊÇ chsid ÃüÁî(¸Ä±ä°²È« id) ºÍ chcon ÃüÁî(¸Ä±ä°²È«ÉÏÏÂÎÄ) ²»ÄÜÔÚ /proc ÎļþϵͳÉÏʹÓ㬾ÍÊÇ˵ /proc Îļþϵͳ²»Ö§³ÖÕâÖÖ±ê¼ÇµÄ¸Ä±ä¡£

ÎļþµÄ°²È«ÉÏÏÂÎÄÊÇ»á¸ù¾Ý´´½¨Õâ¸öÎļþµÄ½ø³ÌµÄÓò¶ø¸Ä±äµÄ¡£Ä¬ÈÏÇé¿öÏ£¬Ò»¸öÎļþ»òÕßĿ¼µÄ°²È«ÉÏÏÂÎÄÊÇ´ÓËüÃǸ¸Ä¿Â¼ÄÇÀï¼Ì³ÐÀ´µÄ,µ±È»ÎÒÃÇ¿ÉÒÔͨ¹ý²ßÂԵĸıäÀ´¸Ä±äÕâÖÖÉèÖá£

Àý×Ó: fayeÓû§ÔÚËûµÄÖ÷Ŀ¼Ï½¨Á¢ÁËÒ»¸ö½Ð×ötest µÄÎļþ¡£ ÔËÐÐ ls --context test ¿ÉÒÔ¿´µ½ £º

-rw-r--r-- faye faye fayebject_r:user_home_t test

ËûÓÖÔÚ /tmp Ͻ¨Á¢ÁËÒ»¸ö½Ð×ötmptestµÄÎļþ£¬ÔÙ´ÎÔËÐÐls --context /tmp/tmptest Õâ´ÎÏÔʾµÄÊÇ£º

-rw-r--r-- faye faye fayebject_r:user_tmp_t /tmp/tmptest

µÚÒ»¸öÀý×Ó£¬°²È«ÉÏÏÂÎÄÖеÄÀàÐÍÊÇ "user_home_t" ÕâÊÇÒ»¸öuser_r ½ÇÉ«µÄÎÞÌØÈ¨Óû§Ä¬ÈϵÄÖ÷Ŀ¼ÉèÖᣠÔÚµÚ¶þ´ÎÔËÐÐÁËls --context ÃüÁîºó, Äã¿ÉÒÔ·¢ÏÖÀàÐͱä³ÉÁË user_tmp_t £¬ÕâÊÇÓÉÓÚÖ´Ðн¨Á¢ÎļþÃüÁîµÄ½ø³ÌµÄÓòÊÇuser_t, ²¢ÇÒÔÚ/tmpϵÄÎļþÀàÐÍÒª¼Ì³Ð tmp_t ÀàÐÍ¡£

2.2.6 ת»»

ÊÇ·ñ·¢Éúת»»£¬Ö÷ÒªÒª¸ù¾Ý°²È«ÉÏÏÂÎÄÀ´Åжϡ£ÓÐÁ½ÖÖÖ÷ÒªµÄת»»¡£ µÚÒ»ÖÖ, µ±ÄãÖ´ÐÐÁËÒ»¸ö±»ÏÞ¶¨ÁËÀàÐ͵ijÌÐòʱ»á·¢Éú½ø³ÌÓòµÄת»»¡£µÚ¶þÖÖ, ÔÚÌØÊâµÄĿ¼Ï´´½¨Îļþʱ»á·¢ÉúÎļþÀàÐ͵Äת»»¡£

Àý×Ó: ¶ÔÓÚµÚ¶þÖÖת»» (ÎļþÀàÐ͵Äת»»), ²ÎÕÕ¡°°²È«ÉÏÏÂÎÄ¡±²¿·ÖÖеÄÀý×Ó¡£µ±ÔËÐÐÁË ls --context ÃüÁîÖ®ºóÄã»á¿´µ½Îļþ±»±ê¼Ç³ÉÁËʲôÑùµÄÀàÐÍ(Ò²¾ÍÊÇÉÏÃæÀý×ÓÖÐµÄ user_home_t ºÍuser_tmp_t)¡£ÎÒÃÇÒ²¿ÉÒÔ¿´µ½µ±ÔÚ/tmpϽ¨Á¢Ò»¸öÎļþʱ£¬ÐµÄÎļþµÄÀàÐÍΪuser_tmp_t¡£

¶ÔÓÚ½ø³ÌÓòµÄת»», Çë²Î¿¼ÒÔϵÄÀý×Ó¡£ ÒÔÎÞÌØÈ¨Óû§µÄÉí·ÝÔËÐÐssh, »òÕß˵ÎÒÃǾÍÊÇÔËÐÐÁËÒ»¸ö user_t ÓòµÄ½ø³Ì (Äã¿ÉÒÔÓÃidÃüÁî²é¿´ÄãµÄ°²È«ÉÏÏÂÎÄ)¡£ÔËÐÐ ps ax --context ²é¿´Ë­ÔÚÔËÐÐ ssh¡£ ¼ÙÉèÊÇÓû§ faye, Ëû½«¿´µ½£º

faye:user_r:user_ssh_t

ÕâÊÇÏÔʾµÄÒ»²¿·Ö¡£ÓÉÓÚ¿ÉÖ´ÐгÌÐòµÄÀàÐÍÊÇ ssh_exec_t ²¢ÇÒÎÒÃÇÓû§µÄ½ÇÉ« user_r ÔÊÐí·ÃÎÊuser_ssh_t Óò£¬ËùÒÔssh½ø³Ì¾ÍÔËÐÐÔÚÁË user_ssh_tÓòÖС£

2.2.7 ²ßÂÔ

²ßÂÔ¾ÍÊÇ¿ÉÒÔÉèÖõĹæÔò£¬¾ö¶¨ÁËÀýÈçÒ»¸ö½ÇÉ«µÄÓû§¿ÉÒÔ·ÃÎÊʲô; Äĸö½ÇÉ«¿ÉÒÔ½øÈëÄĸöÓò and ÄĸöÓò¿ÉÒÔ·ÃÎÊÄĸöÀàÐ͵ÈÕâÑùµÄÎÊÌâ¡£ Äã¿ÉÒÔ¸ù¾ÝÄãÏëÒª½¨Á¢µÄϵͳµÄÌØµãÀ´¾ö¶¨ÉèÖÃʲôÑùµÄ²ßÂÔ¡£

3. °²×°

½ÓÏÂÀ´µÄÒ»ÕÂÎÒÃǽ²½âÊÍÔõÑù»ñµÃÈí¼þ°üÒÔ¼°°²×°, ºÍÔõÑù»ñµÃеÄSE LinuxµÄÈí¼þ°üÒÔ¼°°²×°¡£ ÒòΪÎÒÔËÐеÄÊÇDebian£¬ËùÒÔÎÒÑÝʾµÄ°²×°¹ý³Ìʽ»ùÓÚËüµÄ¡£ ÎÒÃǼٶ¨ÄãÖªµÀ¸ÃÔõÑùÔÚÄãËùÓõķ¢²¼°æÉϰ²×°Èí¼þ, ±àÒëÄںˣ¬²¢ÇÒ¸øÄں˴ò²¹¶¡¡£

Èç¹ûÄãÊǴӾɵÄSE LinuxÉÏÉý¼¶µÄ, ²¢ÇÒÔËÐÐÁË SE Linux kernel, Çë½øÈëpermissive ģʽ (Óà avc_toggle ÃüÁî) ¼ÌÐøÔËÐÐÖ¸Áî¡£

3.1»ùÓÚDebianµÄ°²×°

¶ÔÓÚDebian µÄ¿ª·¢°æ£¨²»Îȶ¨°æ£©:

½«ÏÂÃæµÄÎÄ×Öдµ½ÄãµÄ /etc/apt/sources.list Îļþ:

deb http://www.coker.com.au/newselinux/ ./

Õâ¸ö°üÊÇÓÉ Russell Cokerά»¤µÄ.

ÔÚдÕâÆªÎĵµµÄʱºò (2003Äê11ÔÂÄ©) »¹Ã»ÓпÉÒÔDebianÉÏʹÓõÄÎȶ¨°æµÄеÄSE Linux °²×°°ü¡£ ¿ª·¢°æµÄ .debÎļþ¿ÉÒÔ´ÓÉÏÃæµÄÍøÕ¾»ñµÃ¡£ÇëÈ·±£»ñµÃÁË×îа汾µÄ°ü¡£ ÒòΪ°üµÄÃû×ÖÒ»Ö±¶¼Ôڱ䣬ËùÒÔÎÒûÓÐÁгö, ²»¹ýËûÃÇÁгöÁËÐèÒªµÄËùÓаüµÄÃû×Ö¡£

ÏÂÃæÎÒÃÇÁгöÁ˶ÔÓÚÐ嵀 SE Linux£¬ÄÄЩ±¨ÐèÒªÔÚDebianÉϰ²×°¡£ÔÚ°²×°Ö®Ç°Äã²»ÐèÒªÒýµ¼SE Linux kernel, ËùÒÔÄã¿ÉÒÔ°²×°ËüÃÇÁË:

• libselinux1 °üº¬ÁËРSE LinuxµÄ¹²Ïí¿â¡£

• selinux-policy-default °üº¬ÁË·¶Àý²ßÂÔÎļþ£¬Õâ¸ö²ßÂÔÎļþÓ¦Óõ½Á˺ܶàÒ»°ãÓ¦ÓóÌÐòÀýÈçpostfix, sendmail, X µÈµÈ¡£

• checkpolicy °üº¬Á˰²È«²ßÂԵıàÒëÆ÷¡£

• policycoreutils °üº¬Á˺ËÐŤ¾ßÈç setfiles, load_policy, newrole µÈµÈ¡£

• selinux-utils °üº¬ÁËÀýÈç²éѯ²ßÂԵIJÙ×÷¹¤¾ß¡£

• selinux-doc °üÀ¨ÁËһЩ°ïÖúÎĵµ ¡£

DebianϵͳËùÐèµÄ¸½¼ÓÈí¼þ°üÁÐ±í£º

• kernel-patch-2.4-lsm Ò»¸öÖ§³ÖLSM ºÍSE LinuxµÄÄں˲¹¶¡¡£

• coreutils °üº¬Á˸Ľø°æµÄÃüÁîÀýÈçcp, mv, ls ¡£

• procps °üº¬Á˸Ľø°æµÄ ps and topÃüÁî¡£

• sysvinit ÊÇÒ»¸öÔÚÒýµ¼Ê±¼ÓÔØ²ßÂԵIJ¹¶¡¡£

• dpkg ÎÒÃÇÐèÒªÒ»¸ö¸Ä½ø°æµÄdpkg£¬°²×°Ö®ºó¿ÉÒÔ±£Ö¤¶ÔÎļþµÄÕýÈ·±ê¼Ç¡£

• libpam-modules ÒòΪһЩ°²È«Ô­Òò¡£

• logrotate Ò»¸ö¸Ä½ø°æµÄ logrotate ¿ÉÒÔ±£ÁôÒ»¸öн¨ÎļþµÄ SE Linux °²È«ÉÏÏÂÎÄ¡£

• cron Ò»¸ö¸Ä½ø°æµÄcron£¬±£Ö¤¼Æ»®ÈÎÎñÖ´ÐеĽű¾ÔËÐÐÔÚÕýÈ·µÄÓòÄÚ¡£

3.2»ùÓÚFedoraµÄ°²×°

ÐÂSE LinuxµÄRPM°ü¿ÉÒÔÔÚÕâÀïÕÒµ½ftp://people.redhat.com/dwalsh/SELinux

ÕâЩRPM°üµÄά»¤ÕßÊÇDan Walsh.

ÎÒÔÚÎÒµÄFedora²âÊÔ»úÉϰ²×°SE Linuxʱ, ÎÒ×öÁËÕâЩ¹¤×÷£º

* ±à¼­yum.conf Îļþ°üº¬ÈçÏÂÄÚÈÝ£º

[main]

cachedir=/var/cache/yum

debuglevel=2

logfile=/var/log/yum.log

pkgpolicy=newest

distroverpkg=fedora-release

tolerant=1

exactarch=1

[development]

name=Fedora Core $releasever - Development Tree

#baseurl=http://download.fedora.redhat.com/pub/fedora/linux/core/development/i386

baseurl=http://mirror.dulug.duke.edu/pub/fedora/linux/core/development/i386

[SELinux]

name=SELinux repository

baseurl=ftp://people.redhat.com/dwalsh/SELinux/Fedora

* ÔËÐеÄÃüÁî½øÐа²×°

yum install policy checkpolicy policycoreutils policy-sources pam passwd vixie-cron

* ÔÚËùÓаü°²×°ÍêÖ®ºó

cd /etc/security/selinux/src/policy

make load

make relabel

*ÖØÆð»úÆ÷.

4. 怬

½ÓÏÂÀ´µÄÒ»²¿·ÖÃèÊöÁËϵͳµÇ¼, ¶øÇÒ½âÊÍÁ˸ü¶àµÄ¹ØÓÚÓû§°²È«ÉÏÏÂÎÄһЩÄÚÈÝ¡£ ±¾ÕµÄ×îºó²¿·ÖÌÖÂÛpermissiveģʽºÍenforcingģʽ¡£

4.1ÔڵǼʱÌṩÓû§ÉÏÏÂÎÄ

ÔÚÕâÒ»¸ö½×¶Î£¬ÄãÓ¦¸ÃÒªÖØÐÂÆô¶¯ÏµÍ³²¢µÈ´ýÄǸöµÇ¼µÄÌáʾ¡£µ±Äã°²×°ÁË selinux µÄȱʡ²ßÂÔ°üºó (FedoraÉÏÊDzßÂÔµÄÔ´´úÂë°ü), Õþ²ßÎļþµÄ°²×°Ê¹ÄãÄܹ»ÒÔÒ»¸öȱʡÓû§½ÇÉ«µÇ¼ϵͳ¡£(µ±ÎÒÃÇ»¹Ã»ÓÐûÓÐÌí¼ÓÒ»¸öÊôÓÚÎÒÃÇ×Ô¼ºµÄÓû§µÄʱºò)

ÒÔrootÉí·ÝÕý³£µÇ¼ÄãµÄϵͳ¡£ ÄãµÄ°²È«ÉÏÏÂÎÄĬÈÏÇé¿öÏÂΪ root:user_r:user_t¡£ id ÃüÁîÏÔʾµÄÀàÐͺÍÄãµÄ°²È«ÉÏÏÂÎÄÏÔʾӦ¸ÃÊÇÏàͬµÄ£¬ÈçÏÂËùʾÎÒÃÇÐèÒª¿´°²È«ÉÏÏÂÎIJ¿·Ö£¬ËùÒÔ²»±Ø¹ØÐÄÆäËü×Ö¶Î):

uid=0(root) gid=0(root) groups=0(root) context=root:user_r:user_t

ËùÒÔ°²È«ÉÏÏÂÎÄÊÇ

root:user_r:user_t

ÏÖÔÚÎÒÃǼÙÉèÄãÏÈǰÒѾ­°ÑÄã×Ô¼ºµÄÕÊ»§ÉèÖóÉÁíÍâµÄÒ»¸ö½ÇÉ«¡£Äã¿ÉÒԲο¼ µÚÎåÕÂ: ½¨Á¢Óû§ÕÊ»§.¡£¶ÔÓÚ½Çɫת±äÓÐÁ½¸ö·½·¨¡£ µÚÒ»ÊÇ , ÄãµÇ¼µÄʱºò¡£¼ÙÉèʹÓÃÕß faye ±»ÈϿɽøÈë sysadm_t Óò¡£ ʹÓÃÕß faye ÔÚ¿ØÖÆÌ¨µÇ¼¡£ ÔÚÄÇ "Your default context is faye:user_r:user_t. Do you want to choose a different one? [n]" ÕâÊÇÌáʾ, ËýÑ¡Ôñ, y ²¢°´Á˻سµ¡£ Ëý½«»á¼ûµ½ÈçÏÂÐÅÏ¢:

[1] faye:user_r:user_t

[2] faye:sysadm_r:sysadm_t

Enter number of choice:

ÔÚÕâÒ»¸öÀý×ÓÖÐ, ÄãÄܼûµ½ÄÇʹÓÃÕßÉí·Ý " faye" ÏÈǰÒѾ­±»ÔÊÐí·ÃÎÊsysadm_r ½ÇÉ«ºÍ sysadm_t Óò¡£ ÕâÀォ»á±»ÏÔʾµÄÑ¡ÏîÊÇÄÇЩÄãµÄʹÓÃÕßÉí·ÝÒѾ­±»ÔÊÐí·ÃÎʵĶÔÏó¡£ Çë×¢Ò⣬ÕâÔÚ¾ÉµÄ SE Linux ÒѾ­ÊµÏÖÁË, ¶øÇÒ½«»áÔÚÐ嵀 SE Linux(ÔÚдÕâÎĵµµÄʱºòÊDz»¿ÉÒÔµÄ) Öб»ÉèÖÃΪ¿ÉÅäÖÃÑ¡Ïî, ĬÈϵÄÉèÖÃΪ¹Ø±Õ£¨OFF£©¡£

Èç¹ûÓû§faye Ñ¡ÔñÁËÑ¡Ïî¶þ ( ±ä³É sysadm_r) È»ºóÔËÐÐidÃüÁî, Ëý½«»á¼ûµ½°²È«ÉÏÏÂÎĵÄÄÚÈÝΪ£º

context=faye:sysadm_r:sysadm_t

Òâζ×ÅËûÏÖÔÚÊÇ sysadm_r ½ÇÉ«¡£

½ÓÏÂÀ´Êǵڶþ¸ö¸Ä±äÓû§°²È«ÉÏÏÂÎĵķ½·¨¡£

4.2Óà newrole -r ÃüÁî¸Ä±äÉÏÏÂÎÄ

±ä¸üÄãµÄ°²È«ÉÏÏÂÎĵĵڶþ¸ö·½·¨½«Ê¹Óà newrole-r µÄÖ¸Áî¡£Óï·¨ÊÇ

newrole -r role

ÕâÀïµÄrole Ìæ»»ÄãÏëҪת»»³Éʲô½ÇÉ«¡£¼ÙÉèÊÇsysadm_r¡£ÄÇô¼È¿ÉÒÔÔËÐУº

newrole -r sysadm_r

Ä㽫»á±»ÒªÇóΪÄãµÄʹÓÃÕßÉí·ÝÌṩÃÜÂë, Äã¿ÉÒÔÔËÐÐidÖ¸Áî¼ì²é¡£ Èç¹ûÄãûÓÐÊÚȨ½øÈëÒ»¸öеĽÇÉ«, Ä㽫»á¼ûµ½ÕâÑùµÄÏÔʾ(¼ÙÉèʹÓÃÕßfred ³¢ÊÔÔËÐеÄÖ¸Áî)

fred:sysadm_r:sysadm_t is not a valid context

ÕâÒ»¸öÐÅÏ¢Òâζ×ÅfredÓû§²»ÄܽøÈë sysadm_r:sysadm_t ½ÇÉ«:Óò£¬ÒòΪËûûÓб»ÊÚȨ¿ÉÒÔÕâô×ö¡£

Ôڳɹ¦µØ±ä¸ü½Çɫ֮ºó, ÔËÐÐidÖ¸Áî¼ì²éÄãµÄ°²È«ÉÏÏÂÎÄ¡£

4.3ÔÚsysadm_tÓòÖÐÖ´ÐÐÃüÁî

ÄãµÄÓû§ÏÖÔÚÒѾ­ÔÚ sysadm_r ½ÇÉ«£¬ÔËÐеijÌÐòÊÇÔÚ sysadm_t Óò¡£´ËʱÎÒÃÇÐèÒª°ÑÎÒÃǵݲװ×öµÄÉÔ΢ÍêÉÆÒ»Ð©, Òò´ËÈÃÎÒÃÇÈ¥ÐéÄâµÄ¿ØÖÆÌ¨²¢ÓÃrootÓû§µÇ¼¡£ Ä㽫²»±»ÒªÇóÊÇ·ñÏëÒª¸Ä±äÉÏÏÂÎÄ¡£

ÎÒ±ØÐëÔÚÕâÀï˵Ã÷һЩÊÂÇé¡£ ÎÒÃÇʵ¼ÊÉϵ½Ä¿Ç°ÎªÖ¹Ã»ÓÐÔÚÕâ·ÝHOWTO ÖÐ˵Ã÷ÔõÑùÈÃrootÓû§ÔÊÐí·ÃÎÊ sysadm_r ½ÇÉ«£¬ËùÒÔÄãµÄ˼·¿ÉÄÜ»¹Í£ÔÚÄÇÀï,rootÓû§Ö»ÔÊÐí·ÃÎÊuser_r:user_t£¬ÕâÑùÎÒÃÇÔõô½øÐÐϵͳ¹ÜÀí? ºÃ°É£¬ÎÒÃÇÕýÔÚÔËÐеÄģʽÊÇpermissive£¬ÕâÊÇÒ»ÖÖ²¢²»ÕæÕýÇ¿ÖÆµÄÖ´Ðа²È«²ßÂÔµÄÉèÖõÄģʽ¡£ÄãÒÀ¾ÉÄÜÔÚÉÏÃæÊ¹Óà newrole-r Ö¸Áî»»³É sysadm_r ½ÇÉ«¡£ÔËÐÐnewrole Ö¸ÁîÊÇת»»µÄ·½·¨¡£Èç¹ûÄãÊÔ×Å×öÄã²»±»ÔÊÐíµÄÊÂÇé,Ä㽫¿´µ½Ò»ÆÁ½ÓÒ»ÆÁµÄ´íÎóÏÔʾÐÅÏ¢£¬Õâ²¢²»ºÃÍæ¡£

ËùÒÔ£¬×ª»»³É sysadm_r ½ÇÉ«²¢ÇÒÔËÐÐ id À´¼ì²éÄãʵ¼ÊµÄÉÏÏÂÎÄÊDz»ÊÇ sysadm_r:sysadm_t¡£

ÏÖÔÚÎÒÃÇÄÜÔÚ sysadm_r ½ÇÉ«Öеõ½Ò»Ð©ÀÖȤ¡£ µ±ÎÒÃÇÔÚµÚ 3 ½ÚÖа²×°ÁËËùÓж«Î÷µÄʱºò, µ±Ê±ÏµÍ³ÉÏËùÓеÄÎļþ¶¼±»±ê¼ÇÁËÒ»¸öÀàÐÍ£¬µ«ÊǵçÄÔȴûÓÐÔÚÔËÐÐ SE Linux ¡£ Òò´ËÈç¹ûÒ»¸öÎļþÔÚ½«³ÌÐò·ÖÀà·¢ÉúÖ®ºó½¨Á¢µÄ»°, ²¢ÇÒÔÚϵͳûÓÐÖØÐÂÆô¶¯SE LinuxµÄÄÚºË֮ǰ£¬ÄÇôÄÇÒ»¸öÎļþ½«²»ÊôÓÚÈκÎÒ»ÖÖÀàÐÍ¡£ÏëÏóһЩÎļþ¿ÉÄÜÔڹػúÆÚ¼ä±»´´½¨¡£ÕâЩÎļþ¶¼Ã»Óбê¼ÇÀàÐÍ¡£ ÓÚÊÇ, ¿¼Âǵ½ÕâÒ»¸öÇé¿ö¡£ Èç¹ûÄãɾ³ýÒ»¸öÎļþ,ÄÇôÄǸöÎļþµÄ inode ºÅ¿ÉÄܱ»ÓÃÀ´±ê¼ÇÒ»¸öеÄÎļþ£¬¶øÇÒÕâ¸öеÄÎļþ¿ÉÄÜÊÇɾ³ýµÄÄǸöÎļþµÄÀàÐÍ¡£ ÕâÊÇÒ»¸öÑÏÖØµÄÎÊÌâ¡£

¹ØÓÚ/etc/nologin Îļþ¡£ µ±shutdownÖ¸Áî±»Ö´ÐеÄʱºò£¬ÕâÒ»¸öÎļþ²úÉú¡£ Èç¹ûÕâÒ»¸öÎļþÔÚÒýµ¼µÄʱºò´æÔÚ,Ö»ÓÐroot½«»á±»ÔÊÐíµÇ¼¡£Èç¹ûÄãµÄÆô¶¯½Å±¾²»ÄÜɾ³ýÕâ¸öÎļþ£¬ ¶øÇÒ/etc/nologin ÓдíÎóµÄ±ê¼Ç, Æô¶¯½Å±¾¾Í²»ÄÜtouch it£¬ÓÚÊǾͻá²úÉúһЩСÎÊÌâ¡£Èç¹ûÄãµÄrootÉí·ÝÅäÖóÉÔڵǼ֮ºóÓÐÒ»¸ö sysadm_r µÄȱʡ½ÇÉ«, ÄÇôÄã¾ÍÄܵǼ²¢ÇÒɾ³ýÕâÒ»¸öÎļþ,ÎÊÌâ½â¾ö¡£

µ«ÊÇÈç¹ûÄãÒѾ­ÅäÖÃÄãµÄrootÉí·ÝÔڵǼ֮ºó²»Äܵõ½ sysadm_r ½ÇÉ«Ôõô°ì? ÔÚÕâÑùµÄÇé¿öµÄÏ£¬ÄãµÄrootÉí·ÝµÄÉÏÏÂÎÄ¿ÉÄÜÊÇroot:user_r:user_t¡£µ«ÊÇ user_tÓò²»ÔÊÐíÄãɾ³ýÈκÎÔÚ /etcĿ¼ÏµÄÎļþ¡£ÓÚÊÇÎÊÌâ³öÏÖÁË£¬ÄãÄÜÓÃrootÉí·ÝµÇ¼, µ«ÊÇ×ö²»ÁËsysadm_r ½ÇÉ«µÄÌØÈ¨ÔÊÐí×öµÄÈκÎÊ¡£

ÔÙ´ÎÏëÏó, ÕâÑùÒ»ÖÖÇé¿ö£¬ÄãÓÐÄã×Ô¼ºµÄÓû§Éí·Ý,ÔÙÒ»´ÎÈÃÎÒÃÇʹÓà " faye" Éí·Ý¡£ Éí·Ý faye ÅäÖóÉÒ»µÇ¼¾Í»á±ä³É sysadm_r½ÇÉ«¡£Òò´ËÉí·Ý faye ÄÜÖ´ÐÐËùÓÐµÄ sysadm_r ½ÇÉ«µÄÊÂÇ飬µ«ÊÇrootÉí·Ý (ÒÔuser_r ½ÇÉ«ÔÚ user_t ÓòÖÐÔËÐÐ) ²»ÄÜ¡£ faye Óû§¿ÉÄÜÓкܸߵÄȨÏÞ£¬µ«ÊÇfaye Éí·ÝÈ´²»ÐÐ, ÒòΪÓÉÓÚÊÂʵËü½«ÓÉÓÚ /etc/nologin ÎļþµÄ´æÔÚ¶ø²»Äܹ»µÇ¼£¬´ËÎļþ²»È÷ÇrootÓû§µÇ¼¡£

Õâ¾ÍÊÇΪʲôÕýÈ·µØ½«Îļþ·ÖÀàÊÇÖÁ¹ØÖØÒªµÄ¡£ ÈÃÎÒÃǻص½½ø³Ì±»±ê¼ÇÖ®ºóÎļþÒѾ­½¨Á¢£¬µ«ÊÇ»¹Ã»Òýµ¼SE LinuxÄں˵ÄÇé¿ö¡£ ΪÁËÐÞ¸´Õâ¸öÎÊÌâ, ÎÒÃDZØÐëÔËÐÐ

make -C /etc/selinux relabel

ÕâÒ»¸öÃüÁ»áÈ·¶¨ÔÚÄãµÄϵͳÉϵÄËùÓеÄÎļþÕýÈ·µØ±»±ê¼Ç¡£ Ö´ÐеÄËٶȺÍÄãµÄ»úÆ÷ÉÏÓжàÉÙÎļþÓйØ,Õâ¿ÉÄÜÐèÒªÒ»»á¶ù¡£ Ò»¸ö´Ö²ÚµÄ¹À¼Æ, Ëü½«»áÏñÒ»¸ö¡®find /¡¯Ö¸ÁîÒ»ÑùµÄ¾Ã¡£ ÕâÊÇΪʲôÄãÏëҪʹÓà newrole Ö¸Áî»»³É sysadm_r È»ºóÔËÐÐÖ¸ÁîÉÏÊömake command ÃüÁî----Èç¹ûÄãÔÚÒ»¸ö²»ÄÜ·ÃÎÊÆäËûÓòµÄÓòÖÐ (ÀýÈçuser_t), Ä㽫»áÊÕµ½ÊýÒÔÍò¼ÆµÄ"permission denied" Ìáʾ¡£

4.4 Permissiveģʽ ºÍ Enforcing ģʽ

Permissive ģʽÊÇÖ¸£¬ÄãµÄ SE Linux »úÆ÷ÔÚ±¾ÖÊÉϲ¢Ã»½øÈëSE Linux Ö»ÏÔʾÏà¹ØÐÅÏ¢µÄ״̬, ûÓÐÆäËüʲôÁË¡£ËùÒÔÄãÈÔÈ»¿ÉÒÔÓÃrootÓû§×öÏàͬµÄ²Ù×÷¾ÍÏñÄãÔÚÒ»²¿·Ç SE Linux »úÆ÷ÉÏÒ»Ñù¡£ EnforcingÄ£Ê½Ç¿ÖÆÊ¹ÄãµÄËùÓа²È«²ßÂÔÉúЧ¡£ ¾ÍÊÇ˵ÔÚÕâÖÖģʽÏ£¬ÄãÅäÖõÄËùÓÐSE LinuxµÄ²ßÂÔÒѾ­ÉúЧ¡£ËùÒÔ£¬Äã¿ÉÒÔÓÃPermissiveģʽÀ´¼ì²éÄãµÄ²ßÂÔÅäÖÃÊÇ·ñºÏºõÒªÇó¡£(ͨ¹ý¼ì²é dmesg ÐÅÏ¢)

ÕâÀïÐèҪǿµ÷µÄÊÇ:ÔÚÆô¶¯µ½enforcingģʽ֮ǰÇëÈ·¶¨Äã×öÁ˺ÏÊʵIJßÂÔÅäÖá£ËùÒÔÄã¿ÉÒÔÔÚPermissiveģʽÖÐÔËÐÐÒÔÏÂÀ´¼ì²é¡£ Permissiveģʽ±ê¼ÇÁËÎļþ, µ«ÊDz»Êµ¼ÊÉÏÔËÐÐÈκÎÊÂ, ³ý·ÇËùÓÐÊÂÇé¶¼±»È·ÈÏ¡£Ò»Ð©È˱àÒëÁËÒ»¸öûÓÐCONFIG_SECURITY_SELINUX_DEVELOP Ö§³ÖµÄÄںˣ¬ÄÇÒâζ×ÅÄã²»ÄÜÔËÐÐPermissiveģʽ¡£

ÔÚpermissive ģʽºÍenforcingģʽ¼äת±ä£¬ ÄãÐèÒªÔËÐÐecho "1" > /etc/selinux/enforce ÒÔ´ò¿ªenforcingģʽ¡£½«1Ìæ»»³É0ÔòÒâζ×ÅÔËÐÐÔÚpermissiveģʽ¡£ ¾ÉµÄ SE Linux ÓÃÁËÔÚÐ嵀 SE Linux ÖÐÒѾ­²»ÓÃµÄ avc_toggle Ö¸Áî¡£ ÓÃcat /etc/selinux/enforceÃüÁî¿ÉÒÔÖªµÀÄãÕýÔÚÄÄÖÖģʽÏÂÔËÐС£

Äã¿ÉÒԲ鿴 "µÚÆßÕ£ºÈÕÖ¾ÎļþÐÅÏ¢µÄ˵Ã÷"£¬ÕÒµ½ÓйØ×ª±äģʽµÄÐÅÏ¢ÌáʾµÄÀý×Ó¡£

Èç¹ûÄã±àÒëµÄÄÚºËʹÓÃÁËdevelopmentģʽ (Òâζ×ÅÄãµÄ»úÆ÷ÔËÐÐÔÚÁËpermissiveģʽ£¬²¢ÇÒ»¹Ã»ÓÐÉèÖóÉenforcingģʽ), Äã¿ÉÒÔдһ¸öÆô¶¯½Å±¾À´×ª»»³Éenforcingģʽ, »òÕßÔÚÆô¶¯bootloaderµÄʱºò½«Äں˲ÎÊýÉèÖÃΪenforcing=1 ¡£(±à¼­ÄãµÄ lilo.conf Îļþ£¬Ìí¼Ó append="enforcing=1").

4.5 ²»Í¬½ÇÉ«ÔËÐÐÃüÁîµÄ±È½Ï

ÎÒÃÇÏÖÔÚ»áÔÚ²»Í¬µÄ°²È«ÉÏÏÂÎĵĻ·¾³ÏÂÔËÐÐһЩÃüÁî¡£ ת»»µ½enforcing ģʽ¡£ÔÚ user_r ½ÇÉ«µÄ»·¾³ÏÂ, ÔËÐÐps ax --context ÃüÁî²¢¹Û²ìÊä³öÐÅÏ¢¡£ ±ðÍüÁË ps ax -Z ÃüÁî¿ÉÒÔ×öͬÑùµÄÊÂÇé¡£ ÔÚ½ÇɫΪ user_r µÄʱºò, Äã¿ÉÒÔ¿´µ½ÄÇЩ±»ÔÊÐí·ÃÎÊ/procĿ¼µÄ¶øÇÒÔËÐÐÔÚuser_tÓòÖеĽø³Ì¡£ Èç¹ûÄĸö½ø³Ì²»ÄÜ·ÃÎÊ/procĿ¼, ÄÇôÄĸö½ø³Ì²»»áÏÔʾÔÚ ps ax ÃüÁîµÄÊä³öÖС£

ÏÖÔÚת»»µ½sysadm_t ÓòÖÐ,ÔËÐÐ ps ax --context ÃüÁî¡£Õâ´Î, Ä㽫»á¼ûµ½ÔÚϵͳÀïµÄËùÓеĽø³Ì£¬²»¹ÜËûÃÇÊÇÔÚÄĸöÓòÏÂÔËÐС£ µ±ÔÚ sysadm_t ÓòµÄʱºò, Äã¿ÉÒÔ·ÃÎʵ½user_tÓò²»¿ÉÒÔ·ÃÎʵ½µÄÆäËüÓòµÄ½ø³Ì¡£ Õâ¾ÍÊÇÎÊʲôÔÚ user_t ÓòÖÐÄã²»¿ÉÒÔϵͳÉÏËùÓеĽø³Ì¡£ÏëÏñÒ»¸ö¶ñÒâÓû§Äܹ»¼ûµ½ËùÓеÄϵͳ³ÌÐò¡£ËýÄÜ¿´µ½Ò»¸öÓа²È«Â©¶´µÄ daemon ÔÚÔËÐУ¬ÓÚÊÇËý¾Í¿ÉÒÔÕë¶ÔÕâ¸ö©¶´½øÐй¥»÷¡£ Èç¹û user_t Óò²»Äܼûµ½ daemon½ø³Ì, ÄÇôÕâÑùµÄΣÏջᱻ¼õÉÙ¡£

ÁíÍâÒ»¸öÒª¿¼ÂǵÄÎÊÌâ¾ÍÊÇÃüÁîÐÐÉϵÄÃÜÂëÎÊÌâ¡£ ĬÈϵÄlinuxÉèÖã¬ÊÇ¿ÉÒÔÈÃÈκÎÈ˶Áµ½ÕâÑùµÄÐÅÏ¢µÄ¡£ µ± SE Linux ×èÖ¹Äã¿´¼ûps Êä³öµÄÒ»¸ö³ÌÐòµÄÐÅϢʱ£¬Ëü½«¼õÉÙÕâÑùµÄΣÏÕ¡£ (µ±È»£¬Ò»¸öÃÜÂëÔÚÃüÁîÐÐÉÏÏÔʾ£¬ÊÇÒ»¸ö²î¾¢µÄÖ÷Òâ)¡£

ת»»»Øpermissive ģʽ¡£ Ä㽫ÓÖ»áÔÚuser_t ÓòÏÂÓÃps ax ÃüÁî¿´µ½ËùÓеÄϵͳ½ø³Ì¡£

5. ½¨Á¢Óû§ÕÊ»§

ÏÖÔÚÀ´×÷µãÓÐÒâ˼µÄÊÂÇé! ÎÒÃǽ«»á½¨Á¢Ò»¸ö SE Linux Óû§²¢·ÖÅ䏸ËûÒ»¸ö½ÇÉ«£¬È»ºóΪÓû§É趨ĬÈϵݲȫÉÏÏÂÎÄ¡£ ÔھɵÄSE Linux»·¾³ÏÂ, ·â×°³ÌÐòµÄ½¨Á¢Óà vipw (svipw)À´ÉèÖ㬱ÈÈ磬 useradd (suseradd), passwd (spasswd), chfn (schfn) µÈ£¬ÔÚÐ嵀 SE Linux»·¾³ÏÂ, ÕâЩ³ÌÐòÓÐÆäËüµÄÃû³Æ¡£

5.1 ½¨Á¢Ò»¸öеÄÓû§

ÎÒÃÇÏÖÔÚ½¨Á¢Ò»¸öÐÂÓû§¡£ÎÒÃǽÐËüsetest¡£

ת»»µ½ sysadm_r:sysadm_t ½ÇÉ«:Óû§¡£ ÏÖÔÚÓà useradd ÃüÁîÌí¼ÓÓû§setest:

root@kaos:~# id

uid=0(root) gid=0(root) groups=0(root) context=faye:sysadm_r:sysadm_t sid=398

ÔËÐÐidÃüÁî¼ì²éÈ·ÈÏÄãµÄ uid ÊÇ 0 ²¢ÇÒÄãµÄÉí·ÝÊÇÔÚsysadm_r:sysadm_t ½ÇÉ«:ÓòÖС£ Èç¹ûÄãµÄuidÊÇÄãÆäËüËÆÓÐÓû§µÄ, ÇëÏÈÓà su ÃüÁîת»»³Ë root Éí·Ý, È»ºóÔËÐÐnewrole -r ÃüÁî¡£

root@kaos:~# useradd -c "SE Linux test user" -m -d /home/setest -g users -s /bin/bash -u 1005 setest

root@kaos:~# finger setest

Login: setest Name: SE Linux test user

Directory: /home/setest Shell: /bin/bash

Never logged in.

No mail.

No Plan.

root@kaos:~# passwd setest

Enter new UNIX password:

Retype new UNIX password:

passwd: password updated successfully

setest Óû§ÏÖÔÚÒѾ­Ìí¼ÓÍêÁË¡£

5.2 ¸øÓû§·ÖÅä½ÇÉ«ºÍÉêÇë¸Ä±ä

ÏÖÔÚÎÒÃÇÏë¸øsetestÓû§ÉèÖÃÒ»¸ö½ÇÉ«¡£ ÎÒÃÇÏ£ÍûËû¿ÉÒÔ·ÃÎÊuser_r ½ÇÉ«¡£ ÐèÒªÅäÖõÄÎļþÊÇ/etc/selinux/users £¬ÄãÏÖÔÚ¿ÉÒÔÓÃÄã×îϲ»¶µÄ±à¼­Æ÷´ò¿ªËû£¬²¢ÏÈä¯ÀÀÒ»±é¡£

ÔÚÎļþµÄ½áβÌí¼ÓÈçÏÂÄÚÈÝ:

user setest roles { user_r };

ÕâÐеÄÒâ˼ÊÇÔÊÐí setest Óû§½øÈëuser_r ½ÇÉ«¡£ Èç¹ûÄ㻹ϣÍû setest Óû§»¹¿ÉÒÔ·ÃÎÊsysadm_r ½ÇÉ«, Äã¿ÉÒÔÌí¼Ó£º

user setest roles { user_r sysadm_r };

ÎÒÃÇÏÖÔÚÒªÈÃÎÒÃǵÄÉèÖÃÉúЧ£¬ËùÒÔÎÒÃÇ¿ÉÒÔÔÚsysadm_r:sysadm_t ½ÇÉ«:ÓòµÄÇé¿öÏÂÔËÐÐÒÔÏÂÃüÁî:

make -C /etc/selinux load

Õ⽫»¨·ÑÒ»¶Îʱ¼ä£¬Õâ¶Îʱ¼äÀï»á´´½¨²ßÂÔµÄÊý¾ÝÎļþ²¢ÓÃgzip ѹËõ¡£Èç¹ûÃüÁî³É¹¦Ö´Ðв¢Í˳ö, Ä㽫¿´µ½ÒÔÏÂÌáʾ:

Success

touch tmp/load

make: Leaving directory `/usr/share/selinux/policy/current'

ÔÚĬÈϵĽÇÉ«user_rϵÄÓû§ÊDz»ÔÊÐíÏò /etc/selinux/users ÎļþÌí¼ÓÄÚÈݵġ£Èç¹ûÄãÏëÒªËûÃÇ¿ÉÒÔʹÓà user_r Ö®ÍâµÄÒ»¸öÓû§½ÇÉ«»òÕßÈÃËûÃÇÄܹ»¸Ä±äËûÃÇ×Ô¼ºµÄÃÜÂë,¾ÍÒªËûÃǼÓÈëÕâÒ»¸öÎļþ£¬»òÔÚ SE Linux µÄ¼Ç¼ÐÅÏ¢µÄÊʵ±²¿·ÖÌí¼ÓËûÃǵÄÓû§Ãû¡£

ÏÖÔÚÎÒÃÇÀ´ÉèÖÃÒ»¸öȱʡµÄ°²È«ÉÏÏÂÎÄ¡£

5.3 ¸øÓû§ÉèÖÃȱʡµÄ°²È«ÉÏÏÂÎÄ

ÔÚÏò /etc/selinux/usersÎļþÌí¼ÓÍêÐÂÓû§Ö®ºó£¬ ȱʡµÄ°²È«ÉÏÏÂÎıØÐëÒªÔٵǽµÄʱºò±»Ö¸¶¨¡£ÅäÖÃÎļþÊÇ/etc/security/default_context ¡£Ä㽫¿´µ½ÈçÏÂÐÅÏ¢:

system_r:local_login_t user_r:user_t

µ±Ò»¸öÓû§´Ó±¾µØµÇ½µÄʱºò (»òÕß˵´Ó¿ØÖÆÌ¨µÇ½), /bin/login ³ÌÐò»áÔÚlocal_login_t ÓòÖÐÔËÐв¢·Ö±ðµØ·ÖÅäÒ»¸öÓû§½ÇÉ«ÊÇ user_r ºÍÓòΪ user_t ¡£

Èç¹ûÏÔʾµÄÊÇ£º

system_r:local_login_t sysadm_r:sysadm_t user_r:user_t

ÄÇôÓû§µÇ¼ʱÔÊÐí½øÈësysadm_t Óò, ÄÇôËû¾Í½«ÒÔ sysadm_t ÓòµÄÉí·ÝµÇ¼½øÀ´¡£ Èç¹û²»ÔÊÐí, ¾Í»áʹÓÃuser_tÓò¡£

Çë¿´ÕâÒ»ÐУº

system_r:sshd_t user_r:user_t

ÕâÒâζ×ÅËùÓÐÍ­ºø sshµÇ¼µÄÓû§½«Ê¹Óà user_r:user_t ½ÇÉ«:Óò¡£

5.4 ÖØÐ±ê¼ÇÓû§Ö÷Ŀ¼

Èç¹ûÄãÒѾ­Óà useradd Ìí¼ÓÁËÒ»¸ö½ÇɫΪ user_rµÄÐÂÓû§, ÄÇôÄÇôÄãÐèÒª×ÐϸµÄ¸Ä±äËüÒÑÓеıê¼Ç¡£ Èç¹ûÓû§½ÇÉ«²»ÊÇuser_r, ÄÇôÄã¾Í²»ÄÜÖØÐ±ê¼Ç£¬ÓÚÊÇÄã±ØÐëÔËÐÐÒÔÏÂÃüÁî:

find /home/setest -print0 | xargs -0 chcon -h system_ubject_r:user_home_t ;\

chcon -h system_ubject_r:user_home_dir_t /home/setest

ÕâÒ»¸öÃüÁîʹËùÓÐÔÚ/home/setestĿ¼ÏµÄÎļþ¶¼ÔËÐÐÁË chconÃüÁî(±ä»¯Îļþ°²È«ÉÏÏÂÎÄ) ¸Ä±äÁËÎļþµÄ°²È«ÉÏÏÂÎÄ¡£Óû§Ö÷Ŀ¼±»±ê¼Ç³ÉÀàÐÍΪ user_home_dir_t £¬¶øÇÒÔÚ»§Ö÷Ŀ¼ÏµÄÎļþ¶¼±»±ê¼Ç³ÉÀàÐÍΪ user_home_t ¡£ÓÐʱ£¬Ò»¸ö³ÌÐò¿ÉÄܱ»ÔÊÐí·ÃÎÊÒ»¸öÓû§Ö÷Ŀ¼, µ«ÊDz»ÄÜ·ÃÎʺÎÔÙ´ËĿ¼ÏµÄÎļþ, Á½ÖÖ²»Í¬µÄÀàÐÍÓɴ˶øÀ´¡£

6. Ìí¼ÓеÄÓû§Óò

ÏÖÔÚÈÃÎÒÃǽ¨Á¢Ò»¸öÎÒÃÇ×Ô¼ºµÄÓû§Óò, ²¢°ÑËü½Ð×ösecond_t ¡£ ÎÒÃÇÒ²½«»á½¨Á¢Ò»¸öеĽÇÉ«½Ð×ösecond_r ¡£ Òª½¨Á¢second_r ½ÇÉ«Ê×ÏÈÔÚÇ°ÃæµÄ²¿·Ö(¸Õ¸Õ·ÖÅäÁË user_r ½ÇÉ«²¢ÇÒ²¢²»ÕæÕý½¨Á¢ÕâÑùµÄÓû§) ÖÐÒ»²½Ò»²½¸ú×Å×÷£¬µ«ÊDz»ÒªÔËÐÐµÚ 5.2 ½ÚÖеÄmakeÃüÁî¡£ÔÚÄãÒѾ­±à¼­ /etc/selinux/userÖ®ºó£¬»Øµ½ÕâÀï²¢ÇÒ¼ÌÐøÏÂÒ»²¿·Ö£¬¹ØÓڱ༭ʹÓÃÕßÁìÓòÎļþµÄ²¿·Ö¡£

¹ØÓÚΪʲôÎÒ²»ÏëÒªÄãÔËÐÐmakeÖ¸ÁîµÄÔ­Òò£¬ÊÇÒòΪÔçÏȵIJ¿·Ö¸Õ¸Õ·ÖÅäÁËȱʡµÄÒ»¸ö user_r µÄ½ÇÉ«¡£ µ«ÊÇÎÒÃǽ«»á½¨Á¢Ò»¸öеĽÇÉ«£¬¶øÇÒͬÑùµØÎÒÃÇÐèÒªÒ»¸öеÄÓòÓëËü´îÅä¡£ÒÔϲ¿·Ö½øÐиÅÂÔ˵Ã÷¡£

6.1±à¼­Óû§µÄÓòÎļþ

Óû§ÓòµÄÅäÖÃÎļþÊÇ /etc/selinux/domains/user.te ¡£ÇëÏÈ¿´Ò»±é¡£ Ìí¼ÓÒÔϼ¸ÐУº

full_user_role(second)

allow system_r second_r

allow sysadm_r second_r

ÔÚÎļþµÄʲôλÖÃÌí¼ÓÊÇÎÞËùνµÄ£¬ÔÚÉÏÃæÌí¼Ó×¢ÊÍ:

# if adding new user roles make sure you edit the in_user_role macro in

# macros/user_macros.te to match

ÔÙÀ´±à¼­ /etc/selinux/macros/user_macros.te Îļþ½øÐÐÆ¥Åä¡£ ´ò¿ª´ËÎļþ²¢ÕÒµ½ in_user_role (²î²»¶àÔÚÎļþµÄ½áβ)ÕâÐС£Ìí¼Ó "role second_r types $1;" ÏÖÔÚÕⲿ·ÖÎļþÓ¦¸ÃÏñÕâÑù£º

undefine(`in_user_role')

define(`in_user_role', `

role user_r types $1;

role second_r types $1;

')

»Øµ½ÎÒÃDZ༭µÄµÚÒ»¸öÎļþ (full_user_role(second)), ÕâÑùÎÒÃǾͽ¨Á¢ÁËsecond_tÓòºÍsecond_home_dir_tÀàÐÍÒÔ¼° second_home_t ÀàÐÍ(Óû§Ö÷Ŀ¼µÄÀàÐͺÍÖ÷Ŀ¼ÀïÎļþµÄÀàÐÍ)¡£Ò»¸ö second_tmp_tÀàÐÍ £¬µ±ÔÚ/tmpĿ¼Ï½¨Á¢Îļþʱ¡£ ÀàÐÍ second_tmpfs_tÊÇÔÚtmpfsÖй²ÏíÄÚ´æÎļþϵͳÖн¨Á¢ÎļþµÄÉÏÏÂÎÄ¡£ ×îºó£¬second_tty_device_tºÍ second_devpts_tÀàÐÍ·Ö±ð±»ÓÃÀ´±ê¼ÇÖÕ¶ËÉ豸£¨tty£©ºÍÐéÄâÖÕ¶ËÉ豸¡£µ±È»Ò²½¨Á¢ÁËÏàÓ¦µÄ²ßÂÔÓ¦ÓÃÓÚÕâЩ±ê¼Ç¡£

SE LinuxÄÚ²¿²¢²»Ö§³ÖÈκÎÀàÐ͵ı궨, ÒÔ¼°ÀàÐÍ/ÓòµÄ¼Ì³Ð£¬µÈ¡£µ±È»²ßÂÔÓïÑԵıàдҲ²»Ö§³ÖÕâÐ©ÌØÕ÷¡£ ËùÒÔÎÒÃÇÓÃM4ºê±àÒëÆ÷À´ÉèÖüòµ¥µÄÓòºÍÀàÐÍ¡£

ÎÒÃÇÏÖÔÚÀ´½¨Á¢Ò»¸öÓû§ÔÚÕâ¸öÐÂÓòÖÐʹÓà (second_t)²¢·ÃÎÊ second_r ½ÇÉ«¡£

6.2Ôٴν¨Á¢Ò»¸öеIJâÊÔÓû§

ʹÓà useradd, ½¨Á¢Ò»¸öеÄÓû§¡£(ÈÃÎÒÃǼÙÉèÓû§½Ð×ö " spike" °Ñspike¼ÓÈë /etc/selinux/users Ö»¸øÓèËû¶Ô second_r ½ÇÉ«µÄ·ÃÎÊȨºÍûÓÐÆäËüȨÏÞ¡£ È»ºóÔËÐÐ

make -C /etc/selinux load

Ó¦ÓÃеIJßÂÔ¡£

½ÓÏÂÀ´ÊÇÉèÖÃȱʡÓòºÍеĽÇÉ«¡£ ÎÒÃÇ¿ÉÒԱ༭ /etc/security/default_type Îļþ²¢Ìí¼ÓÒÔÏÂÐУº

second_r:second_t

ÎÒÃÇÏÖÔÚ±ØÐëÊÖ¶¯É趨/home/spike ºÍËüµÄÉÏÏÂÎÄ¡£useradd £¬ÃüÁî²»»á×öÕâЩÊÂÇé,ËüÖ»Ö§³ÖÖØÐ±ê¼ÇÓû§µÄ user_r ½ÇÉ«¡£ ÔËÐÐÏÂÃæµÄÃüÁî:

find /home/spike -print0 | xargs -0 chcon -h system_ubject_r:second_home_t ;\

chcon -h system_ubject_r:second_home_dir_t /home/spike

ÏÖÔÚÊÔ×ÅÓÃspikeÓû§Éí·ÝµÇ¼¡£

7. ÈÕÖ¾ÐÅÏ¢µÄ˵Ã÷

½ÓÏÂÀ´½éÉÜÌáʾµÄ˵Ã÷ÐÅÏ¢¡£ÎÒ½«½âÊÍÿ²¿·ÖÐÅÏ¢µÄÒâÒå¡£ ¶ÔÓڱȽÏÈÝÒ׵IJ¿·Ö£¬ÎÒ»áÖ±½ÓÔÚÊä³öµÄÄÚÈÝÉϱê¼Ç³öÀ´¡£

ÓÐЩʱºò£¬ÈÕÖ¾ÐÅÏ¢²»»áÒÔÄãϲ»¶µÄÐÎʽÇåÎúµÄ±í´ï³öÀ´, ËùÒÔÎÒÃÇÊ×ÏÈÒªÇå³ý ReiserFS ºÍExt2/Ext3 Îļþϵͳ(SE LinuxÖ§³ÖµÄÎļþϵͳ) µÄroot inode ÊÇ2¡£

XFS ÎļþϵͳºÍ JFS ÎļþϵͳÏÖÔÚÕýÔÚ²âÊÔÖС£

Àý 1

avc: denied { getattr } for pid=6011 exe=/usr/bin/vim path=/etc/shadow dev=03:03 ino=123456 \

scontext=faye:user_r:user_t tcontext=system_ubject_r:shadow_t tclass=file

ÕâÒ»¸öÀý×ÓÏÔʾµÄÊÇ,ÔÚenforcingģʽʱһ¸öÎÞÌØÈ¨Óû§(faye) ³¢ÊԱ༭ /etc/shadowÎļþµÄÏÔʾÐÅÏ¢¡£

"avc: denied" Òâζ×ÅÕâÑùµÄ²Ù×÷±»¾Ü¾ø¡£ "{ getattr }" Òâζ×ÅÓÐÈ˶ÔÎļþʹÓà stat()º¯Êý¡£ ÔÚÕâ¸ö²Ù×÷ÖУ¬±ØÐëÊ×ÏȲ鿴ÎļþµÄÊôÐÔ (»òÕß˵ÖÁÉÙÒª²é¿´ÎļþÊôÐÔ), Èç¹û²»Äܲ鿴£¬ÓÚÊÇÍ£Ö¹²Ù×÷¡£

braces {}ÀïµÄÄÚÈݰüº¬Á˲Ù×÷µÄ¶¯×÷£¬»òÕß˵ÊÇSE LinuxÕýÔÚ×öµÄÓйزÙ×÷¡£ SE Linux ¿ÉÒÔ×ö³ö°üÀ¨allowºÍdenyÁ½ÖÖ¼ì²é½á¹û, ÔÚÕâ¸öÀý×ÓÖмì²éµÄ½á¹ûÊDZ»¾Ü¾ø, ²¢Í¨ÖªÄãÄãÏëÒªµÄ²Ù×÷±»¾Ü¾ø¡£

"for pid=" Äã²Ù×÷µÄ½ø³ÌµÄpid¡£ "exe=/usr/bin/vim" ÊÇÄãÖ´ÐеÄÃüÁî (ÔÚÕâ¸öÀý×ÓÀִÐеÄÊÇvim)¡£ "path=/etc/shadow" ʵÐÐÒª²Ù×÷µÄÄ¿±êÎļþ·¾¶¡£ "dev=03:03" ÊǸú´Ë²Ù×÷ÓйصÄÎļþϵͳËùÔڵĿéÉ豸µÄÉ豸ºÅ¡£ µÚÒ»¸ö "03"£¨Ö÷É豸ºÅ£© Òâ˼ÊÇʹÓÃÁË hda £¬µÚ¶þ¸ö "03" ÊÇ 3£¨¸¨ÖúÉ豸ºÅ»ò´ÓÉ豸ºÅ£©, ËùÒÔÕâ¸ö"dev=03:03" ¾ÍÒâζ×Å /dev/hda3 (Èç¹ûÄãÔÚ devfs ÉÏÔËÐÐÄÇôӦ¸ÃÊÇ/dev/ide/host0/bus0/target0/lun0/part3). µ±SE Linux ºË²éȨÏÞµÄʱºò Ëû²¢²»ÖªµÀÄãÒª²Ù×÷µÄ¶ÔÏóµÄÍêÕû·¾¶ËùÒÔËü²»ÄܼǼÈκÎÊÂÇé¡£ËüÖ»ÖªµÀÎļþϵͳµÄÏà¹ØÂ·¾¶, ºÍÎļþϵͳËùÔÚ¿éÉ豸µÄÉ豸ºÅ¡£±ÈÈç˵ÎÒÃÇÒª·ÃÎ浀 /etc/shadow. SE Linux ²¢²»ÖªµÀÕâ¸öÎļþÔÚ¸ùĿ¼Ï¡£Ëü½ö½öÖªµÀ /etc/shadow ËùÔÚµÄÎļþϵͳ¡£ "ino=123456" Ä¿±êµÄ inode ºÅ (Õâ¸öÀý×ÓÖеÄÄ¿±êÊÇ /etc/shadow) "scontext=faye:user_r:user_t" ²Ù×÷¶¯×÷À´Ô´½ø³ÌµÄÉÏÏÂÎÄ"tcontext=system_ubject_r:shadow_t" ²Ù×÷¶ÔÏóµÄ°²È«ÉÏÏÂÎÄ (/etc/shadow)¡£ "tclass=file" Òâζ×ÅÄ¿±ê¶ÔÏóÊǸöÎļþ¡£

Example 2

avc: granted { avc_toggle } for pid=6073 exe=/sbin/avc_toggle \

scontext=faye:sysadm_r:sysadm_t tcontext=system_u:system_r:kernel_t tclass=system

"avc: granted"Òâ˼ÊÇÄãµÄ²Ù×÷±»ÔÊÐíÕý³£ÔËÐС£ "{ avc_toggle }" ±íʾÄãµÄ³ÌÐòµ÷ÓÃÁË avc_toggle()ϵͳµ÷Óᣠ"tclass=system" ±íʾĿ±ê³ÌÐòÊôÓÚsystem class¡£

Àý 3

avc: denied { append } for pid=6153 exe=/bin/bash path=/.bash_history dev=03:03 ino=498 \

scontext=faye:user_r:user_t tcontext=fayebject_r:root_t tclass=file

ÕâÌõÌáʾÊÇ˵ÊôÓÚuser_r:user_t ½ÇÉ«:ÓòµÄfayeÉí·ÝµÄÓû§ÏëÒªÔÚÊôÓÚ rootµÄÀàÐÍΪroot_t .bash_history ÎļþÀïÌí¼ÓÄÚÈݱ»¾Ü¾ø¡£

Àý 4

avc: denied { write } for pid=605 exe=/bin/touch dev=09:03 ino=2 \

scontext=root:user_r:user_t tcontext=system_ubject_r:root_t tclass=dir

Õâ¸öÀý×ÓÏÔʾµÄÊÇ·¾¶ÕÒ²»µ½¡£È»¶øÎÒÃÇ¿ÉÒÔÖªµÀµÄÊÇÒòΪinodeºÅÊÇ2£¬ËùÒÔÊǸùĿ¼¡£
ÎÄÕÂÆÀÂÛ

¹²ÓÐ 0 ÌõÆÀÂÛ