පාඨමාලා සිසුන් සඳහා සකස් කරන ලද ලිපියේ පරිවර්තනය
SELinux හෝ Security Enhanced Linux යනු ද්වේශ සහගත ආක්රමණයන් වැලැක්වීම සඳහා එක්සත් ජනපද ජාතික ආරක්ෂක ඒජන්සිය (NSA) විසින් වැඩි දියුණු කරන ලද ප්රවේශ පාලන යාන්ත්රණයකි. එය දැනට පවතින අභිමත (හෝ තෝරාගත්) ආකෘතියට ඉහළින් බලහත්කාර (හෝ අනිවාර්ය) ප්රවේශ පාලන ආකෘතියක් (ඉංග්රීසි අනිවාර්ය ප්රවේශ පාලනය, MAC) ක්රියාත්මක කරයි (ඉංග්රීසි අභිමත ප්රවේශ පාලනය, DAC), එනම් කියවීමට, ලිවීමට, ක්රියාත්මක කිරීමට අවසර.
SELinux හි ආකාර තුනක් ඇත:
- බලාත්මක කිරීම - ප්රතිපත්ති රීති මත පදනම්ව ප්රවේශ ප්රතික්ෂේප කිරීම.
- අවසර ලත් - බලාත්මක කිරීමේ මාදිලියේ තහනම් කරනු ලබන ප්රතිපත්තිය උල්ලංඝනය කරන ක්රියාවන් පිළිබඳ සටහනක් තබා ගැනීම.
- ආබාධිත - SELinux සම්පූර්ණයෙන් අක්රිය කිරීම.
පෙරනිමියෙන් සැකසුම් ඇත /etc/selinux/config
SELinux මාතයන් වෙනස් කිරීම
වත්මන් මාදිලිය සොයා ගැනීමට, ධාවනය කරන්න
$ getenforce
මාදිලිය අවසරයට වෙනස් කිරීමට පහත විධානය ක්රියාත්මක කරන්න
$ setenforce 0
හෝ, සිට මාදිලිය වෙනස් කිරීමට අවසර ලත් මත බලාත්මක කිරීම, ක්රියාත්මක කරන්න
$ setenforce 1
ඔබට SELinux සම්පූර්ණයෙන්ම අක්රිය කිරීමට අවශ්ය නම්, මෙය කළ හැක්කේ වින්යාස ගොනුව හරහා පමණි
$ vi /etc/selinux/config
අක්රිය කිරීමට, SELINUX පරාමිතිය පහත පරිදි වෙනස් කරන්න:
SELINUX=disabled
SELinux පිහිටුවීම
සෑම ගොනුවක්ම සහ ක්රියාවලියක්ම SELinux සන්දර්භයකින් සලකුණු කර ඇත, එහි පරිශීලක, භූමිකාව, වර්ගය ආදී අමතර තොරතුරු අඩංගු වේ. මෙය ඔබ SELinux සක්රීය කරන පළමු අවස්ථාව නම්, ඔබට ප්රථමයෙන් සන්දර්භය සහ ලේබල වින්යාස කිරීමට අවශ්ය වනු ඇත. ලේබල් සහ සන්දර්භය පැවරීමේ ක්රියාවලිය ටැග් කිරීම ලෙස හැඳින්වේ. සලකුණු කිරීම ආරම්භ කිරීම සඳහා, වින්යාස ගොනුවේ අපි ප්රකාරය වෙනස් කරමු අවසර ලත්.
$ vi /etc/selinux/config
SELINUX=permissive
මාදිලිය සැකසීමෙන් පසු අවසර ලත්, නම සමඟ root හි හිස් සැඟවුණු ගොනුවක් සාදන්න autorelabel
$ touch /.autorelabel
සහ පරිගණකය නැවත ආරම්භ කරන්න
$ init 6
සටහන: අපි මාදිලිය භාවිතා කරමු අවසර ලත් සලකුණු කිරීම සඳහා, මාදිලියේ භාවිතයේ සිට බලාත්මක කිරීම නැවත පණගැන්වීමේදී පද්ධතිය බිඳවැටීමට හේතු විය හැක.
බාගත කිරීම කිසියම් ගොනුවක සිරවී ඇත්නම් කරදර නොවන්න, ලකුණු කිරීමට ටික වේලාවක් ගතවේ. සලකුණු කිරීම අවසන් වූ පසු සහ ඔබේ පද්ධතිය ආරම්භ වූ පසු, ඔබට වින්යාස ගොනුව වෙත ගොස් මාදිලිය සැකසිය හැක බලාත්මක කිරීමසහ ධාවනය කරන්න:
$ setenforce 1
ඔබ දැන් ඔබේ පරිගණකයේ SELinux සාර්ථකව සක්රීය කර ඇත.
ලඝු-සටහන් නිරීක්ෂණය කිරීම
සලකුණු කිරීමේදී හෝ පද්ධතිය ක්රියාත්මක වන විට ඔබට යම් දෝෂයක් ඇති විය හැක. ඔබගේ SELinux නිවැරදිව ක්රියා කරන්නේද යන්න සහ එය කිසියම් වරායකට, යෙදුමකට ප්රවේශය අවහිර නොකරන්නේ නම්, ඔබ ලඝු-සටහන් දෙස බැලිය යුතුය. SELinux ලොගය පිහිටා ඇත /var/log/audit/audit.log
, නමුත් දෝෂ සෙවීමට ඔබට සම්පූර්ණ කියවීම අවශ්ය නොවේ. දෝෂ සෙවීමට ඔබට audit2why උපයෝගීතාව භාවිතා කළ හැක. පහත විධානය ක්රියාත්මක කරන්න:
$ audit2why < /var/log/audit/audit.log
ප්රතිඵලයක් වශයෙන්, ඔබට දෝෂ ලැයිස්තුවක් ලැබෙනු ඇත. ලොගයේ දෝෂයක් නොතිබුනේ නම්, පණිවිඩ කිසිවක් නොපෙන්වයි.
SELinux ප්රතිපත්තිය වින්යාස කරමින්
SELinux ප්රතිපත්තියක් යනු SELinux ආරක්ෂක යාන්ත්රණය පාලනය කරන නීති මාලාවකි. ප්රතිපත්තියක් නිශ්චිත පරිසරයක් සඳහා නීති මාලාවක් නිර්වචනය කරයි. දැන් අපි තහනම් සේවාවන් වෙත ප්රවේශය ලබා දීම සඳහා ප්රතිපත්ති වින්යාස කරන්නේ කෙසේදැයි ඉගෙන ගනිමු.
1. තාර්කික අගයන් (ස්විච)
ස්විචයන් (බූලියන්) ඔබට නව ප්රතිපත්ති සෑදීමකින් තොරව, ධාවන වේලාවේදී ප්රතිපත්තියක කොටස් වෙනස් කිරීමට ඉඩ සලසයි. SELinux ප්රතිපත්ති නැවත ආරම්භ කිරීම හෝ නැවත සම්පාදනය කිරීමකින් තොරව වෙනස්කම් කිරීමට ඒවා ඔබට ඉඩ සලසයි.
උදාහරණ:
අපි හිතමු අපිට FTP read/write හරහා පරිශීලකයාගේ මුල් නාමාවලිය බෙදා ගැනීමට අවශ්ය බවත්, අපි එය දැනටමත් බෙදාගෙන ඇති බවත්, නමුත් අපි එයට ප්රවේශ වීමට උත්සාහ කරන විට, අපට කිසිවක් නොපෙනේ. මෙයට හේතුව SELinux ප්රතිපත්තිය FTP සේවාදායකය පරිශීලකයාගේ මුල් නාමාවලිය කියවීමෙන් සහ ලිවීමෙන් වළක්වන බැවිනි. FTP සේවාදායකයට නිවාස නාමාවලි වෙත ප්රවේශ විය හැකි පරිදි අපි ප්රතිපත්තිය වෙනස් කළ යුතුය. කරලා බලමු මේකට ස්විච් තියෙනවද කියලා
$ semanage boolean -l
මෙම විධානය මඟින් පවතින ස්විචයන් ඒවායේ වත්මන් තත්ත්වය (සක්රිය හෝ අක්රිය) සහ විස්තරය සමඟ ලැයිස්තුගත කරනු ඇත. ftp-පමණක් ප්රතිඵල සෙවීමට grep එකතු කිරීමෙන් ඔබට ඔබේ සෙවුම පිරිපහදු කළ හැක:
$ semanage boolean -l | grep ftp
සහ ඔබ පහත සඳහන් දේ සොයා ගනු ඇත
ftp_home_dir -> off Allow ftp to read & write file in user home directory
මෙම ස්විචය අක්රිය කර ඇත, එබැවින් අපි එය සක්රීය කරන්නෙමු setsebool $ setsebool ftp_home_dir on
දැන් අපගේ ftp ඩීමන් හට පරිශීලකයාගේ මුල් නාමාවලිය වෙත ප්රවේශ වීමට හැකි වනු ඇත.
සටහන: ඔබට සිදු කිරීමෙන් විස්තරයකින් තොරව පවතින ස්විච ලැයිස්තුවක් ද ලබා ගත හැක getsebool -a
2. ලේබල් සහ සන්දර්භය
SELinux ප්රතිපත්තිය ක්රියාවට නැංවීමේ වඩාත් පොදු ක්රමය මෙයයි. සෑම ගොනුවක්ම, ෆෝල්ඩරයක්, ක්රියාවලියක් සහ තොටක් SELinux සන්දර්භය සමඟ සලකුණු කර ඇත:
- ගොනු සහ ෆෝල්ඩර සඳහා, ලේබල් ගොනු පද්ධතියේ විස්තීරණ ගුණාංග ලෙස ගබඩා කර ඇති අතර පහත දැක්වෙන විධානය සමඟින් බැලිය හැක:
$ ls -Z /etc/httpd
- ක්රියාවලි සහ වරායන් සඳහා, ලේබල් කිරීම කර්නලය මගින් කළමනාකරණය කරනු ලබන අතර, ඔබට මෙම ලේබල පහත පරිදි බැලිය හැක:
ක්රියාවලිය
$ ps –auxZ | grep httpd
වරාය
$ netstat -anpZ | grep httpd
උදාහරණ:
දැන් අපි ලේබල සහ සන්දර්භය වඩා හොඳින් තේරුම් ගැනීමට උදාහරණයක් බලමු. නාමාවලියක් වෙනුවට අපට වෙබ් සේවාදායකයක් තිබේ යැයි සිතමු /var/www/html/ использует /home/dan/html/
. SELinux මෙය ප්රතිපත්ති කඩ කිරීමක් ලෙස සලකනු ඇති අතර ඔබට ඔබේ වෙබ් පිටු බැලීමට නොහැකි වනු ඇත. මෙයට හේතුව අපි HTML ගොනු හා සම්බන්ධ ආරක්ෂක සන්දර්භය සකසා නොමැති වීමයි. පෙරනිමි ආරක්ෂක සන්දර්භය බැලීමට, පහත විධානය භාවිතා කරන්න:
$ ls –lz /var/www/html
-rw-r—r—. root root unconfined_u:object_r:httpd_sys_content_t:s0 /var/www/html/
මෙන්න අපි ගත්තා httpd_sys_content_t
html ගොනු සඳහා සන්දර්භය ලෙස. දැනට පහත සන්දර්භය ඇති අපගේ වත්මන් නාමාවලිය සඳහා මෙම ආරක්ෂක සන්දර්භය සැකසිය යුතුය:
-rw-r—r—. dan dan system_u:object_r:user_home_t:s0 /home/dan/html/
ගොනුවක හෝ නාමාවලියක ආරක්ෂක සන්දර්භය පරීක්ෂා කිරීමට විකල්ප විධානයක්:
$ semanage fcontext -l | grep '/var/www'
අපි නිවැරදි ආරක්ෂක සන්දර්භය සොයාගත් පසු සන්දර්භය වෙනස් කිරීමට අපි semanage භාවිතා කරන්නෙමු. /home/dan/html හි සන්දර්භය වෙනස් කිරීමට, පහත විධානයන් ක්රියාත්මක කරන්න:
$ semanage fcontext -a -t httpd_sys_content_t ‘/home/dan/html(/.*)?’
$ semanage fcontext -l | grep ‘/home/dan/html’
/home/dan/html(/.*)? all files system_u:object_r:httpd_sys_content_t:s0
$ restorecon -Rv /home/dan/html
semanage භාවිතයෙන් සන්දර්භය වෙනස් කළ පසු, restorecon විධානය මඟින් ගොනු සහ නාමාවලි සඳහා පෙරනිමි සන්දර්භය පූරණය කරනු ඇත. අපගේ වෙබ් සේවාදායකයට දැන් ෆෝල්ඩරයෙන් ගොනු කියවීමට හැකි වනු ඇත /home/dan/html
මෙම ෆෝල්ඩරය සඳහා ආරක්ෂක සන්දර්භය වෙනස් කර ඇති නිසා httpd_sys_content_t
.
3. දේශීය ප්රතිපත්ති සාදන්න
ඉහත ක්රම වලින් ඔබට ප්රයෝජනයක් නැති අවස්ථා ඇති අතර ඔබට audit.log හි දෝෂ (avc/denial) ලැබේ. මෙය සිදු වූ විට, ඔබ දේශීය ප්රතිපත්තියක් නිර්මාණය කළ යුතුය. ඉහත විස්තර කර ඇති පරිදි, audit2why භාවිතයෙන් ඔබට සියලු දෝෂ සොයා ගත හැක.
දෝෂ විසඳීමට ඔබට දේශීය ප්රතිපත්තියක් සෑදිය හැක. උදාහරණයක් ලෙස, අපට httpd (apache) හෝ smbd (samba) සම්බන්ධ දෝෂයක් ලැබේ, අපි දෝෂ හඳුනාගෙන ඒවා සඳහා ප්රතිපත්තියක් සාදන්නෙමු:
apache
$ grep httpd_t /var/log/audit/audit.log | audit2allow -M http_policy
samba
$ grep smbd_t /var/log/audit/audit.log | audit2allow -M smb_policy
එය http_policy
и smb_policy
අපි නිර්මාණය කළ දේශීය ප්රතිපත්තිවල නම් වේ. දැන් අපට මෙම සාදන ලද දේශීය ප්රතිපත්ති වත්මන් SELinux ප්රතිපත්තියට පැටවිය යුතුය. මෙය පහත පරිදි කළ හැකිය:
$ semodule –I http_policy.pp
$ semodule –I smb_policy.pp
අපගේ දේශීය ප්රතිපත්ති බාගත කර ඇති අතර අපට තවදුරටත් audit.log හි avc හෝ denail නොලැබිය යුතුය.
මෙය ඔබට SELinux තේරුම් ගැනීමට උපකාර කිරීමට මගේ උත්සාහයයි. මෙම ලිපිය කියවීමෙන් පසු ඔබට SELinux සමඟ වඩාත් පහසු වනු ඇතැයි මම බලාපොරොත්තු වෙමි.
මූලාශ්රය: www.habr.com