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£¬ËùÒÔÊǸùĿ¼¡£

