0 votos

¿Cómo aplicar un bash script sólo a una cuenta de usuario?

En general, gestiono mis sistemas MAC OS X High Sierra y Mojave utilizando script(s) muy básicos que envío remotamente y aplico a todo el sistema Mac OS X, es decir, todos estos script(s) se aplican a todos los usuarios del sistema. Pero ahora tengo un reto más difícil. Cada uno de mis sistemas MAC OS X tiene 3 cuentas de usuario: (Cuenta de administrador) Usuario1 (Cuenta de administrador) Usuario2 y (Cuenta estándar local) Usuario3.

En general si quiero enviar un script que sólo se aplique al Usuario3 (cuenta local estándar) ¿cómo puedo hacerlo? Estaba pensando con el El principio del menor privilegio. Sé con certeza que (Cuenta Local Estándar) Usuario3 no es un administrador. Entonces, ¿cómo puedo decir al principio del script que busque y ejecute el script sólo al (Cuenta Estándar Local) Usuario3?

Por supuesto (cuenta local estándar) el usuario3 (nombre de usuario) siempre cambia. Tengo más de 400 sistemas Mac OS X que administro. En cambio (Cuenta Admin) Usuario1 (Cuenta Admin) Usuario2 son siempre el mismo nombre de usuario.

Todos mis sistemas MAC OS X tienen un agente instalado. Así es como puedo ejecutar scripts en mis sistemas. Cada vez que el scriptsscriptscripts se ejecuta gracias al agente, se ejecuta como Root.

Hagamos un escenario de ejemplo.

Quiero crear un archivo de texto simple y colocar este archivo de texto en el escritorio de 3 sistemas Mac OS X pero justo dentro del Escritorio del Usuario3 (cuenta local estándar)

Nombre de host: tsmith-mac Nombre de usuario: administrator Nombre de usuario: administrator_backup Nombre de usuario: tsmith

Nombre de host: jreed-mac Nombre de usuario: administrator Nombre de usuario: administrator_backup Nombre de usuario: jreed

Nombre de host: fmontana-mac Nombre de usuario: administrator Nombre de usuario: administrator_backup Nombre de usuario: fmontana

2voto

Kerry Puntos 100

Tengo entendido que envías un script a tus sistemas remotos. Luego ejecutas el script. No estoy seguro de bajo qué id de usuario se ejecutará el script. No sé qué quieres hacer para ese usuario.

Podrías poner el siguiente código de cabecera en un script. Averigua si el usuario es un usuario administrador o un usuario no administrador.

Hay muchas maneras de comprobar la administración. Nota: Algunos de los métodos mostrados no funcionan. Ver:

https://superuser.com/questions/279891/list-all-members-of-a-group-mac-os-x

Este bash script lista todos los miembros del grupo admin.

group=admin;
for i in $(dscl . list /users);
  do [[ $(id -nG $i | grep $group) ]] && echo $i;
done;rc=0 

Destilándolo todo.

#!/bin/bash
# ideas from:
# https://www.symantec.com/connect/articles/mac-commands-directory-editor-dscl-and-custom-inventory
# https://superuser.com/questions/279891/list-all-members-of-a-group-mac-os-x
#
# Please note this is prototype.
#
#       THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR  
#       IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,  
#       FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE  
#       AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER  
#       LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,  
#       OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE  
#       SOFTWARE.

group=admin;
for i in $(dscl . list /users);
  do
    echo "process user ${i}"
    uniqueID=$(dscl  /Local/Default -read /Users/${i} UniqueID | awk '{ print $2 }')

    # exclude system-created users, which have IDs below 500
    if [ "${uniqueID:-0}" -ge 500 ]; then
      if  [[ $(id -nG $i | grep $group) ]]; then 
        #echo "${i} is a member of ${group}"
        #-- plan english
        echo "${i} is an admin user."
      else
        echo
        #echo "${i} isn't a member of ${group}"
        #-- plan english
        echo "${i} is a regular user..."
        # print the user's home folder
        homeDirectory=$(dscl  /Local/Default -read /Users/${i} NFSHomeDirectory | awk '{ print $2 }')
        echo "Home directory is ${homeDirectory}"
        echo
     fi
    fi
done
# leave a good impression on the caller
rc=0

encontrar si el usuario actual es un administrador

  echo "Current user is " ${USER}
    if [[ $(id -nG ${USER} | grep "admin" ) ]]; then
      echo "admin user"
    else
      echo "regular user"
    fi

AppleAyuda.com

AppleAyuda es una comunidad de usuarios de los productos de Apple en la que puedes resolver tus problemas y dudas.
Puedes consultar las preguntas de otros usuarios, hacer tus propias preguntas o resolver las de los demás.

Powered by:

X