4 votos

Montar un recurso compartido de CIFS falla con: resultado Numérico fuera de rango

Montar un recurso compartido de cifs en RHEL7 se produce el siguiente error: "error de montaje: no se pudo analizar las opciones de montaje: resultado Numérico fuera de rango"

# LIBMOUNT_DEBUG=0xffff mount //fileserver/db-mysql /mnt/mysqlBackups -t cifs -o credentials=/etc/samba/fileserver.password,forceuid,uid=mysql,forcegid,gid=mysql,file_mode=0664,dir_mode=0775 -v

5561: libmount:     INIT: library debug mask: 0xffff
5561: libmount:     INIT: library version: 2.23.0
5561: libmount:     INIT:     feature: selinux
5561: libmount:     INIT:     feature: debug
5561: libmount:     INIT:     feature: assert
5561: libmount:      CXT: [0x7ff506842050]: ----> allocate
5561: libmount:    UTILS: mtab: /etc/mtab
5561: libmount:    UTILS: /etc/mtab: irregular/non-writable
5561: libmount:    UTILS: utab: /run/mount/utab
5561: libmount:      CXT: [0x7ff506842050]: enabling flag 0010
5561: libmount:      CXT: [0x7ff506842050]: mount: preparing
5561: libmount:      CXT: [0x7ff506842050]: use default optmode
5561: libmount:      CXT: [0x7ff506842050]: OPTSMODE: ignore=0, append=0, prepend=1, replace=0, force=0, fstab=1, mtab=1
5561: libmount:      CXT: [0x7ff506842050]: fstab not required -- skip
5561: libmount:      CXT: [0x7ff506842050]: merging mount flags
5561: libmount:      CXT: [0x7ff506842050]: final flags: VFS=00000000 user=00000000
5561: libmount:      CXT: [0x7ff506842050]: mount: evaluating permissions
5561: libmount:      CXT: [0x7ff506842050]: mount: fixing optstr
5561: libmount:      CXT: [0x7ff506842050]: mount: fixing vfs optstr
5561: libmount:      CXT: applying 0x00000000 flags to '(null)'
5561: libmount:      CXT: new optstr 'rw'
5561: libmount:      CXT: [0x7ff506842050]: mount: fixing user optstr
5561: libmount:      CXT: applying 0x00000000 flags to '(null)'
5561: libmount:      CXT: new optstr '(null)'
5561: libmount:      CXT: fixing uid
5561: libmount:      CXT: fixing gid
5561: libmount:    UTILS: cannot convert 'mysql' groupname to GID
5561: libmount:      CXT: [0x7ff506842050]: fixed options [rc=-34]: vfs: 'rw' fs: 'credentials=/etc/samba/fileserver.password,forceuid,uid=27,forcegid,gid=mysql,file_mode=0664,dir_mode=0775' user: '(null)', optstr: 'credentials=/etc/samba/fileserver.password,forceuid,uid=mysql,forcegid,gid=mysql,file_mode=0664,dir_mode=0775'
5561: libmount:      CXT: [0x7ff506842050]: mount: preparing failed
mount: failed to parse mount options: Numerical result out of range
5561: libmount:      CXT: [0x7ff506842050]: <---- reset [status=0] ---->
5561: libmount:      CXT: [0x7ff506842050]: tabfiler disabled
5561: libmount:      CXT: [0x7ff506842050]: <---- free

El mysql existe el grupo:

# getent group mysql
mysql:x:27:
# grep mysql /etc/group
mysql:x:27:
# id mysql
uid=27(mysql) gid=27(mysql) groups=27(mysql)
# ls -lZ /etc/group /etc/passwd
-rw-r--r--. root root system_u:object_r:passwd_file_t:s0 /etc/group
-rw-r--r--. root root system_u:object_r:passwd_file_t:s0 /etc/passwd

Lo que si es interesante es que el uso directamente mount.cifs está trabajando:

# mount.cifs //fileserver/db-mysql /mnt/mysqlBackups --verbose -o credentials=/etc/samba/fileserver.password,forceuid,uid=mysql,forcegid,gid=mysql,file_mode=0664,dir_mode=0775
Credential formatted incorrectly: (null)
domain=fileserver
mount.cifs kernel mount options: ip=10.1.2.20,unc=\\fileserver\db-mysql,forceuid,forcegid,file_mode=0664,dir_mode=0775,uid=27,gid=27,user=svc_linux,,domain=fileserver,pass=********

