સિસ્ટમ એડમિનિસ્ટ્રેટર્સ માટે SELinux ચીટ શીટ: મહત્વપૂર્ણ પ્રશ્નોના 42 જવાબો

લેખનો અનુવાદ કોર્સના વિદ્યાર્થીઓ માટે ખાસ તૈયાર કરવામાં આવ્યો હતો "લિનક્સ એડમિનિસ્ટ્રેટર".

સિસ્ટમ એડમિનિસ્ટ્રેટર્સ માટે SELinux ચીટ શીટ: મહત્વપૂર્ણ પ્રશ્નોના 42 જવાબો

અહીં તમને જીવન, બ્રહ્માંડ અને Linux માં દરેક વસ્તુ વિશેના મહત્વપૂર્ણ પ્રશ્નોના જવાબો બહેતર સુરક્ષા સાથે મળશે.

"મહત્વનું સત્ય એ છે કે વસ્તુઓ હંમેશા જેવી લાગતી નથી તે સામાન્ય જ્ઞાન છે..."

-ડગ્લાસ એડમ્સ, ગેલેક્સી માટે હિચીકરની માર્ગદર્શિકા

સલામતી. વધેલી વિશ્વસનીયતા. પત્રવ્યવહાર. નીતિ. એપોકેલિપ્સ સિસાડમીનના ચાર હોર્સમેન. અમારા દૈનિક કાર્યો ઉપરાંત - મોનિટરિંગ, બેકઅપ, અમલીકરણ, ગોઠવણી, અપડેટ વગેરે - અમે અમારી સિસ્ટમની સુરક્ષા માટે પણ જવાબદાર છીએ. તે સિસ્ટમો પણ જ્યાં તૃતીય-પક્ષ પ્રદાતા ભલામણ કરે છે કે અમે ઉન્નત સુરક્ષાને અક્ષમ કરીએ. તે કામ જેવું લાગે છે એથન હન્ટ "મિશન: ઇમ્પોસિબલ" માંથી

આ મૂંઝવણનો સામનો કરીને, કેટલાક સિસ્ટમ સંચાલકો લેવાનું નક્કી કરે છે વાદળી ગોળી, કારણ કે તેઓ વિચારે છે કે તેઓ જીવન, બ્રહ્માંડ અને તે બધાના મોટા પ્રશ્નનો જવાબ ક્યારેય જાણશે નહીં. અને જેમ આપણે બધા જાણીએ છીએ, તે જવાબ 42 છે.

The Hitchhiker's Guide to the Galaxy ની ભાવનામાં, અહીં નિયંત્રણ અને ઉપયોગ વિશેના મહત્વપૂર્ણ પ્રશ્નોના 42 જવાબો છે. SELinux તમારી સિસ્ટમો પર.

1. SELinux એ ફરજિયાત એક્સેસ કંટ્રોલ સિસ્ટમ છે, જેનો અર્થ છે કે દરેક પ્રક્રિયામાં લેબલ હોય છે. દરેક ફાઇલ, ડિરેક્ટરી અને સિસ્ટમ ઑબ્જેક્ટમાં પણ લેબલ્સ હોય છે. નીતિ નિયમો ટૅગ કરેલી પ્રક્રિયાઓ અને ઑબ્જેક્ટ્સ વચ્ચે ઍક્સેસને નિયંત્રિત કરે છે. કર્નલ આ નિયમોનો અમલ કરે છે.

2. બે સૌથી મહત્વપૂર્ણ ખ્યાલો છે: લેબલિંગ — નિશાનો (ફાઈલો, પ્રક્રિયાઓ, બંદરો, વગેરે) અને અમલીકરણનો પ્રકાર (જે પ્રકારોના આધારે પ્રક્રિયાઓને એકબીજાથી અલગ કરે છે).

3. યોગ્ય લેબલ ફોર્મેટ user:role:type:level (વૈકલ્પિક).

