İşte SELinux vakasına öğretici bir yaklaşım:
SELinux'un aktif olup olmadığını öğrenin:
$ sestatus
SELinux status: enabled
SELinuxfs mount: /selinux
Current mode: enforcing
Mode from config file: enforcing
Policy version: 24
Policy from config file: targeted
Eğer öyleyse, bazı karşılaştırmalı kontroller yardımcı olabilir. Örneğin, bir sunucunun varsayılan DocumentRoot değeri vardır /var/www/html, ancak başka bir yerde istiyoruz /path/to/document/root.
SELinux kaynakla aktif olarak uğraşmıyorsa ls -dZ, dizinde şöyle bir şey gösterilir:
$ ls -dZ /path/to/document/root
? /path/to/document/root/
Öte yandan, SELinux bağlamları uygulanırsa, ls -dZdaha çok benzer:
$ ls -dZ /path/to/document/root
drwxrws--x+ cfgadm cfgadmin system_u:object_r:file_t:s0 /path/to/document/root
Çalışan bir DocumentRoot ile karşılaştırırsak, şöyle görünür:
$ ls -dZ /var/www/html
drwxr-xr-x. root root system_u:object_r:httpd_sys_content_t:s0 /var/www/html
Ve _rile _tilgili -r( --roleve -t( --type) bağımsız değişkenleri ile ilgilidir chcon.
NAME
chcon - change file security context
SYNOPSIS
chcon [OPTION]... CONTEXT FILE...
chcon [OPTION]... [-u USER] [-r ROLE] [-l RANGE] [-t TYPE] FILE...
chcon [OPTION]... --reference=RFILE FILE...
DESCRIPTION
Change the security context of each FILE to CONTEXT. With --reference,
change the security context of each FILE to that of RFILE.
--reference=RFILE
use RFILE's security context rather than specifying a CONTEXT value
-R, --recursive
operate on files and directories recursively
İlk başta, aşağıdakiler işe yarayabilir, ancak işe yaramayabilir.
$ sudo chcon -R -t httpd_sys_content_t /path/to/document/root
Web sunucusu yine de DocumentRoot'u göremiyorsa, içeriğin köküne kadar tamamen önemli olduğunu unutmayın:
$ sudo chcon -R -t httpd_sys_content_t /path/to/document
$ sudo chcon -R -t httpd_sys_content_t /path/to
$ sudo chcon -R -t httpd_sys_content_t /path
Bu noktada, web sunucusu dizini görebilir.
Evet, bu gece zor yolu öğrendim.
NOT: Chcon kullanımının kavramsal olarak RedHat belgelerine ( 5.6.1. Geçici Değişiklikler: chcon ) göre aşağıdakileri gösteren bir dezavantajı vardır :
The chcon command changes the SELinux context for files. However, changes
made with the chcon command do not survive a file system relabel, or the
execution of the restorecon command.
Daha kalıcı değişiklikler yapmak için semanage ve restorecon'u kullanın . Kısa bir örnek:
$ sudo semanage fcontext --add -t httpd_sys_content_t -s system_u \
"/path/to/document/root(/.*)?"
$ sudo restorecon -FR /path/to/document/root
Restorecon ile ilgili olarak , tüm bağlamı (yani kullanıcı ve tip) etkilemek için -F gerektiğini unutmayın . Ayrıca, -R özyineli olarak değişiklik yapmak anlamına gelir. -V veya -p bağımsız değişkenleri , ayrıntılı veya kısa bir şekilde ilerleme gösterebilir. Herhangi bir değişiklik yapmadan ne olacağını görmek için -FRnv kullanın .
Bir kez semanage bu şekilde kullanıldığında, şu komutu kullanarak yerel güvenlik değişikliklerini görüntülemek mümkündür:
$ sudo semanage export
Semanage dışa aktarımının çıktısı, çeşitli sistemlere bir dizi değişikliğin uygulanmasını kolaylaştırmak için semanage ithalatı tarafından kaydedilebilir ve kullanılabilir .
NOT: Bu yanıt, bir site için en temel tür bağlamını sağlar. Güvenlik çok daha ayrıntılı olabilir. Örneğin, aşağıdaki gibi bir komutla web sunucusu sayfalarına uygulanabilecek türlerin listesine bakın:
$ seinfo -t | grep http
NOT: Semanage ve seinfo gibi yardımcı programlar varsayılan olarak yüklenmeyebilir. En azından bazı dağıtımlarda, gerekli paketler şu şekilde adlandırılabilir:
policycoreutils-python
setools-console
DocumentRootweb sunucusunun gördükleri hakkında bir fikir verebilir. Ayrıca, yolun altındaki diğer dizinleri de kontrol etmek isteyebilirsiniz, ancak bu gerçekten altındaysa/var/www/bir sorun olmamalı