Cómo saber si un usuario determinado tiene permisos de lectura y/o escritura para una ruta determinada

StackOverflow https://stackoverflow.com//questions/10675873

Pregunta

Debo empezar diciendo que me considero un usuario competente.Pero hoy tuve la necesidad de automatizar esto y me quedé perplejo.

Supongamos que soy root y, como tal, puedo recorrer todo el sistema de archivos pero no puedo ejecutar "sudo" ni "su".

Tengo un usuario determinado y una ruta determinada.

¿Cómo puedo comprobar, a través de la CLI, si el usuario podrá leer y/o escribir en la ruta?

Sé que esto suena fácil, pero ten en cuenta que:

  • No somos ni podemos convertirnos en usuarios.
  • No podemos confiar simplemente en los permisos del directorio final, ya que los permisos que se encuentran más arriba en la ruta pueden estar bloqueando el acceso al directorio final.
  • Tampoco podemos confiar únicamente en los permisos del grupo de directorio, en esta era de grupos heredados.

Supongo que esto no se puede hacer mediante ningún comando, y primero necesitaría reunir todos los grupos de usuarios, luego recorrer toda la jerarquía de la ruta, verificar los permisos de lectura a lo largo de la ruta y luego leer y escribir para el final. directorio.Aunque suena tremendamente caro.

¿Fue útil?

Solución

¡Etiqueta un gurú de scripting!

check_access() {
  checked_file=$1
  target_user=$2
  result=PASS

  groups=`id -G $target_user | sed -e 's| | -o -group |g' -e 's|^|\\( -group |' -e 's|$| \\)|'`

  while [ $checked_file != / ]; do 
    find $checked_file -maxdepth 0 \
      -type f \( \
        \( -user $target_user -perm 0400 \) \
        -o \( $groups -perm 0040 \) \
        -o -perm 0004 \
      \) -o -type d \( \
        \( -user $target_user -perm 0100 \) \
        -o \( $groups -perm 0010 \) \
        -o -perm 0001 \
      \) >/dev/null 2>&1 || result=FAIL
    checked_file=`dirname $checked_file`
  done
  echo $result
}

Otros consejos

En realidad, no puedo dar una respuesta completa y no puedo agregar nada sustancial a sus propias ideas, excepto quizás esto:

Sospecho que no existe un enfoque general para verificar los derechos de acceso efectivos, simplemente porque los derechos de acceso dependen en gran medida de los sistemas de archivos subyacentes.Por ejemplo, comprobar los derechos de acceso funciona de forma bastante diferente en sistemas de archivos que utilizan el estándar Unix. rwx banderas (por ej.Linux' ext2, ext3) que con sistemas de archivos que soportan ACL (como XFS o NTFS).

Podría haber varios especificos herramientas de línea de comandos que hacen lo que usted desea hacer para tipos de sistemas de archivos específicos.(Analogía:herramientas como fsck, mkfs puede existir por tipo de sistema de archivos.)

Especialmente con sistemas operativos tipo UNIX, donde se pueden montar todo tipo de sistemas de archivos en una gran estructura de directorios, asumir que solo un mecanismo de permisos específico podría generar problemas.

Si crea su propia solución para este problema, piense primero en este hecho y luego decida exactamente qué mecanismo(s) de derechos de acceso desea admitir.(No estoy seguro, pero me imagino que Unix/la especificación POSIX prescribe el rwx banderas de derechos de acceso como mínimo que todo Unix debería soportar.)

La mejor manera es validar a través del propio usuario:

if sudo su - $user_to_check -c "[[ -r $path_to_check ]]"
then echo "$user_to_check can read $path_to_check"
else echo "$user_to_check can not read $path_to_check"
fi
if sudo su - $user_to_check -c "[[ -w $path_to_check ]]"
then echo "$user_to_check can write $path_to_check"
else echo "$user_to_check can not write $path_to_check"
fi

ls -l <file-name or dir-name>

Supongo que desea verificar los permisos para la Directorio de carga. ls -l uploads Esto resultará como este

total 20
drwxrwxr-x 2 tomcat ec2-user 4096 Nov  5 04:21 deals
drwxrwxr-x 2 tomcat ec2-user 4096 Nov  5 04:25 gallery-images
drwxrwxr-x 3 tomcat ec2-user 4096 Nov  5 04:25 hotels
drwxrwxr-x 3 tomcat ec2-user 4096 Nov  5 04:28 rooms
drwxrwxr-x 3 tomcat ec2-user 4096 Nov  5 04:32 temp

Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top