4. બહુ-સ્તરીય સુરક્ષા પ્રદાન કરવાનો હેતુ (બહુ-સ્તરીય સુરક્ષા - MLS) તેઓ જે ડેટાનો ઉપયોગ કરશે તેની સુરક્ષાના સ્તરના આધારે પ્રક્રિયાઓ (ડોમેન્સ) નું સંચાલન કરવાનું છે. ઉદાહરણ તરીકે, ગુપ્ત પ્રક્રિયા ટોચના ગુપ્ત ડેટાને વાંચી શકતી નથી.

5. બહુ-શ્રેણી સુરક્ષાની ખાતરી કરવી (મલ્ટી-કેટેગરી સુરક્ષા - MCS) સમાન પ્રક્રિયાઓને એકબીજાથી સુરક્ષિત કરે છે (ઉદાહરણ તરીકે, વર્ચ્યુઅલ મશીનો, ઓપનશિફ્ટ એન્જિન, SELinux સેન્ડબોક્સ, કન્ટેનર, વગેરે).

6. બુટ વખતે SELinux મોડ્સ બદલવા માટે કર્નલ વિકલ્પો:

  • autorelabel=1 → સિસ્ટમને રિબેલિંગ ચલાવવાનું કારણ બને છે
  • selinux=0 → કર્નલ SELinux ઈન્ફ્રાસ્ટ્રક્ચર લોડ કરતું નથી
  • enforcing=0 → પરમિશન મોડમાં લોડ થઈ રહ્યું છે

7. જો તમારે સમગ્ર સિસ્ટમને ફરીથી લેબલ કરવાની જરૂર હોય તો:

# touch /.autorelabel
#reboot

જો સિસ્ટમ માર્કિંગમાં મોટી સંખ્યામાં ભૂલો હોય, તો તમારે રિમાર્કિંગ સફળ થવા માટે પરવાનગી મોડમાં બુટ કરવાની જરૂર પડી શકે છે.

8. SELinux સક્ષમ છે કે કેમ તે તપાસવા માટે: # getenforce

9. SELinux ને અસ્થાયી રૂપે સક્ષમ/અક્ષમ કરવા માટે: # setenforce [1|0]

10. SELinux સ્થિતિ તપાસી રહ્યું છે: # sestatus

11. રૂપરેખાંકન ફાઇલ: /etc/selinux/config

12. SELinux કેવી રીતે કામ કરે છે? અપાચે વેબ સર્વર માટે ચિહ્નિત કરવાનું અહીં ઉદાહરણ છે:

  • દ્વિસંગી રજૂઆત: /usr/sbin/httpd→httpd_exec_t
  • રૂપરેખાંકન નિર્દેશિકા: /etc/httpd→httpd_config_t
  • લોગ ફાઇલ ડિરેક્ટરી: /var/log/httpd → httpd_log_t
  • સામગ્રી નિર્દેશિકા: /var/www/html → httpd_sys_content_t
  • સ્ક્રિપ્ટ લોંચ કરો: /usr/lib/systemd/system/httpd.service → httpd_unit_file_d
  • પ્રક્રિયા: /usr/sbin/httpd -DFOREGROUND → httpd_t
  • બંદરો: 80/tcp, 443/tcp → httpd_t, http_port_t

સંદર્ભમાં પ્રક્રિયા ચાલી રહી છે httpd_t, લેબલ કરેલ ઑબ્જેક્ટ સાથે ક્રિયાપ્રતિક્રિયા કરી શકે છે httpd_something_t.

13. ઘણા આદેશો દલીલ સ્વીકારે છે -Z સંદર્ભ જોવા, બનાવવા અને બદલવા માટે:

  • ls -Z
  • id -Z
  • ps -Z
  • netstat -Z
  • cp -Z
  • mkdir -Z

