Nextcloud nur admin login möglich

Status
Für weitere Antworten geschlossen.

chrittig

Benutzer
Mitglied seit
03. Dez 2012
Beiträge
28
Punkte für Reaktionen
0
Punkte
0
Hallo zusammen!

Ich habe eine DS918+ mit einer Nextcloud 13.0.1
Webserver ist Apache 2.4 mit PHP 7.0

Vor einigen Tagen fiel mir auf, dass mein Thunderbird nicht mehr an meine Kontakte kommt. Er meldet da immer Loginfehler. Syncronisation mit der Desktop App funktioniert. Genauso komme ich mit der Android App an meine Daten. Was nicht geht: Login über die Weboberfläche. mit der Adminkennung kann ich mich einloggen. mit meinem User nicht. Testweise habe ich einen neuen User angelegt und versucht mich mit diesem einzuloggen. Bei beiden zeigt der Browser einen 504 Timeout an.
Verschiedene Browser habe ich auch getestet.

Das Errorlog vom Apachen schmeißt sowas hier aus:
Rich (BBCode):
019-02-07T07:11:51+01:00 blackowl [Thu Feb 07 07:11:51.134565 2019] [proxy_fcgi:error] [pid 5926:tid 139846848857856] (70007)The timeout specified has expired: [client 192.168.178.29:38296] AH01075: Error dispatching request to : (polling)

Ich habe gerade keine Idee, wo ich ansetzen könnte. Könnt Ihr mich mal in eine Richtung schubsen?

Danke und Gruß
Chrittig
 

TeXniXo

Benutzer
Mitglied seit
07. Mai 2012
Beiträge
4.948
Punkte für Reaktionen
99
Punkte
134
Fehler 504 = Gateway / Proxy-Server TimeOut.
Das hat mE nichts mit User zu tun. Wieso du dich via Admin einloggen hast können, vermute ich, dass es an Caches o.ä. liegt?

Wie sind die DS-Einstellungen von Gateway bei dir? (siehst unter Netzwerk)
 

chrittig

Benutzer
Mitglied seit
03. Dez 2012
Beiträge
28
Punkte für Reaktionen
0
Punkte
0
Genau, die Fehlermeldung passt nicht. Deswegen habe ich auch drei Browser getestet... Das Protokoll der Nexcloud sagt übrigens "failed login in fews Seconds"(!) und dann dauert es bestimmt 10 Sekunden bis der Browser die 504 anzeigt.

Das IPv4 Gateway ist auf meine Fritzbox eingestellt. das IPv6 Gateway ist leer.

