Bagaimana cara mendapatkan SELinux untuk mengizinkan Apache dan Samba pada folder yang sama?

26

Dalam konfigurasi yang saya setup, saya ingin mengizinkan samba dan apache untuk mengakses / var / www Saya dapat mengatur konteks untuk mengizinkan akses samba, tetapi kemudian httpd tidak memiliki akses. Menggunakan setenforce ke 0 menghilangkan masalah jadi saya tahu bahwa itu SELinux.

Selain itu: Bagaimana saya bisa melihat konteks folder, dan dapatkah folder memiliki banyak konteks?

(CentOS)

Joshua Enfield
sumber
Sudahkah Anda mencoba menggunakan opsi boolean dari sistem-config-selinux?

Jawaban:

39

Pertama, Anda dapat melihat konteks sesuatu dengan ls menggunakan ls -Z

[root@servername www]# ls -dZ /var/www
drwxr-xr-x  root root system_u:object_r:httpd_sys_content_t /var/www

Kedua, ada dua opsi untuk memberikan akses Samba dan Apache ke direktori yang sama.

Cara sederhananya adalah dengan hanya mengizinkan akses samba baca / tulis di mana saja dengan:

setsebool -P samba_export_all_rw 1

Ini sederhana, mudah, dan tidak mengacaukan dengan sifat aneh SELinux.

Jika Anda khawatir dengan Samba yang memiliki akses penuh ke semua direktori dan hanya ingin mengubah / var / www, coba:

chcon -t public_content_rw_t /var/www
setsebool -P allow_smbd_anon_write 1
setsebool -P allow_httpd_anon_write 1

Ini akan memungkinkan Samba dan Apache menulis akses ke direktori apa pun dengan konteks public_content_rw_t. Perhatikan bahwa chcon hanya memodifikasi / var / www. Setiap direktori baru yang dibuat di bawah / var / www akan menjadi public_content_rw_t, tetapi tidak ada direktori seperti / var / www / html atau / var / www / manual. Jika Anda ingin mengubah segalanya, tambahkan -R ke chcon:

chcon -R -t public_content_rw_t /var/www

Anda dapat melihat melalui halaman wiki CentOS ini untuk mendapatkan petunjuk tentang boolean SELinux lainnya.

David
sumber
Saya mencoba ini dan mengeluh bahwa konteks sudah ditentukan.
Joshua Enfield
Anda benar, sepertinya hal-hal telah berubah sejak saya terakhir kali berurusan dengan SELinux. Saya akan memperbarui jawaban saya dengan beberapa opsi lain.
David
3
@ Sudahkah Anda menyimpan pantat saya. Sampai jumpa di tempat kerja besok.
Joel E Salas
Saya ingin menyebutkan bahwa jika webroot Anda bersarang di share samba, Anda perlu mengatur konteks pada direktori induk juga. Misalnya:chcon -t public_content_rw_t /mnt/share/webroot(/.*)? chcon -t public_content_rw_t /mnt/share
Greg Sheremeta
1
Terima kasih, saya berjuang dengan sesuatu yang serupa tetapi dengan ftp, dan semuanya berfungsi setelah melakukansetsebool -P ftpd_full_access=1
giorgiline
9
SHARING FILES
   If you want to share files with multiple domains (Apache,  FTP,  rsync,
   Samba),  you can set a file context of public_content_t and public_content_rw_t.
   These context allow any of the above domains  to  read  the
   content.   If  you want a particular domain to write to the public_con‐
   tent_rw_t   domain,   you   must   set   the    appropriate    boolean.
   allow_DOMAIN_anon_write.  So for samba you would execute:

       setsebool -P allow_smbd_anon_write=1

Sebagai contoh:

semanage fcontext -a -t public_content_rw_t '/var/www(/.*)?'
restorecon -R /var/www
setsebool -P allow_smbd_anon_write 1
hm2k
sumber