સંદર્ભો સ્થાપિત થાય છે જ્યારે ફાઇલો તેમની પેરેંટ ડિરેક્ટરીના સંદર્ભના આધારે બનાવવામાં આવે છે (કેટલાક અપવાદો સાથે). RPM એ સ્થાપન દરમ્યાન સંદર્ભો સ્થાપિત કરી શકે છે.

14. SELinux ભૂલોના ચાર મુખ્ય કારણો છે, જેનું વર્ણન નીચેના મુદ્દાઓ 15-21માં વધુ વિગતમાં કરવામાં આવ્યું છે:

  • લેબલીંગ સમસ્યાઓ
  • SELinux ને જાણવાની જરૂર છે તે કંઈકને કારણે
  • SELinux નીતિ/એપ્લિકેશનમાં ભૂલ
  • તમારી માહિતી સાથે ચેડા થઈ શકે છે

15. લેબલીંગ સમસ્યા: જો તમારી ફાઇલો અંદર છે /srv/myweb ખોટી રીતે ચિહ્નિત થયેલ છે, ઍક્સેસ નકારી શકાય છે. આને ઠીક કરવાની અહીં કેટલીક રીતો છે:

  • જો તમે લેબલ જાણો છો:
    # semanage fcontext -a -t httpd_sys_content_t '/srv/myweb(/.*)?'
  • જો તમે સમકક્ષ ચિહ્નોવાળી ફાઇલ જાણો છો:
    # semanage fcontext -a -e /srv/myweb /var/www
  • સંદર્ભ પુનઃસ્થાપિત કરી રહ્યા છીએ (બંને કેસો માટે):
    # restorecon -vR /srv/myweb

16. લેબલીંગ સમસ્યા: જો તમે ફાઇલની નકલ કરવાને બદલે તેને ખસેડો છો, તો ફાઇલ તેના મૂળ સંદર્ભને જાળવી રાખશે. આ સમસ્યાને ઠીક કરવા માટે:

  • લેબલ સાથે સંદર્ભ આદેશ બદલો:
    # chcon -t httpd_system_content_t /var/www/html/index.html
  • લિંક લેબલ સાથે સંદર્ભ આદેશ બદલો:
    # chcon --reference /var/www/html/ /var/www/html/index.html
  • સંદર્ભ પુનઃસ્થાપિત કરો (બંને કેસો માટે): # restorecon -vR /var/www/html/

17. જો SELinux તમારે જાણવાની જરૂર છેકે HTTPD પોર્ટ 8585 પર સાંભળી રહ્યું છે, SELinux ને કહો:

# semanage port -a -t http_port_t -p tcp 8585

18. SELinux તમારે જાણવાની જરૂર છે બુલિયન મૂલ્યો કે જે SELinux નીતિના ભાગોને SELinux પૉલિસી ઓવરરાઇટ થયાની જાણ કર્યા વિના રનટાઇમ પર બદલવાની મંજૂરી આપે છે. ઉદાહરણ તરીકે, જો તમે httpd ઈમેલ મોકલવા ઈચ્છો છો, તો દાખલ કરો: # setsebool -P httpd_can_sendmail 1

19. SELinux તમારે જાણવાની જરૂર છે SELinux સેટિંગ્સને સક્ષમ/અક્ષમ કરવા માટેના તાર્કિક મૂલ્યો:

  • તમામ બુલિયન મૂલ્યો જોવા માટે: # getsebool -a
  • દરેકનું વર્ણન જોવા માટે: # semanage boolean -l
  • બુલિયન મૂલ્ય સેટ કરવા માટે: # setsebool [_boolean_] [1|0]
  • કાયમી સ્થાપન માટે, ઉમેરો -P. ઉદાહરણ તરીકે: # setsebool httpd_enable_ftp_server 1 -P