Auf der Konsole hat der occ Probleme:
Rich (BBCode):
php ./occ -help
An unhandled exception has been thrown:
exception 'Doctrine\DBAL\DBALException' with message 'Failed to connect to the database: An exception occured in driver: could not find driver' in /volume1/web/nextcloud/lib/private/DB/Connection.php:64
Stack trace:
#0 /volume1/web/nextcloud/3rdparty/doctrine/dbal/lib/Doctrine/DBAL/Connection.php(429): OC\DB\Connection->connect()
#1 /volume1/web/nextcloud/3rdparty/doctrine/dbal/lib/Doctrine/DBAL/Connection.php(389): Doctrine\DBAL\Connection->getDatabasePlatformVersion()
#2 /volume1/web/nextcloud/3rdparty/doctrine/dbal/lib/Doctrine/DBAL/Connection.php(328): Doctrine\DBAL\Connection->detectDatabasePlatform()
#3 /volume1/web/nextcloud/3rdparty/doctrine/dbal/lib/Doctrine/DBAL/Connection.php(623): Doctrine\DBAL\Connection->getDatabasePlatform()
#4 /volume1/web/nextcloud/lib/private/DB/Connection.php(151): Doctrine\DBAL\Connection->setTransactionIsolation(2)
#5 /volume1/web/nextcloud/3rdparty/doctrine/dbal/lib/Doctrine/DBAL/DriverManager.php(172): OC\DB\Connection->__construct(Array, Object(Doctrine\DBAL\Driver\PDOMySql\Driver), Object(Doctrine\DBAL\Configuration), Object(Doctrine\Common\EventManager))
#6 /volume1/web/nextcloud/lib/private/DB/ConnectionFactory.php(153): Doctrine\DBAL\DriverManager::getConnection(Array, Object(Doctrine\DBAL\Configuration), Object(Doctrine\Common\EventManager))
#7 /volume1/web/nextcloud/lib/private/Server.php(628): OC\DB\ConnectionFactory->getConnection('mysql', Array)
#8 /volume1/web/nextcloud/3rdparty/pimple/pimple/src/Pimple/Container.php(113): OC\Server->OC\{closure}(Object(OC\Server))
#9 /volume1/web/nextcloud/lib/private/AppFramework/Utility/SimpleContainer.php(116): Pimple\Container->offsetGet('OCP\\IDBConnecti...')
#10 /volume1/web/nextcloud/lib/private/ServerContainer.php(132): OC\AppFramework\Utility\SimpleContainer->query('OCP\\IDBConnecti...')
#11 /volume1/web/nextcloud/lib/private/AppFramework/Utility/SimpleContainer.php(164): OC\ServerContainer->query('OCP\\IDBConnecti...')
#12 /volume1/web/nextcloud/3rdparty/pimple/pimple/src/Pimple/Container.php(109): OC\AppFramework\Utility\SimpleContainer->OC\AppFramework\Utility\{closure}(Object(OC\Server))
#13 /volume1/web/nextcloud/lib/private/AppFramework/Utility/SimpleContainer.php(116): Pimple\Container->offsetGet('DatabaseConnect...')
#14 /volume1/web/nextcloud/lib/private/ServerContainer.php(132): OC\AppFramework\Utility\SimpleContainer->query('DatabaseConnect...')
#15 /volume1/web/nextcloud/lib/private/Server.php(1511): OC\ServerContainer->query('DatabaseConnect...')
#16 /volume1/web/nextcloud/lib/private/Server.php(332): OC\Server->getDatabaseConnection()
#17 /volume1/web/nextcloud/3rdparty/pimple/pimple/src/Pimple/Container.php(113): OC\Server->OC\{closure}(Object(OC\Server))
#18 /volume1/web/nextcloud/lib/private/AppFramework/Utility/SimpleContainer.php(116): Pimple\Container->offsetGet('OC\\Authenticati...')
#19 /volume1/web/nextcloud/lib/private/ServerContainer.php(132): OC\AppFramework\Utility\SimpleContainer->query('OC\\Authenticati...')
#20 /volume1/web/nextcloud/lib/private/Server.php(336): OC\ServerContainer->query('OC\\Authenticati...')
#21 /volume1/web/nextcloud/3rdparty/pimple/pimple/src/Pimple/Container.php(113): OC\Server->OC\{closure}(Object(OC\Server))
#22 /volume1/web/nextcloud/lib/private/AppFramework/Utility/SimpleContainer.php(116): Pimple\Container->offsetGet('OC\\Authenticati...')
#23 /volume1/web/nextcloud/lib/private/ServerContainer.php(132): OC\AppFramework\Utility\SimpleContainer->query('OC\\Authenticati...')
#24 /volume1/web/nextcloud/lib/private/AppFramework/Utility/SimpleContainer.php(164): OC\ServerContainer->query('OC\\Authenticati...')
#25 /volume1/web/nextcloud/3rdparty/pimple/pimple/src/Pimple/Container.php(109): OC\AppFramework\Utility\SimpleContainer->OC\AppFramework\Utility\{closure}(Object(OC\Server))
#26 /volume1/web/nextcloud/lib/private/AppFramework/Utility/SimpleContainer.php(116): Pimple\Container->offsetGet('OC\\Authenticati...')
#27 /volume1/web/nextcloud/lib/private/ServerContainer.php(132): OC\AppFramework\Utility\SimpleContainer->query('OC\\Authenticati...')
#28 /volume1/web/nextcloud/lib/private/Server.php(352): OC\ServerContainer->query('OC\\Authenticati...')
#29 /volume1/web/nextcloud/3rdparty/pimple/pimple/src/Pimple/Container.php(113): OC\Server->OC\{closure}(Object(OC\Server))
#30 /volume1/web/nextcloud/lib/private/AppFramework/Utility/SimpleContainer.php(116): Pimple\Container->offsetGet('OCP\\IUserSessio...')
#31 /volume1/web/nextcloud/lib/private/ServerContainer.php(132): OC\AppFramework\Utility\SimpleContainer->query('OCP\\IUserSessio...')
#32 /volume1/web/nextcloud/lib/private/AppFramework/Utility/SimpleContainer.php(164): OC\ServerContainer->query('OCP\\IUserSessio...')
#33 /volume1/web/nextcloud/3rdparty/pimple/pimple/src/Pimple/Container.php(109): OC\AppFramework\Utility\SimpleContainer->OC\AppFramework\Utility\{closure}(Object(OC\Server))
#34 /volume1/web/nextcloud/lib/private/AppFramework/Utility/SimpleContainer.php(116): Pimple\Container->offsetGet('UserSession')
#35 /volume1/web/nextcloud/lib/private/ServerContainer.php(132): OC\AppFramework\Utility\SimpleContainer->query('UserSession')
#36 /volume1/web/nextcloud/lib/private/Server.php(1380): OC\ServerContainer->query('UserSession')
#37 /volume1/web/nextcloud/lib/private/Server.php(688): OC\Server->getUserSession()
#38 /volume1/web/nextcloud/3rdparty/pimple/pimple/src/Pimple/Container.php(113): OC\Server->OC\{closure}(Object(OC\Server))
#39 /volume1/web/nextcloud/lib/private/AppFramework/Utility/SimpleContainer.php(116): Pimple\Container->offsetGet('OC\\App\\AppManag...')
#40 /volume1/web/nextcloud/lib/private/ServerContainer.php(132): OC\AppFramework\Utility\SimpleContainer->query('OC\\App\\AppManag...')
#41 /volume1/web/nextcloud/lib/private/AppFramework/Utility/SimpleContainer.php(164): OC\ServerContainer->query('OC\\App\\AppManag...')
#42 /volume1/web/nextcloud/3rdparty/pimple/pimple/src/Pimple/Container.php(109): OC\AppFramework\Utility\SimpleContainer->OC\AppFramework\Utility\{closure}(Object(OC\Server))
#43 /volume1/web/nextcloud/lib/private/AppFramework/Utility/SimpleContainer.php(116): Pimple\Container->offsetGet('AppManager')
#44 /volume1/web/nextcloud/lib/private/ServerContainer.php(132): OC\AppFramework\Utility\SimpleContainer->query('AppManager')
#45 /volume1/web/nextcloud/lib/private/Server.php(1684): OC\ServerContainer->query('AppManager')
#46 /volume1/web/nextcloud/lib/private/legacy/app.php(332): OC\Server->getAppManager()
#47 /volume1/web/nextcloud/lib/private/legacy/app.php(113): OC_App::getEnabledApps()
#48 /volume1/web/nextcloud/lib/base.php(661): OC_App::loadApps(Array)
#49 /volume1/web/nextcloud/lib/base.php(1080): OC::init()
#50 /volume1/web/nextcloud/console.php(46): require_once('/volume1/web/ne...')
#51 /volume1/web/nextcloud/occ(11): require_once('/volume1/web/ne...')

