0 votos

¿Cómo comprobar si los permisos para /usr/local, /usr/local/bin, /usr/share/man/man1 han sido modificados, y cómo restaurarlos?

Tras esta respuesta

https://superuser.com/a/1025007/642458

Intenté instalar tree desde el origen. Ejecutando make install la primera vez, obtuve esta salida:

...$ make install
install -d /usr/local/bin
install: chmod 755 /usr/local/bin: Operación no permitida
install -d /usr/share/man/man1
install: chmod 755 /usr/share/man/man1: Sistema de archivos de solo lectura
if [ -e tree ]; then \
        install tree /usr/local/bin/tree; \
    fi
install: /usr/local/bin/tree: Permiso denegado
make: *** [install] Error 71

Dado que la respuesta menciona el uso de sudo, ejecuté sudo make install, lo cual funcionó para mover el binario tree a /usr/local/bin, pero no para agregar las páginas del manual man:

install -d /usr/local/bin
install -d /usr/share/man/man1
install: chmod 755 /usr/share/man/man1: Sistema de archivos de solo lectura
if [ -e tree ]; then \
        install tree /usr/local/bin/tree; \
    fi
install doc/tree.1 /usr/share/man/man1/tree.1
install: /usr/share/man/man1/tree.1: Sistema de archivos de solo lectura
make: *** [install] Error 71

Sin embargo, ¡ahora estoy preocupado de haber cambiado los permisos de las carpetas del sistema! Al menos esto parece ser el caso para /usr/local/bin (mira la hora y fecha de .):

...$ ls -alt /usr/local/bin
total 1912
-rwxr-xr-x   1 root           wheel  109008 Dec  8 15:11 tree
drwxr-xr-x  44 root           wheel    1408 Dec  8 15:11 .
drwxr-xr-x  23 root           wheel     736 Sep 26 10:12 ..
.
.

¿Cómo puedo verificar si los permisos de las carpetas del sistema han sido alterados, y cómo puedo restaurarlos? ¿Debo revisar solo /usr/local/bin y /usr/share/man/man1, o debo revisar también otras carpetas? Aquí está el Makefile, en caso de que quieras verlo:

# $Copyright: $
# Copyright (c) 1996 - 2018 by Steve Baker
# Todos los derechos reservados
#
# Este programa es software libre; puedes redistribuirlo y/o modificarlo
# bajo los términos de la Licencia Pública General de GNU publicada por
# la Fundación del Software Libre; ya sea la versión 2 de la Licencia, o
# (a tu elección) cualquier versión posterior.
#
# Este programa se distribuye con la esperanza de que sea útil,
# pero SIN NINGUNA GARANTÍA; ni siquiera la garantía implícita de
# COMERCIABILIDAD o IDONEIDAD PARA UN PROPÓSITO PARTICULAR. Ver la
# Licencia Pública General de GNU para más detalles.
#
# Deberías haber recibido una copia de la Licencia Pública General de GNU
# junto a este programa; si no, escribe a la Fundación del Software Libre,
# Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307  USA

prefix = /usr

CC=gcc

VERSION=1.8.0
TREE_DEST=tree
BINDIR=${prefix}/bin
MAN=tree.1
MANDIR=${prefix}/man/man1
OBJS=tree.o unix.o html.o xml.o json.o hash.o color.o file.o

# Descomenta las opciones a continuación para tu sistema operativo particular:

# Valores predeterminados para Linux:
#CFLAGS=-ggdb -pedantic -Wall -DLINUX -D_LARGEFILE64_SOURCE -D_FILE_OFFSET_BITS=64
#CFLAGS=-O4 -Wall  -DLINUX -D_LARGEFILE64_SOURCE -D_FILE_OFFSET_BITS=64
#LDFLAGS=-s

# Descomenta para FreeBSD:
#CFLAGS=-O2 -Wall -fomit-frame-pointer
#LDFLAGS=-s
#OBJS+=strverscmp.o

# Descomenta para OpenBSD:
#TREE_DEST=colortree
#MAN=colortree.1
#CFLAGS=-O2 -Wall -fomit-frame-pointer
#LDFLAGS=-s
#OBJS+=strverscmp.o

# Descomenta para Solaris:
#CC=cc
#CFLAGS=-xO0 -v
#LDFLAGS=
#OBJS+=strverscmp.o
#MANDIR=${prefix}/share/man/man1

# Descomenta para Cygwin:
#CFLAGS=-O2 -Wall -fomit-frame-pointer -DCYGWIN
#LDFLAGS=-s
#TREE_DEST=tree.exe
#OBJS+=strverscmp.o

