====== Nextcloud ====== Różne notatki na różne tematy. ==== SELinux dla Nextclouda w RHEL/Centos/Fedora ==== semanage fcontext -a -t httpd_sys_rw_content_t '/var/www/nextcloud/data(/.*)?' semanage fcontext -a -t httpd_sys_rw_content_t '/var/www/nextcloud/3rdparty/aws/aws-sdk-php/src/data/logs(/.*)?' semanage fcontext -a -t httpd_sys_rw_content_t '/var/www/nextcloud/config(/.*)?' semanage fcontext -a -t httpd_sys_rw_content_t '/var/www/nextcloud/apps(/.*)?' semanage fcontext -a -t httpd_sys_rw_content_t '/var/www/nextcloud/.htaccess' semanage fcontext -a -t httpd_sys_rw_content_t '/var/www/nextcloud/.user.ini' restorecon -Rv '/var/www/nextcloud/' setsebool -P httpd_can_network_connect on Bez tej ostatniej linijki Nextcloud działa, ale nie łączy się ze swoim appstore. ---- ==== Nextcloud update verify failed ==== Nextcloud podczas aktualizacji zwraca czasem błąd podczas weryfikowania plików, ale nie pokazuje o jakie pliki chodzi. W logach pojawi się: [Thu Dec 17 08:54:39.030667 2020] [access_compat:error] [pid 2539155:tid 2539155] [client ip.ip.ip.ip:58528] AH01797: client denied by server configuration: /var/www/nextcloud/data/.ocdata [Thu Dec 17 08:55:49.233080 2020] [proxy_fcgi:error] [pid 2551714:tid 2551714] [client ip.ip.ip.ip:58536] AH01071: Got error 'PHP message: PHP Fatal error: Allowed memory size of 134217728 bytes exhausted (tried to allocate 142333816 bytes) in /var/www/nextcloud/updater/index.php on line 754' Należy wówczas, na czas aktualizacji, zwiększyć pamięć dla PHP do 512 megabajtów: ; Maximum amount of memory a script may consume (128MB) memory_limit = 512M Po aktualizacji można zmniejszyć limit z powrotem do 128. Nextcloud działa dobrze przy ograniczonej pamięci, nie działa jedynie aktualizator. ---- ==== 504 podczas aktualizacji ==== Inny problem z aktualizacją Nextclouda to tworzenie kopii zapasowej przez aktualizator. Jeżeli danych jest sporo, a serwer niezbyt szybki, Apache zwróci błąd 504. Dzieje się tak, ponieważ aktualizacja jest kontrolowana przez dedykowanego użytkownika i proces php-fpm, więc z punktu widzenia Apache następuje Gateway Timeout. Bez utworzenia kopii zapasowej aktualizacja Nextclouda się nie powiedzie. Wówczas należy: * usunąć plik /var/www/[katalog_nextcloud]/data/updater-[tag]/.step * dodać do vhosta w sekcji linjkę //ProxyTimeout 480// * przeładować Apache * odświeżyć stronę aktualizatora i dokończyć aktualizację. Po zakończonej aktualizacji można dodać komentarz przed linijką ProxyTimeout, ponieważ podczas zwyczajnej pracy Nextcloud odpowiada znacznie szybciej. ---- ==== PHP 8.1 i wyższy ==== Oficjalnie Nextcloud 23.x działa tylko do PHP 8.0, ale można go skłonić do pracy na 8.1. Należy poprawić zmienną (właście stałą) PHP_VERSION_ID w pliku lib/versioncheck.php // Show warning if > PHP 8.0 is used as Nextcloud is not compatible with > PHP 8.0 for now if (PHP_VERSION_ID >= 90100) { http_response_code(500); echo 'This version of Nextcloud is not compatible with > PHP 8.0.
'; echo 'You are currently running ' . PHP_VERSION . '.'; exit(1); }
Trzeba to poprawić przy każdej aktualizacji Nextclouda, ponieważ plik będzie nadpisywany. ---- ==== Owncloud i Brute-Force Protection ==== Po zainstalowaniu rozszerzenia //Brute-Force Protection// nie ma jak zdjąć banów, ponieważ rozszerzenie nie posiada takiej funkcjonalności. Poniżej skrypt Basha, który usuwa bany zapytaniami do bazy. Należy w nim poprawić: * nazwę bazy ownclouda i przedrostek tabel, * podsieci VPN oraz lokalnej. Żeby skrypt mógł działać na bazie danych, uruchamiający go użytkownik (na przykład root) powinien mieć plik //.my.cnf// pozwalający na logowanie się bez podawania hasła. #!/usr/bin/bash # unban IP addresses from Owncloud application firewall if [ "$1" = "--ip" ] ; then # unban single IP address if [ -z $2 ] ; then echo "Add ip address, or use --help" else mysql -e "delete from owncloud.oc_bfp_failed_logins where ip = '${2}';" fi elif [ "$1" = "--vpn" ] ; then # unban all VPN users mysql -e "delete from owncloud.oc_bfp_failed_logins where ip like '172.30.50.%';" mysql -e "delete from owncloud.oc_bfp_failed_logins where ip like '172.30.51.%';" mysql -e "delete from owncloud.oc_bfp_failed_logins where ip = '192.168.60.254';" elif [ "$1" = "--all" ] ; then # unban all IP addresses mysql -e "delete from owncloud.oc_bfp_failed_logins;" elif [ "$1" = "--user" ] ; then # unban single user if [ -z $2 ] ; then echo "Add username, or use --help" else mysql -e "delete from owncloud.oc_bfp_failed_logins where uid = '${2}';" fi elif [ "$1" = "--list" ] ; then # list users and IP addresses mysql -e "select uid as user, \ ip as ip_address, \ FROM_UNIXTIME(attempted_at) as login_attempt \ from owncloud.oc_bfp_failed_logins \ order by 3;" # help elif [ "$1" = "--help" ] || [ -z $1 ] ; then # echo some instructions echo -e "Unban users from Owncloud login page.\r Please specify:\r owncloud_unban --list to view all banned IP's,\r owncloud_unban --all to unban all IP's,\r owncloud_unban --ip [ip.ip.ip.ip] to unban single IP address,\r owncloud_unban --vpn to unban all IP's from VPN and internal networks,\r owncloud_unban --user [username] to unban user." else echo "That did nothing. Try owncloud_unban --help" fi ---- ==== Nextcloud za proxy ==== Po migracji Nextclouda za proxy wszystko działa, ale niektóre klienty się gubią. Klient na Androida pokazuje status "serwer w trybie konserwacji". Nie działa również funkcjonalność //instant upload//. Pomaga wówczas dodanie nowej linijki do pliki config.php 'overwriteprotocol' => 'https', źródło: * https://github.com/nextcloud/android/issues/5945#issuecomment-619783927 * https://docs.nextcloud.com/server/18/admin_manual/configuration_server/reverse_proxy_configuration.html#overwrite-parameters ---- ==== Podstawione RootCA ==== Nextcloud jest za http proxy, które podstawia certyfikat i blokuje wyjście aplikacji do internetu, na przykład e2guardian. Nextcloud nie ufa certyfikatom z pliku ///etc/ssl/certs/ca-bundle.crt//, więc trzeba dodać certyfikat e2guardiana do aplikacji Nextcloud: sudo -u uzytkownikaplikacyjny /usr/bin/php /sciezka/do/pliku/public_html/occ security:certificates:import /tmp/e2.crt