Was ist die richtige Escape-Methode für Autofs-Mount-Anmeldeinformationsdateien?

Was ist die richtige Escape-Methode für Autofs-Mount-Anmeldeinformationsdateien?

Ich habe Autofs auf CentOS mit konfiguriert /etc/auto.mymount. So etwas wie das hier:

mymount -fstype=cifs,rw,noperm,credentials=/etc/auto.creds.svc_account ://winserver.domain.local/SharedFolder

Dies hat funktioniert und funktioniert bei einigen Mounts immer noch. Allerdings wurde das Passwort für ein Konto geändert, das für die Verbindung mit einem Windows-Server verwendet wird, und dieses enthält jetzt alle möglichen Sonderzeichen. Meine Anmeldeinformationsdatei /etc/auto.creds.svc_accountsieht ungefähr so ​​aus:

username=svc_account
password=AbCd@a;abc{`B"[C\\~/fg9w(G':4##abC}d3.H}v,2]f+c

Natürlich habe ich das obige Passwort geändert, aber es enthält verschiedene nicht alphanumerische Zeichen, die im echten Passwort enthalten sind.

Wenn ich in /var/log/messages nachschaue, sehe ich Folgendes:

Status code returned 0xc000006d NT_STATUS_LOGON_FAILURE
CIFS VFS: Send error in SessSetup = -13
CIFS VFS: cifs_mount failed w/return code = -13

Da sich nur das Passwort geändert hat, gehe ich davon aus, dass es Sonderzeichen enthält, die irgendwie maskiert werden müssen.

Jetzt weiß ich, dass, wenn ich dieses Passwort in die Befehlszeile eingebe, Befehle aufgrund der verschiedenen Sonderzeichen umfallen. Dies kann dadurch vermieden werden, dass jedem von ihnen ein Backslash vorangestellt wird. Zum Beispiel:

password=AbCd@a\;abc{\`B\"[C\\\\~/fg9w\(G\':4##abC}d3.H}v,2]f+c

Aber das hat nicht funktioniert, also übersehe ich offensichtlich etwas. Kann mir jemand erklären, welche Zeichen in einer Anmeldeinformationsdatei maskiert werden müssen und wie das richtig geht?

Antwort1

Ich nehme an, dass die Anmeldeinformationsdatei von gelesen wird mount.cifs, wie bei anderen CIFS-Mounts. Also habe ich mir angesehen:die mount.cifs.cQuelldatei im aktuellen CIFS-Utils-Code, die für Version 6.3 sein sollte. DieCode zum Auslesen des Passwortesnimmt kein Unescape vor, außer dass jedes Komma im passwordFeld der parsed_mount_infoStruktur verdoppelt wird, wie es anscheinend beim Zusammenstellen der Parameter für den mount(2)Aufruf notwendig ist:

/*
 * CIFS has to "escape" commas in the password field so that they don't
 * end up getting confused for option delimiters. Copy password into pw
 * field, turning any commas into double commas.
 */
static int set_password(struct parsed_mount_info *parsed_info, const char *src)
{
    char *dst = parsed_info->password;
    unsigned int i = 0, j = 0;

    while (src[i]) {
        if (src[i] == ',')
            dst[j++] = ',';
        dst[j++] = src[i++];
        if (j > sizeof(parsed_info->password)) {
            fprintf(stderr, "Converted password too long!\n");
            return EX_USAGE;
        }
    }
    dst[j] = '\0';
    parsed_info->got_password = 1;
    return 0;
}

Im Falle einer Datei mit Anmeldeinformationen srczeigt es auf die Position in der Kennwortzeile direkt hinter dem =Zeichen. Alles zwischen dem =Zeichen und dem Ende der Zeile, wie von gelesen, fgets()wird in das Kennwortfeld kopiert. (Das neue Zeilenzeichen wird vor dem Kopieren durch ein Nullbyte ersetzt.) Aber für jede andere Möglichkeit, ein Kennwort festzulegen, wie Umgebungsvariablen, Optionen oder von stdin, wird dieselbe Routine aufgerufen. Wenn das Einbinden des Volumes also über die Befehlszeile funktioniert, ist diese Kommaverdoppelung nicht der Übeltäter.

Sie könnten jedoch in Schwierigkeiten geraten, wenn eine Zeile am Ende Leerzeichen enthält oder Ihre Anmeldeinformationsdatei nicht-UNIX-konforme Zeilenenden hat. Ein am Ende stehendes CR würde als Teil des Passworts gelesen werden, ebenso wie andere am Ende stehende Leerzeichen. Ebenso könnte das Lesen des Passworts fehlschlagen, wenn Ihr Passwort Nicht-ASCII-Zeichen enthält, bei denen die Kodierung der Datei wichtig wäre.

Kurz und knapp:

  • Im Passwort darf nichts maskiert werden
  • Überprüfen Sie, ob das Mounten des CIFS-Volumes über die Befehlszeile funktioniert
  • Überprüfen Sie die Kennwortzeile auf nachstehende Leerzeichen.
  • Überprüfen Sie, ob Ihre Anmeldeinformationsdatei im UNIX-Format vorliegt und keine DOS-Zeilenenden enthält.
  • Überprüfen Sie das Passwort auf Nicht-ASCII-Zeichen (z. B. Umlaute)
  • Überprüfen Sie, ob es mit einem Passwort ohne Kommas funktioniert (eigentlich sollte es keinen Unterschied machen, aber wer weiß)

Antwort2

Hast du evtl. Leerzeichen in der Datei, etwa zwischen den =Zeichen? Ein -13Fehler kann durch Leerzeichen in der Creds-Datei, siehe folgenden Link, verursacht werden. http://thinkinginsoftware.blogspot.com/2011/09/cifs-vfs-cifsmount-failed-return-code.html

Ich frage mich auch, ob dies an einem Kodierungsproblem mit der Datei selbst liegen könnte. Was wird file -bi /etc/auto.creds.svc_accountzurückgegeben? Vielleicht gibt es ein verlorenes Steuerzeichen? Was wird :set listangezeigt, wenn die Datei mit vim geöffnet und ausgeführt wird? Vielleicht war es vorher kein Problem, weil die verwendete Kodierung nur bei bestimmten Zeichen „explodiert“, die bisher nicht im Kennwort vorhanden waren. Die einfachste Möglichkeit zur Fehlerbehebung besteht darin, die Datei neu zu erstellen und es erneut zu versuchen oder das alte Arbeitskennwort mit dem neuen zu vergleichen und festzustellen, welche neuen Sonderzeichen möglicherweise eingeführt wurden.

Antwort3

Ich weiß nicht, ob es für eine Antwort schon zu spät ist, aber für alle anderen, die dieses Problem haben: Ich habe gerade ein paar Stunden damit verbracht, mir den Kopf über eine CentOS6-VM zu zerbrechen und zu versuchen, auf CIFS-Freigaben auf dem Windows 7-Host zuzugreifen.

Was bei mir letztendlich funktioniert hat, war, die Kennwortzeile in der Anmeldeinformationsdatei so zu ändern, dass als Parametername „pass“ verwendet wird. Beispiel:

user=myUserName
domain=MYDOMAIN
pass=myStrongPasswordWithSpecialCharacters

Ich weiß nicht, ob die Sonderzeichen im Passwort beim Parsen der Datei für Probleme gesorgt haben, aber mir ist aufgefallen, dass Benutzername und Passwort in Benutzer und Pass geparst wurden. Deshalb habe ich beschlossen, diesen Schritt zu überspringen und die Werte direkt in die Datei einzufügen.

Hoffe, das hilft jemandem.

Antwort4

Sie sollten oktale ASCII-Codes für Sonderzeichen verwenden können, zB:

SPACE = \040
AMPERSAND = \046

Konsultieren Sie hier die ASCII-Tabelle:http://www.asciitable.com/

Lösung gefunden auf:http://www.linuxforums.org/forum/ubuntu-linux/175662-solved-fstab-special-characters.html

verwandte Informationen