20. SELinux નીતિઓ/એપ્લિકેશનમાં ભૂલો હોઈ શકે છે, જેમાં નીચેનાનો સમાવેશ થાય છે:

  • અસામાન્ય કોડ પાથ
  • કોન્ફીગ્યુરાસી
  • stdout રીડાયરેક્ટ કરી રહ્યું છે
  • ફાઇલ વર્ણનકર્તા લીક
  • એક્ઝિક્યુટેબલ મેમરી
  • નબળી રીતે બંધાયેલ પુસ્તકાલયો

ટિકિટ ખોલો (બગઝિલાને રિપોર્ટ સબમિટ કરશો નહીં; બગઝિલા પાસે કોઈ SLA નથી).

21. તમારી માહિતી સાથે ચેડા થઈ શકે છેજો તમારી પાસે પ્રતિબંધિત ડોમેન્સ હોય તો:

  • કર્નલ મોડ્યુલો લોડ કરો
  • લાગુ કરેલ SELinux મોડને અક્ષમ કરો
  • પર લખો etc_t/shadow_t
  • iptables નિયમો બદલો

22. નીતિ મોડ્યુલો વિકસાવવા માટે SELinux સાધનો:

# yum -y install setroubleshoot setroubleshoot-server

રીબૂટ કરો અથવા પુનઃપ્રારંભ કરો auditd સ્થાપન પછી.

23. ઉપયોગ કરો

journalctl

સાથે સંકળાયેલા તમામ લોગની યાદી પ્રદર્શિત કરવા માટે setroubleshoot:

# journalctl -t setroubleshoot --since=14:20

24. ઉપયોગ કરો journalctl ચોક્કસ SELinux ટેગ સાથે સંકળાયેલા તમામ લોગની યાદી બનાવવા માટે. દાખ્લા તરીકે:

# journalctl _SELINUX_CONTEXT=system_u:system_r:policykit_t:s0

25. જો SELinux ભૂલ થાય, તો લોગનો ઉપયોગ કરો setroubleshoot કેટલાક સંભવિત ઉકેલો ઓફર કરે છે.
ઉદાહરણ તરીકે, થી journalctl:

Jun 14 19:41:07 web1 setroubleshoot: SELinux is preventing httpd from getattr access on the file /var/www/html/index.html. For complete message run: sealert -l 12fd8b04-0119-4077-a710-2d0e0ee5755e

# sealert -l 12fd8b04-0119-4077-a710-2d0e0ee5755e
SELinux is preventing httpd from getattr access on the file /var/www/html/index.html.

***** Plugin restorecon (99.5 confidence) suggests ************************

If you want to fix the label,
/var/www/html/index.html default label should be httpd_syscontent_t.
Then you can restorecon.
Do
# /sbin/restorecon -v /var/www/html/index.html

26. લોગીંગ: SELinux ઘણી જગ્યાએ માહિતી રેકોર્ડ કરે છે:

  • / var / log / સંદેશાઓ
  • /var/log/audit/audit.log
  • /var/lib/setroubleshoot/setroubleshoot_database.xml

27. લૉગિંગ: ઑડિટ લૉગમાં SELinux ભૂલો શોધી રહ્યાં છીએ:

# ausearch -m AVC,USER_AVC,SELINUX_ERR -ts today

28. ચોક્કસ સેવા માટે SELinux એક્સેસ વેક્ટર કેશ (AVC) સંદેશાઓ શોધવા માટે:

# ausearch -m avc -c httpd

29. ઉપયોગિતા audit2allow પ્રતિબંધિત કામગીરીના લોગમાંથી માહિતી ભેગી કરે છે અને પછી SELinux પરવાનગી નીતિ નિયમો બનાવે છે. દાખ્લા તરીકે:

  • શા માટે ઍક્સેસ નકારવામાં આવે છે તેનું માનવ વાંચી શકાય તેવું વર્ણન બનાવવા માટે: # audit2allow -w -a
  • એક પ્રકારનો અમલ નિયમ જોવા માટે જે નકારેલ ઍક્સેસને મંજૂરી આપે છે: # audit2allow -a
  • કસ્ટમ મોડ્યુલ બનાવવા માટે: # audit2allow -a -M mypolicy
  • વિકલ્પ -M ઉલ્લેખિત નામ સાથે એક પ્રકાર અમલીકરણ ફાઇલ (.te) બનાવે છે અને નીતિ પેકેજ (.pp) માં નિયમનું સંકલન કરે છે: mypolicy.pp mypolicy.te
  • કસ્ટમ મોડ્યુલ ઇન્સ્ટોલ કરવા માટે: # semodule -i mypolicy.pp

