Nunca he entendido cómo chmod
funcionó hasta hoy. Seguí un tutorial que me explicó mucho.
Por ejemplo, he leído que tienes tres grupos de permisos diferentes:
- propietario (
u
) - grupo (
g
) - todos (
o
)
Basado en estos tres grupos, ahora sé que:
- Si el archivo es propiedad del usuario, los permisos del usuario determinan el acceso.
- Si el grupo del archivo es el mismo que el grupo del usuario, el permiso del grupo determina el acceso.
- Si el usuario no es el propietario del archivo y no está en el grupo, se utiliza el otro permiso.
También he aprendido que tienes los siguientes permisos:
- leer (
r
) - escribir (
w
) - ejecutar (
x
)
Creé un directorio para probar mi conocimiento recién adquirido:
mkdir test
Luego hice algunas pruebas:
chmod u+rwx test/
# drwx------
chmod g+rx test/
# drwxr-x---
chmod u-x test/
# drw-r-x---
Después de perder el tiempo durante un tiempo, creo que finalmente entendí chmod
y la forma en que estableces el permiso usando este comando.
Pero...
Todavía tengo algunas preguntas:
- ¿Qué significa el
d
inicio? - ¿Cuál es el nombre y el uso de la ranura que contiene y qué otros valores puede contener?
- ¿Cómo puedo configurarlo y desactivarlo?
- ¿Cuál es el valor de esto
d
? (Como solo tienes 7 = 4 + 2 + 1 7 = 4 + 2 + 1 7 = 4 + 2 + 1) - ¿Por qué las personas a veces usan en
0777
lugar de777
establecer sus permisos?
Pero como no debería estar haciendo múltiples preguntas, intentaré hacerlo en una sola pregunta.
En un sistema basado en UNIX, como todas las distribuciones de Linux, en relación con los permisos, ¿qué significa la primera parte ( d
) y cuál es el uso de esta parte de los permisos?
fuente
S_IFDIR
. No lo usa al configurar el modo de archivo, pero lastat()
función en realidad devuelve el valor 040750 paradrwxr-x---
.Respuestas:
Contestaré sus preguntas en tres partes: tipos de archivo, permisos y casos de uso para las diversas formas de
chmod
.Tipos de archivo
El primer carácter en la
ls -l
salida representa el tipo de archivo;d
significa que es un directorio. No se puede establecer o desactivar, depende de cómo se creó el archivo. Puede encontrar la lista completa de tipos de archivos en la documentación de ls ; los que es probable que encuentres son-
: Archivo "normal", creado con cualquier programa que pueda escribir un archivob
: se puede crear un archivo especial de bloque, generalmente dispositivos de disco o partición, conmknod
c
: archivo especial de caracteres, también se puede crear conmknod
(ver/dev
ejemplos)d
: directorio, se puede crear conmkdir
l
: enlace simbólico, se puede crear conln -s
p
: canalización con nombre, se puede crear conmkfifo
s
: socket, se puede crear connc -U
D
: puerta , creada por algunos procesos del servidor en Solaris / openindiana.Permisos
chmod 0777
se usa para establecer todos los permisos en unachmod
ejecución, en lugar de combinar cambios conu+
etc. Cada uno de los cuatro dígitos es un valor octal que representa un conjunto de permisos:suid
,sgid
Y “pegajosa” (ver abajo)El valor octal se calcula como la suma de los permisos:
Para el primer dígito:
suid
es 4; los binarios con este conjunto de bits se ejecutan como su usuario propietario (comúnmenteroot
)sgid
es 2; los archivos binarios con este conjunto de bits se ejecutan como su grupo propietario (esto se usaba para juegos, por lo que se podían compartir puntuaciones altas, pero a menudo es un riesgo de seguridad cuando se combina con vulnerabilidades en los juegos), y los archivos creados en directorios con este conjunto de bits pertenecen al grupo propietario del directorio por defecto (esto es útil para crear carpetas compartidas)root
(vea/tmp
un ejemplo común de esto).Vea la página de
chmod
manual para más detalles. Tenga en cuenta que en todo esto estoy ignorando otras características de seguridad que pueden alterar los permisos de los usuarios en los archivos (SELinux, archivo ACL ...).Los bits especiales se manejan de manera diferente según el tipo de archivo (archivo o directorio normal) y el sistema subyacente. (Esto se menciona en la página de
chmod
manual). En el sistema que solía probar esto (concoreutils
8.23 en unext4
sistema de archivos, ejecutando Linux kernel 3.16.7-ckt2), el comportamiento es el siguiente. Para un archivo, los bits especiales siempre se borran a menos que se establezca explícitamente, por lo quechmod 0777
es equivalente achmod 777
, y ambos comandos borran los bits especiales y otorgan a todos los permisos completos sobre el archivo. Para un directorio, los bits especiales nunca se borran completamente utilizando la forma numérica de cuatro dígitos, por lo que en efectochmod 0777
también es equivalente achmod 777
pero es engañoso ya que algunos de los bits especiales permanecerán tal cual. (Una versión anterior de esta respuesta se equivocó). Para borrar bits especiales en los directorios, debe usaru-s
,g-s
y / oo-t
explícitamente o especificar un valor numérico negativo, porchmod -7000
lo que borrará todos los bits especiales en un directorio.En
ls -l
la salida,suid
,sgid
y “pegajosa” aparecerá en lugar de lax
entrada:suid
ess
oS
en lugar del usuario dex
,sgid
ess
, oS
en lugar del grupo dex
, y “pegajosa” est
oT
en lugar de los otrosx
. Una letra minúscula indica que tanto el bit especial como el bit ejecutable están establecidos; una letra mayúscula indica que solo se establece el bit especial.Las diversas formas de chmod
Debido al comportamiento descrito anteriormente, usar los cuatro dígitos completos
chmod
puede ser confuso (al menos resulta que estaba confundido). Es útil cuando desea establecer bits especiales, así como bits de permiso; de lo contrario, los bits se borran si está manipulando un archivo, y se conservan si está manipulando un directorio. Así sechmod 2750
asegura que obtendrá al menossgid
y exactamenteu=rwx,g=rx,o=
; perochmod 0750
no necesariamente borrará los bits especiales.El uso de modos numéricos en lugar de comandos de texto (
[ugo][=+-][rwxXst]
) es probablemente más un caso de hábito y el objetivo del comando. Una vez que está acostumbrado a usar modos numéricos, a menudo es más fácil especificar el modo completo de esa manera; y es útil poder pensar en permisos usando modos numéricos, ya que muchos otros comandos pueden usarlos (install
,mknod
...).Algunas variantes de texto pueden ser útiles: si simplemente quiere asegurarse de que cualquier persona pueda ejecutar un archivo,
chmod a+x
lo hará, independientemente de los otros permisos. Del mismo modo,+X
agrega el permiso de ejecución solo si uno de los permisos de ejecución ya está configurado o si el archivo es un directorio; Esto puede ser útil para restaurar los permisos a nivel mundial sin tener que usar archivos de casos especiales v. directorios. Por lo tanto,chmod -R ug=rX,u+w,o=
es equivalente a aplicarchmod -R 750
a todos los directorios y archivos ejecutables ychmod -R 640
a todos los demás archivos.fuente
sgid
bit estuviera siempre establecido, independientemente de su valor real. En FreeBSD, elsuid
bit puede configurarse para actuar de manera análogasgid
(es decir, los archivos y subdirectorios creados dentro tendrán el mismo propietario que el directorio), siempre que el sistema de archivos subyacente lo admita y esté montado con lasuiddir
opción.+X
agrega el permiso de ejecución solo si uno de los permisos de ejecución ya está configurado o el archivo es un directorio" gracias @ stephen-kitt que falta la documentación "ya está configurado" realmente me estaba volviendo loco.Entonces, los permisos en Linux son muy importantes. Trataré de hacer una breve explicación.
Para piezas de un modo de archivo
Cada archivo Unix tiene un conjunto de permisos que determinan si puede leer, escribir o ejecutar el archivo. La ejecución de ls -l muestra los permisos. Aquí hay un ejemplo de tal pantalla:
Adjunto una imagen de piezas de un modo de archivo:
El tipo puede ser algo diferente. Por ejemplo:
Si desea establecer algunos permisos para todos los directorios, puede usar el atributo R, por ejemplo:
Para chmod 777 vs 0777
El
chmod
comando generalmente espera que la entrada sea un número octal, el cero inicial se refiere al valor del triplete de bit fijo / sgid / suid. Sin embargo, en C marcaría la diferencia, ya777
que se traduciría a01411
(octal), configurando así el bit fijo (consulte lachmod(2)
página de manual), los permisos de lectura para el propietario y el bit ejecutable para el grupo y otros (que es una combinación bastante extraña) .EDITAR 1
Encontré otra imagen sobre los permisos de Linux y la adjuntaré para comprender más fácilmente:
fuente
chmod(777)
sería el equivalente a ejecutarchmod 1411
(es decir, elchmod
comando con argumento1411
).0x1FF
, binario:0b111111111
o octal:0o777
. PYTHON POWERd
significa que es un directorio, si tiene un archivo es-
y si es un enlace encontrará unl
. No se puede configurar / desarmar.Si usa 0777 como permisos, está dando control total (lectura + escritura + ejecución) a cada usuario / grupo del sistema. Es una forma perezosa de resolver problemas cuando tienes usuarios / grupos que no pueden acceder a directorios / archivos.
Por ejemplo, si enumera el contenido de un directorio y obtiene esto:
-rw-r--r-- 1 root root 42596 jun 7 2012 preloadable_libintl.so
preloadable_libintl.so es un archivo propiedad de la raíz del usuario y la raíz del grupo. El propietario tiene acceso de lectura y escritura, el grupo solo tiene acceso de lectura y cualquier otro usuario tiene acceso de lectura. Esto se puede traducir como 644.
Si lo cambio a 777 se verá así:
-rwxrwxrwx 1 root root 42596 jun 7 2012 preloadable_libintl.so
fuente
Después de obtener mi pregunta respondida aquí e investigar un poco sobre el resultado, encontré un artículo que lo explica todo muy bien. Me gustaría compartir algunas partes de este artículo aquí para futuras referencias.
Ver permisos
Para
chmod
cambiar los permisos de un archivo o directorio, primero deberá saber cuál es el modo de acceso actual. Puede ver el contenido de un directorio en la terminalcd
en ese directorio y luego usar:El
-l
cambio es importante porque usarlols
sin él solo mostrará los nombres de archivos o carpetas en el directorio.A continuación se muestra un ejemplo de uso
ls -l
en mi directorio de inicio:Que significan las columnas
La primera columna es el tipo de cada archivo:
-
denota un archivo normal.d
denota un directorio, es decir, una carpeta que contiene otros archivos o carpetas.p
denota una tubería con nombre (también conocido como FIFO).l
denota un enlace simbólico.Las letras después de eso son los permisos, esta primera columna es lo que más nos interesará. La segunda es cuántos enlaces hay en un archivo, podemos ignorarlo con seguridad. La tercera columna tiene dos valores / nombres: el primero (en mi ejemplo 'peter') es el nombre del usuario que posee el archivo. El segundo valor ('usuarios' en el ejemplo) es el grupo al que pertenece el propietario (Lea más sobre los grupos).
La siguiente columna es el tamaño del archivo o directorio en bytes y la información posterior son las fechas y horas en que el archivo o directorio se modificó por última vez y, por supuesto, el nombre del archivo o directorio.
Qué significan los permisos
Las primeras tres letras, después de la primera
-
od
, son los permisos que tiene el propietario. Las siguientes tres letras son permisos que se aplican al grupo. Las últimas tres letras son los permisos que se aplican a todos los demás.Cada conjunto de tres letras está compuesto por
r
w
yx
.r
siempre está en la primera posición,w
siempre está en la segunda posición yx
siempre está en la tercera posición.r
es el permiso de lectura,w
es el permiso de escritura yx
es el permiso de ejecución. Si hay un guión (-
) en el lugar de una de estas letras, significa que el permiso no se otorga, y si la letra está presente, se otorga.Carpetas
En el caso de las carpetas, los bits de modo se pueden interpretar de la siguiente manera:
r
(leer) significa la capacidad de leer la tabla de contenido del directorio dado,w
(escribir) significa la capacidad de escribir la tabla de contenido del directorio dado (crear nuevos archivos, carpetas; renombrar, eliminar archivos existentes, carpetas) si y solo si se establece el bit de ejecución. De lo contrario, este permiso no tiene sentido.x
(ejecutar) representa la capacidad de ingresar al directorio dado con el comando cd y acceder a los archivos, carpetas en ese directorio.Cambiar permisos usando el comando chmod
chmod
es un comando en Linux y otros sistemas operativos tipo Unix. Le permite cambiar los permisos (o modo de acceso) de un archivo o directorio.Puede modificar los permisos de dos maneras diferentes: - Basado en texto - Basado en
chmod
númerochmod
Método de texto
Para cambiar los permisos o el modo de acceso de un archivo, utilizamos el comando chmod en un terminal. A continuación se muestra la estructura general del comando:
Dónde Quién es cualquiera de una gama de letras, y cada una significa a quién le va a dar permiso. Son los siguientes:
Los permisos son los mismos que ya se ha discutido (
r
,w
yx
).El comando chmod nos permite sumar y restar permisos de un conjunto existente usando + o - en lugar de =. Esto es diferente a los comandos anteriores, que esencialmente reescriben los permisos (es decir, para cambiar un permiso de
r--
arw-
, aún debe incluirlor
así comow
después=
delchmod
comando. Si se lo perdierar
, le quitaría elr
permiso como se están reescribiendo con =. Usando + y - evite esto agregando o quitando el conjunto actual de permisos).Método de número
chmod
También puede establecer permisos usando números.El uso de números es otro método que le permite editar los permisos para los tres propietarios, grupos y otros al mismo tiempo. Esta estructura básica del código es esta:
Donde xxx es un número de 3 dígitos donde cada dígito puede ser del 1 al 7. El primer dígito se aplica a los permisos para el propietario, el segundo dígito se aplica a los permisos para el grupo y el tercer dígito se aplica a los permisos para todos los demás.
En esta notación numérica, los valores r, w y x tienen su propio valor numérico:
Para obtener un número de tres dígitos, debe considerar qué permisos desea que tenga un propietario, un grupo y un usuario, y luego sumar sus valores. Por ejemplo, supongamos que quería otorgarle al propietario de un directorio permisos de lectura-escritura y ejecución, y quería agrupar a todos los demás para que solo leyeran y ejecutaran permisos. Se me ocurrirían los valores numéricos de esta manera:
Esto es equivalente a usar lo siguiente:
La mayoría de las carpetas / directorios están configurados en 755 para permitir la lectura y escritura y la ejecución al propietario, pero niegan la escritura a todos los demás, y los archivos normalmente son 644 para permitir la lectura y escritura para el propietario, pero solo la lectura para todos los demás, consulte el último Nota sobre la falta de permisos x con archivos no ejecutables: es el mismo trato aquí.
fuente
Para las preguntas d
Esto te dice el tipo de archivo Unix. Por defecto, Unix solo tiene 3 tipos de archivos. Son:
-
- archivo regulard
- Archivo de directoriob
- Bloquear archivoc
- Archivo de dispositivo de personajep
- Archivo de tubería con nombre o solo archivo de tuberíal
- Archivo de enlace simbólicos
- Archivo de socketLea más aquí: Tipos de archivos en Linux / Unix explicados en detalle
0777
vs777
Pegamento específico especificado o no. Cuando se establece el bit fijo de un directorio, el sistema de archivos trata los archivos en dichos directorios de una manera especial para que solo el propietario del archivo, el propietario del directorio o el usuario raíz puedan cambiar el nombre o eliminar el archivo. Sin el conjunto de bits fijos, cualquier usuario con permisos de escritura y ejecución para el directorio puede cambiar el nombre o eliminar archivos contenidos, independientemente del propietario del archivo.
0777
establece los permisos del archivo 777 y el bit fijo a 0, sin modos especiales.777
está configurando permisos de archivos 777, sin cambiar el bit fijo.Leer más: sticky bit y chmod
fuente
chmod 777
que no borra los bits setuid, setgid y sticky? Intentalo.