====== 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