30. પરવાનગી મોડમાં કામ કરવા માટે એક અલગ પ્રક્રિયા (ડોમેન) ગોઠવવા માટે: # semanage permissive -a httpd_t

31. જો તમે હવે ડોમેનને અનુમતિ આપવા માંગતા નથી: # semanage permissive -d httpd_t

32. તમામ પરવાનગી આપનાર ડોમેન્સને અક્ષમ કરવા માટે: # semodule -d permissivedomains

33. MLS SELinux નીતિને સક્ષમ કરવી: # yum install selinux-policy-mls
в /etc/selinux/config:

SELINUX=permissive
SELINUXTYPE=mls

ખાતરી કરો કે SELinux અનુમતિશીલ મોડમાં ચાલી રહ્યું છે: # setenforce 0
સ્ક્રિપ્ટનો ઉપયોગ કરો fixfilesઆગામી રીબુટ પર ફાઈલો રીલેબલ થયેલ છે તેની ખાતરી કરવા માટે:

# fixfiles -F onboot # reboot

34. ચોક્કસ MLS શ્રેણી સાથે વપરાશકર્તા બનાવો: # useradd -Z staff_u john

આદેશનો ઉપયોગ કરીને useradd, નવા વપરાશકર્તાને હાલના SELinux વપરાશકર્તા સાથે મેપ કરો (આ કિસ્સામાં, staff_u).

35. SELinux અને Linux વપરાશકર્તાઓ વચ્ચે મેપિંગ જોવા માટે: # semanage login -l

36. વપરાશકર્તા માટે ચોક્કસ શ્રેણી વ્યાખ્યાયિત કરો: # semanage login --modify --range s2:c100 john

37. વપરાશકર્તાના હોમ ડિરેક્ટરી લેબલને સુધારવા માટે (જો જરૂરી હોય તો): # chcon -R -l s2:c100 /home/john

38. વર્તમાન શ્રેણીઓ જોવા માટે: # chcat -L

39. કેટેગરીઝ બદલવા અથવા તમારી પોતાની બનાવવાનું શરૂ કરવા માટે, ફાઇલને નીચે પ્રમાણે સંપાદિત કરો:

/etc/selinux/_<selinuxtype>_/setrans.conf

40. ચોક્કસ ફાઇલ, ભૂમિકા અને વપરાશકર્તા સંદર્ભમાં આદેશ અથવા સ્ક્રિપ્ટ ચલાવવા માટે:

# runcon -t initrc_t -r system_r -u user_u yourcommandhere

  • -t ફાઇલ સંદર્ભ
  • -r ભૂમિકા સંદર્ભ
  • -u વપરાશકર્તા સંદર્ભ

41. SELinux સાથે ચાલતા કન્ટેનર અક્ષમ છે:

  • પોડમેન: # podman run --security-opt label=disable …
  • ડોકર: # docker run --security-opt label=disable …

42. જો તમારે કન્ટેનરને સિસ્ટમની સંપૂર્ણ ઍક્સેસ આપવાની જરૂર હોય તો:

  • પોડમેન: # podman run --privileged …
  • ડોકર: # docker run --privileged …

અને હવે તમે પહેલાથી જ જવાબ જાણો છો. તેથી કૃપા કરીને: ગભરાશો નહીં અને SELinux સક્ષમ કરો.

સંદર્ભો:

સોર્સ: www.habr.com

એક ટિપ્પણી ઉમેરો