Ich suche noch den Zusammenhang zwischen den Symptomen
 

Fusion

Benutzer
Sehr erfahren
Mitglied seit
06. Apr 2013
Beiträge
14.137
Punkte für Reaktionen
898
Punkte
424
Wie ist denn dein genaues Web-Server Setup für die Nextcloud?
Liest sich nämlich nach nicht passender config bezüglich der PHP Module für den Datenbankzugriff oder der open_Basedir Beschränkungen.
 

chrittig

Benutzer
Mitglied seit
03. Dez 2012
Beiträge
28
Punkte für Reaktionen
0
Punkte
0
Das OpenbaseDir ist leer. Darüber habe ich auch schon nachgedacht.
Ich habe für die nextcloud keinen vhost angelegt.

Rich (BBCode):
root@blackowl:/etc/php# cat php.ini 

	
	


PHP:
engine = On
short_open_tag = On
asp_tags = Off
precision = 14
output_buffering = 4096
zlib.output_compression = Off
implicit_flush = Off
serialize_precision = 17
disable_functions =
disable_classes =
zend.enable_gc = On
expose_php = Off
max_execution_time = 240
max_input_time = 60
memory_limit = 256M
error_reporting = E_ALL & ~E_NOTICE & ~E_STRICT & ~E_DEPRECATED
display_startup_errors = Off
log_errors = On
log_errors_max_len = 1024
ignore_repeated_errors = Off
ignore_repeated_source = Off
report_memleaks = On
track_errors = Off
html_errors = Off
variables_order = "GPCS"
request_order = "GP"
register_argc_argv = Off
auto_globals_jit = On
post_max_size = 32M
default_mimetype = "text/html"
default_charset = "UTF-8"
include_path = "."
extension_dir = "/usr/lib/php/modules"
sys_temp_dir = "/var/services/tmp"
enable_dl = Off
file_uploads = On
upload_tmp_dir = "/var/services/tmp"
upload_max_filesize = 32M
max_file_uploads = 20
allow_url_fopen = On
allow_url_include = Off
default_socket_timeout = 60

extension = bcmath.so
extension = bz2.so
extension = curl.so
extension = iconv.so
extension = ldap.so
extension = mcrypt.so
extension = openssl.so
extension = pdo_sqlite.so
extension = posix.so
extension = phar.so
extension = shmop.so
extension = sockets.so
extension = sqlite3.so
extension = zip.so

extension = syno_compiler.so

[CLI Server]
cli_server.color = On

[Date]
date.timezone = Europe/Amsterdam

[Phar]
phar.readonly = Off

[mail function]
sendmail_path = /usr/bin/ssmtp -t
mail.add_x_header = On

[SQL]
sql.safe_mode = Off

[bcmath]
bcmath.scale = 0

[Session]
session.save_handler = files
session.save_path = "/var/services/tmp"
session.use_cookies = 1
session.use_only_cookies = 0
session.name = PHPSESSID
session.auto_start = 0
session.cookie_lifetime = 0
session.cookie_path = /
session.cookie_domain =
session.cookie_httponly =
session.serialize_handler = php
session.gc_probability = 1
session.gc_divisor = 1000
session.gc_maxlifetime = 1440
session.bug_compat_42 = Off
session.bug_compat_warn = Off
session.referer_check =
session.entropy_length = 0
session.cache_limiter = nocache
session.cache_expire = 180
session.use_trans_sid = 0
session.hash_function = 0
session.hash_bits_per_character = 5
url_rewriter.tags = "a=href,area=href,frame=src,input=src,form=fakeentry"
session.upload_progress.enabled = On
session.upload_progress.cleanup = On
session.upload_progress.prefix = "upload_progress_"
session.upload_progress.name = "PHP_SESSION_UPLOAD_PROGRESS"
session.upload_progress.freq = "1%"
session.upload_progress.min_freq = "1"
[/CODE]


Apachen Config 

[CODE=rich]ServerRoot "/usr/local/etc/apache24"

Listen 127.0.0.1:915

LoadModule authn_core_module modules/mod_authn_core.so
LoadModule authn_file_module modules/mod_authn_file.so
LoadModule authz_core_module modules/mod_authz_core.so
LoadModule authz_host_module modules/mod_authz_host.so
LoadModule authz_groupfile_module modules/mod_authz_groupfile.so
LoadModule authz_user_module modules/mod_authz_user.so
LoadModule authz_owner_module modules/mod_authz_owner.so
LoadModule auth_basic_module modules/mod_auth_basic.so
LoadModule auth_digest_module modules/mod_auth_digest.so
LoadModule include_module modules/mod_include.so
LoadModule filter_module modules/mod_filter.so
LoadModule deflate_module modules/mod_deflate.so
LoadModule log_config_module modules/mod_log_config.so
#LoadModule logio_module modules/mod_logio.so
LoadModule env_module modules/mod_env.so
LoadModule mime_magic_module modules/mod_mime_magic.so
LoadModule headers_module modules/mod_headers.so
LoadModule setenvif_module modules/mod_setenvif.so
LoadModule mime_module modules/mod_mime.so
LoadModule status_module modules/mod_status.so
LoadModule autoindex_module modules/mod_autoindex.so
LoadModule asis_module modules/mod_asis.so
LoadModule cgid_module modules/mod_cgid.so
LoadModule negotiation_module modules/mod_negotiation.so
LoadModule dir_module modules/mod_dir.so
LoadModule actions_module modules/mod_actions.so
LoadModule alias_module modules/mod_alias.so
LoadModule rewrite_module modules/mod_rewrite.so
LoadModule proxy_module modules/mod_proxy.so
LoadModule proxy_fcgi_module modules/mod_proxy_fcgi.so
LoadModule unixd_module modules/mod_unixd.so

<IfModule unixd_module>
    User http
    Group http
</IfModule>

ErrorLog /run/apache24-error_log
TraceEnable off
LogLevel error

<IfModule log_config_module>
    LogFormat "%{X-Real-IP}i  %l %u %t \"%r\" %>s %b \"%{Referer}i\" \"%{User-Agent}i\"" combined
    LogFormat "%{X-Real-IP}i  %l %u %t \"%r\" %>s %b" common

    <IfModule logio_module>
        LogFormat "%{X-Real-IP}i  %l %u %t \"%r\" %>s %b \"%{Referer}i\" \"%{User-Agent}i\" %I %O" combinedio
    </IfModule>

    CustomLog /dev/null combined
    #CustomLog /run/apache24-access_log combined
</IfModule>

<IfModule cgid_module>
    ScriptSock /run/httpd/user-cgisock
</IfModule>

<IfModule mime_module>
    TypesConfig conf/mime.types
    AddEncoding x-compress Z
    AddEncoding x-gzip gz tgz
    AddType application/x-compress .Z
    AddType application/x-gzip .gz .tgz
    AddType image/x-icon .ico
    AddHandler cgi-script .cgi
</IfModule>

MIMEMagicFile conf/magic
EnableMMAP off

# TODO: AllowOverride of root directory to All ??
<Directory />
    Options FollowSymLinks
    AllowOverride All
</Directory>

# TODO: should apache handle this or nginx?
<IfModule deflate_module>
    DeflateCompressionLevel 2
    AddOutputFilterByType DEFLATE text/html text/plain text/xml
    AddOutputFilter DEFLATE js css
    BrowserMatch ^Mozilla/4 gzip-only-text/html
    BrowserMatch ^Mozilla/4\.[0678] no-gzip
    BrowserMatch \bMSIE\s7  !no-gzip !gzip-only-text/html
</IfModule>

# TODO: should apache handle this or nginx
<Files ~ "^\.([Hh][Tt]|[Dd][Ss]_[Ss])">
    <IfModule authz_core_module>
        Require all denied
    </IfModule>
</Files>

<VirtualHost _default_:80 _default_:443>
    DocumentRoot "/var/services/web"
    Alias /_webstation_/ "/var/packages/WebStation/target/error_page/"
</VirtualHost>

# TODO: Should apapche handle FileETag
# For CVE-2003-1418
FileETag MTime Size

Include conf/extra/httpd-mpm.conf
Include conf/extra/httpd-autoindex.conf
Include conf/extra/httpd-languages.conf
Include conf/extra/mod_xsendfile.conf
Include conf/extra/mod_rpaf.conf

IncludeOptional sites-enabled/*.conf
[/CODE]

Sicherheitsrelevantes bzgl der Config ist verschleiert. 


[CODE=rich]root@blackowl:/volume1/web/nextcloud/config# cat config.php 
<?php
$CONFIG = array (
  'instanceid' => 'XXXXXXXX',
  'passwordsalt' => 'XXXXXXX',
  'secret' => 'XXXXXXXX',
  'trusted_domains' => 
  array (
    0 => 'blackowl',
    1 => 'XXXXXX',
  ),
  'datadirectory' => '/volume1/web/nextcloud/data',
  'overwrite.cli.url' => 'http://blackowl/nextcloud',
  'dbtype' => 'mysql',
  'version' => '13.0.1.1',
  'dbname' => 'nextcloud',
  'dbhost' => '127.0.0.1:3307',
  'dbport' => '',
  'dbtableprefix' => 'oc_',
  'dbuser' => 'XXXXX',
  'dbpassword' => 'XXXXXXXX',
  'installed' => true,
  'maintenance' => false,
);
[/CODE]

Fehlt da noch was?

Danke und Gruß
Chrittig
 

Fusion

Benutzer
Sehr erfahren
Mitglied seit
06. Apr 2013
Beiträge
14.137
Punkte für Reaktionen
898
Punkte
424
Das ist schön, allerdings interessieren die allgemeinen configs normal wenig.

hast du die Web Station installiert?
Welche Einstellungen sind dort getätigt?
Hast du NC als Paket oder direkt vom Hersteller installiert?

Normal interessieren erst mal nur die Einstellungen in der Web Station, auch wenn du kein extra vHost angelegt hast. PHP Profile etc werden trotzdem dort eingestellt.
 

chrittig

Benutzer
Mitglied seit
03. Dez 2012
Beiträge
28
Punkte für Reaktionen
0
Punkte
0
Okay,
Also Webstation ist installiert. wie gesagt kein virtueller Host, persönliche Websiten sind auch deaktiviert. Installiert sind nginx/ apache2.4/php 5.6/php7.0
Allgemeine Einstellungen: Apache 2.4 mit PhP 7.0
Bei PHP 7.0 habe ich nur das Default profile, Cache aktiviert und die display Errors, open_basedir ist kein Haken und keine Einstellung. Neben den Erweiterungen die oben stehen ist noch gd aktiviert.
FPM Dynamisch/20/2/1/3

brauchst du noch was bestimmtes aus dem PHP-Kern Reiter?

Für nextcloud hatte ich ein tar.gz vom hersteller heruntergeladen. ich ging davon aus, dass das einfacher zu aktualisieren ist.

Danke schonmal
Gruß Chrittig
 

Fusion

Benutzer
Sehr erfahren
Mitglied seit
06. Apr 2013
Beiträge
14.137
Punkte für Reaktionen
898
Punkte
424
Welche Module werden im PHP Profil geladen?

Ich bevorzuge einen vHost und ein extra NC PHP Profile. Dann ist alles schön getrennt organisiert und man kommt sich nicht mit anderen in die Quere.
 

chrittig

Benutzer
Mitglied seit
03. Dez 2012
Beiträge
28
Punkte für Reaktionen
0
Punkte
0
Kannst Du mir die vhost COnfig und das PHP Profile zur Verfügung stellen? Dann würde ich das Sonntag (bin jetzt bis Samstag abend unterwegs ) einrichten. Mir ist allerdings noch nicht klar, wie ich meiner Fritzbox beibringe, dass da jetzt nen vhost mit eigenem Namen auf der Synology läuft....

Ich denke, deine Konfig zu übernehmen ist geradde das einfachste...
 

Fusion

Benutzer
Sehr erfahren
Mitglied seit
06. Apr 2013
Beiträge
14.137
Punkte für Reaktionen
898
Punkte
424
Kann ich machen. Ob das das einfachste ist sei mal dahin gestellt (ist halt wieder eine leicht andere Installation wie bei dir. config/config.php und .htaccess auch noch nicht erwähnt).

Nextcloud 14.0.6, MariaDB 5, Apache 2.4, PHP 7.2

PHP 7.2 Profile, name & Beschreibung beliebig
PHP-Cache aktiv
PHP open_basedir aktiv (data Verzeichnis ausgelagert), ":/volume1/apps/nextcloud:/volume1/downloads:/dev/urandom"
PHP Erweiterungen: bz2, curl, exif, ftp, gd, gmp, iconv, imap, intl, ldap, openssl, pdo_mysql, posix, xmlrpc, zip

FPM keine Änderungen

Kern
"opcache"
opcache.enable_cli 1
opcache.revalidate_freq 2
"pdo_mysql"
pdo_mysql.default_socket /tmp/mysql.sock
(muss eventuell mit MariaDB 10 angepasst werden, falls nicht automatisch?)

Der vHost ist einfach eine Domain ala cloud.domain.de, Port 80/443, Doc-root /web/nextcloud, hsts/http/2, Apache 2.4 und das NC PHP Profile.
Zudem gibt es noch einen eigenen cron-job.
Zudem sind eventuell noch Nacharbeiten nötig, je nachdem was die Nextcloud in der Admin-Einstellungs-Oberfläche so meckert. Das ändert sich auch mit jeder Version.

Deiner Fritzbox musst du gar nichts beibringen, solange sie die Port (80) 443 auf die DS leitet und cloud.domain.de irgendwie auf der öffentlichen IP deines Anschlusses landet.
 
Status
Für weitere Antworten geschlossen.
 

Kaffeautomat

Wenn du das Forum hilfreich findest oder uns unterstützen möchtest, dann gib uns doch einfach einen Kaffee aus.

Als Dankeschön schalten wir deinen Account werbefrei.

:coffee:

Hier gehts zum Kaffeeautomat