# Descomenta para OS X:
# Ya no se permite instalar en /usr/bin en OS X (SIP):
prefix = /usr/local
CC=cc
CFLAGS=-O2 -Wall -fomit-frame-pointer -no-cpp-precomp
LDFLAGS=
MANDIR=/usr/share/man/man1
OBJS+=strverscmp.o

# Descomenta para HP/UX:
#CC=cc
#CFLAGS=-O2 -DAportable -Wall
#LDFLAGS=
#OBJS+=strverscmp.o

# Descomenta para OS/2:
#CFLAGS=-02 -Wall -fomit-frame-pointer -Zomf -Zsmall-conv
#LDFLAGS=-s -Zomf -Zsmall-conv
#OBJS+=strverscmp.o

# Descomenta para HP NonStop:
#prefix = /opt
#CC=c89
#CFLAGS=-Wextensions -WIEEE_float -g -Wnowarn=1506 -D_XOPEN_SOURCE_EXTENDED=1 \
#    -Wallow_cplusplus_comments
#LDFLAGS=
#OBJS+=strverscmp.o

# AIX
#CC=cc_r -q64
#LD=ld -d64
#LDFLAGS=-lc
#OBJS+=strverscmp.o

#------------------------------------------------------------

all:    tree

tree:   $(OBJS)
    $(CC) $(LDFLAGS) -o $(TREE_DEST) $(OBJS)

$(OBJS): %.o:   %.c tree.h
    $(CC) $(CFLAGS) -c -o $@ $<

clean:
    if [ -x $(TREE_DEST) ]; then rm $(TREE_DEST); fi
    if [ -f tree.o ]; then rm *.o; fi
    rm -f *~

install: tree
    install -d $(BINDIR)
    install -d $(MANDIR)
    if [ -e $(TREE_DEST) ]; then \
        install $(TREE_DEST) $(BINDIR)/$(TREE_DEST); \
    fi
    install doc/$(MAN) $(MANDIR)/$(MAN)

distclean:
    if [ -f tree.o ]; then rm *.o; fi
    rm -f *~

dist:   distclean
    tar zcf ../tree-$(VERSION).tgz -C .. `cat .tarball`

EDICIÓN: mi SO es MacOS Catalina 10.15.7

1 votos

¿Qué versión de macOS estás utilizando?

0 votos

@nohillside gracias por tu comentario. Estoy usando MacOS Catalina 10.15.7.

0 votos

Catalina tiene SIP, por lo que a menos que lo hayas deshabilitado, no puedes cambiar accidentalmente los permisos de cosas fuera de /usr/local. Por eso recibiste errores de chmod 755 /usr/share/man/man1: Sistema de archivos de solo lectura.

2voto

yoliho Puntos 340

Eso es un error en el makefile. El directorio para los archivos de man está codificado incorrectamente.

La parte superior es correcta

BINDIR=${prefix}/bin
MAN=tree.1
MANDIR=${prefix}/man/man1

Desafortunadamente, la parte de OSX codifica MANDIR, necesitas editar esa línea a la que está arriba.

Debo señalar que este no es un buen makefile, ya que cosas como MANDIR y BINDIR se configuran en varios lugares. Estos deberían establecerse al final de la configuración y la parte de OSX solo establece el prefijo y las opciones del compilador (o quizás sería mejor que todas las instalaciones se hicieran con PREFIX=/usr/local para todos los sistemas Unix).

Ahora, al leer los detalles del enlace, es peor: el autor original del código fuente lo hizo correctamente, pero los trucos para que se compile están mal. La forma correcta está en un comentario en la respuesta

Bueno, técnicamente esto funciona. Pero es invasivo. Así que probablemente podrías ejecutar ./configure --prefix=/usr/local antes de hacer make e make install y conseguirías los mismos resultados.

No he probado esto, así que no puedo asegurar que funcione; yo usaría Macports (o Homebrew) donde alguien más ya ha hecho el trabajo duro de adaptar la compilación a macOS y además proporcionan un binario para que ni siquiera necesites compilarlo tú mismo. Macports también mantiene los permisos de directorio como deberían ser para Unix (Homebrew sí requiere ajustar los permisos de directorio, pero solo /usr/local)

En cuanto a cambios en el sistema de archivos en cuanto a permisos, etc. La seguridad está funcionando y no hiciste cambios. macOS detuvo los únicos comandos que cambian los permisos chmod

Para verificar, ejecuta ls -ld directorio para cualquier directorio del que puedas estar preocupado.

0 votos

Hola, gracias por la respuesta. Sin embargo, estoy principalmente preocupado por los permisos de las carpetas que han cambiado. ¿Cómo puedo verificar qué carpetas del sistema han tenido sus permisos cambiados y cómo puedo restaurarlos?

0 votos

No hay nada en lo que has mostrado que indique que haya habido cambios. El script no pudo escribir en /usr/man/man1 y eso fue reportado correctamente.

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