Модуль PAM mkhomedir с уже существующим домом

Во-первых, вам необходимо понять разницу между средой рабочего стола и дистрибутивом.

Дистрибутивы, такие как Ubuntu, CentOS, Fedora, Gentoo и т. Д., Представляют собой просто «наборы пакетов», которые имеют несколько «настроек», чтобы сделать их более желательными. На самом деле, когда вы говорите о «внешнем виде» и «дистрибутиве», вы обычно говорите только о темах и выборе цвета. Что делает дистрибутив хорошим или плохим, больше связано с поддержкой и управлением обновлениями. Для каких пакетов они предоставляют «особую» поддержку, а для каких нужно ждать «основной» поддержки.

DE или Desktop Environments - это "настольный ответ". Gnome, KDE, Unity, Cinnamon, Mate, Fluxbox, xfce и т. Д. И т. Д. Здесь есть много вариантов, но по большей части любой дистрибутив может запускать любую DE.

Для графических "вещей" я бы порекомендовал более легкий DE, например xfce, но вам нужно будет посмотреть на варианты и принять решение. Я стараюсь держаться подальше от мнения, насколько могу.

Самое главное, не вдаваясь в подробности мнений, вы хотите взглянуть на среды рабочего стола, чтобы все выглядело и чувствовалось «правильным». И посмотрите на дистрибутивы, которые заставляют все "работать гладко".

-1
22.02.2018, 02:48
1 ответ

Debe almacenar el UID anterior del usuario en una variable antes de eliminar el usuario.

por ej. aquí hay una versión mejorada de su script que:

  • puede tomar múltiples argumentos de nombre de usuario en la línea de comando
  • cita correctamente todas las variables
  • tiene dos métodos diferentes para fijar la propiedad -elija solo 1.
  • tiene una comprobación de errores muy primitiva. necesita más. Trate de pensar en todas las cosas que podrían salir mal, luego piense en una forma de probarlas y use la función error()para abortar si es necesario. Si tiene un colega que conoce su entorno al que puede mostrar su código y preguntar "¿Qué me estoy perdiendo?", "¿Qué más podría salir mal?" eso seria muy util.

Todavía necesita trabajo antes de que lo considere seguro para usar en mis sistemas, pero es lo suficientemente bueno como ejemplo.

#!/bin/bash

error() {
  local ec="$1" ; shift # first arg is the exit code

  # if there are any more args, they are the error message. print to stderr
  [ -n "$*" ] && echo "$@" >&2

  # exit with $ec if $ec is non-zero
  [ "$ec" -ne 0 ] && exit "$ec"
}

for user in "$@" ; do 
  OLDUID=$(getent -s files passwd "$user" | cut -d : -f 3)
  [ -z "$OLDUID" ] && error 1 "user '$user' is not local"

  NEWUID=$(getent -s ldap passwd "$user" | cut -d : -f 3)

  if [ -z "$NEWUID" ] ; then
    # user exists locally but there is no corresponding LDAP user
    # so delete the user and their home dir.  This **definitely** needs
    # more sanity checking to make sure you're not deleting root or some
    # other important account.  Maybe check that [ "$OLDUID" -ge 1000 ]
    # (or 500 or whatever the lowest normal-user uid is on your system)

    userdel -r "$user"

  elif [ "$OLDUID" -ne "$NEWUID" ]; then
    # both local and LDAP user exist.  UIDs are different, so delete the local
    # user and change ownership of their files to the the LDAP uid.

    # Method 1:
    #homedir=$(getent -s files passwd "$user" | cut -d : -f 6)
    #userdel "$user"
    #chown -R "$user" "$homedir"
    #find /tmp /var/tmp -uid "$OLDUID" -exec chown "$NEWUID" {} +

    # Method 2:
    #userdel "$user"
    #find / -uid "$OLDUID" -exec chown "$NEWUID" {} +
  else
    # both exist, delete local user. UIDs are equal, no need to chown anything.

    userdel "$user"
  fi
done

Por cierto, como este script maneja múltiples argumentos de nombre de usuario, es posible que desee usar error 0...en lugar de error 1...para registrar problemas en stderr sin cancelar, pero deberá pasar al siguiente nombre de usuario si OLDUID o NUEVOUID está vacío.

por ej.

  OLDUID=$(getent -s files passwd "$user" | cut -d : -f3)
  [ -z "$OLDUID" ] && error 0 "user '$user' is not local" && continue
1
28.01.2020, 05:12

Теги

Похожие вопросы