# grep /mnt/mysqlBackups /proc/mounts
//fileserver/db-mysql /mnt/mysqlBackups cifs rw,relatime,vers=1.0,cache=strict,username=svc_linux,domain=fileserver,uid=27,forceuid,gid=27,forcegid,addr=10.1.2.20,file_mode=0664,dir_mode=0775,nounix,serverino,rsize=61440,wsize=65536,actimeo=1 0 0

Esto ocurre en:

# uname -rvpio
3.10.0-327.36.1.el7.x86_64 #1 SMP Sun Sep 18 13:04:29 UTC 2016 x86_64 x86_64 GNU/Linux

Mismo problema en:

# uname -rvpio
3.10.0-327.36.3.el7.x86_64 #1 SMP Mon Oct 24 16:09:20 UTC 2016 x86_64 x86_64 GNU/Linux

el monte y el monte.cifs son la versión más reciente para RHEL7:

# rpm -q util-linux cifs-utils
util-linux-2.23.2-26.el7_2.3.x86_64
cifs-utils-6.2-7.el7.x86_64

Parece que getgrnam_r(3) llamada falla.

Edit 1:
Quiero usar nombres de usuario y grupo y no UID GID. Sé que desde Identificadores numéricos puedo resolver el problema. Sé que la eliminación de gid=mysql va a trabajar. Por qué para el usuario del montaje es capaz de encontrar UID, pero para grup de no encontrar GID?

Edit 2: El error parece ser lanzado por este código: https://github.com/karelzak/util-linux/blob/master/libmount/src/utils.c#L703

Por lo que he intentado reproducir con el siguiente código, pero la llamada es correcta. Lo cual es muy extraño para mí. Lo siento por el mal de código C, yo no soy un programador.

#include <stdio.h>
#include <errno.h>
#include <stdlib.h>
#include <sys/types.h>
#include <grp.h>
#define UL_GETPW_BUFSIZ (16 * 1024)

int main(void)
{
    int rc = -1;
    struct group grp;
    struct group *gr;
    char *buf;
    int _gid=10;
    gid_t *gid = (gid_t *)& _gid;
    char *groupname = "mysql";

    if (!groupname || !gid)
        return -EINVAL;

    buf = malloc(UL_GETPW_BUFSIZ);
    if (!buf)
        return -ENOMEM;

    if (!getgrnam_r(groupname, &grp, buf, UL_GETPW_BUFSIZ, &gr) && gr) {
        *gid= gr->gr_gid;
        printf("gid=%i\n",*gid);
        rc = 0;
    } else {
        printf("cannot convert '%s' groupname to GID\n", groupname);
        rc = errno ? -errno : -EINVAL;
    }

    free(buf);

    return rc;
}
// vim:ts=4:sts=4:sw=4:et:

No se informa de errores:

# gcc -Wall -W test.c
# ./a.out
gid=27
#

Edit 3: Si trato con gid=dbus está trabajando:

# egrep 'mysql|dbus' /etc/passwd /etc/shadow /etc/group /etc/gshadow
/etc/passwd:dbus:x:81:81:System message bus:/:/sbin/nologin
/etc/passwd:mysql:x:27:27:Percona Server:/var/lib/mysql:/bin/false
/etc/shadow:dbus:!!:17086::::::
/etc/shadow:mysql:!!:17104::::::
/etc/group:dbus:x:81:
/etc/group:mysql:x:27:
/etc/gshadow:dbus:!::
/etc/gshadow:mysql:!::
# LIBMOUNT_DEBUG=0xffff  mount //fileserver/db-mysql /mnt/mysqlBackups -t cifs -o credentials=/etc/samba/fileserver.password,forceuid,uid=mysql,forcegid,file_mode=0664,dir_mode=0775,gid=dbsu
10777: libmount:     INIT: library debug mask: 0xffff
10777: libmount:     INIT: library version: 2.23.0
10777: libmount:     INIT:     feature: selinux
10777: libmount:     INIT:     feature: debug
10777: libmount:     INIT:     feature: assert
10777: libmount:      CXT: [0x7f687bf74050]: ----> allocate
10777: libmount:    UTILS: mtab: /etc/mtab
10777: libmount:    UTILS: /etc/mtab: irregular/non-writable
10777: libmount:    UTILS: utab: /run/mount/utab
10777: libmount:      CXT: [0x7f687bf74050]: mount: preparing
10777: libmount:      CXT: [0x7f687bf74050]: use default optmode
10777: libmount:      CXT: [0x7f687bf74050]: OPTSMODE: ignore=0, append=0, prepend=1, replace=0, force=0, fstab=1, mtab=1
10777: libmount:      CXT: [0x7f687bf74050]: fstab not required -- skip
10777: libmount:      CXT: [0x7f687bf74050]: merging mount flags
10777: libmount:      CXT: [0x7f687bf74050]: final flags: VFS=00000000 user=00000000
10777: libmount:      CXT: [0x7f687bf74050]: mount: evaluating permissions
10777: libmount:      CXT: [0x7f687bf74050]: mount: fixing optstr
10777: libmount:      CXT: [0x7f687bf74050]: mount: fixing vfs optstr
10777: libmount:      CXT: applying 0x00000000 flags to '(null)'
10777: libmount:      CXT: new optstr 'rw'
10777: libmount:      CXT: [0x7f687bf74050]: mount: fixing user optstr
10777: libmount:      CXT: applying 0x00000000 flags to '(null)'
10777: libmount:      CXT: new optstr '(null)'
10777: libmount:      CXT: fixing uid
10777: libmount:      CXT: fixing gid
10777: libmount:    UTILS: cannot convert 'dbsu' groupname to GID
10777: libmount:      CXT: [0x7f687bf74050]: fixed options [rc=-34]: vfs: 'rw' fs: 'credentials=/etc/samba/fileserver.password,forceuid,uid=27,forcegid,file_mode=0664,dir_mode=0775,gid=dbsu' user: '(null)', optstr: 'credentials=/etc/samba/fileserver.password,forceuid,uid=mysql,forcegid,file_mode=0664,dir_mode=0775,gid=dbsu'
10777: libmount:      CXT: [0x7f687bf74050]: mount: preparing failed
mount: failed to parse mount options: Numerical result out of range
10777: libmount:      CXT: [0x7f687bf74050]: <---- reset [status=0] ---->
10777: libmount:      CXT: [0x7f687bf74050]: tabfiler disabled
10777: libmount:      CXT: [0x7f687bf74050]: <---- free

3voto

SmallLoanOf1M Puntos 1039

Su CIFS habilitado el sistema no puede asignar el nombre de grupo mysql a GID 27, y en su lugar se intenta analizar mysql como GID numérico valor. Esta es, obviamente, va a estar fuera de rango, porque es una cadena en lugar de un int. No tengo claro aún si esto es un error en el host o cliente.

Si la estética del grupo y el nombre de usuario mysql y el acompañamiento de IDENTIFICACIÓN no es en ambos servidores, a continuación, fije que a través de la groupmod de comandos o a través de la edición de la /etc/group archivo. Si el UID y el GID deseado es el mismo en ambos hosts, o un fijo predeterminado (como mysql, 27 ), a continuación, especifique el GUID y el líquido por el número, no por su nombre. Eso es un poco de un parche, pero es probable que el trabajo.

Además de la investigación de por qué se está fallando para asignar nombre a un número de Id está garantizado. Hemos sido capaces de utilizar cosméticos nombres de usuario y grupo desde el monte.cifs 1.10. Entonces de nuevo, si usted no está invocando el monte.cifs ayudante en su habitual proceso de montaje de este volumen, usted probablemente no será capaz de utilizar cosméticos nombres a menos que sea explícitamente implementado en cualquier ayudante en la que se está utilizando en su lugar.

EnMiMaquinaFunciona.com

EnMiMaquinaFunciona es una comunidad de administradores de sistemas en la que puedes resolver tus problemas y dudas.
Puedes consultar las preguntas de otros sysadmin, hacer tus propias preguntas o resolver las de los demás.

Powered by: