Como todos sabemos, antes de MacOS X, todos vivíamos felices, y tranquilos. Sin líneas de comando, siendo la envidia de los usuarios de Windows, pues éstos, a veces (pocas, ciertamente) tenían que usar un intérprete de comandos para algunas tareas. ¡Ah!, pero hete aquí que llegó el MacOs X, y si, es muy bonito, pero tenemos una fastidiosa línea de comandos que nos impide realizar nuestro trabajo como hasta ahora. root, wheel, staff….. ¡Menudos nombres!, ¡¿para que servirá eso?!
Como todos sabemos, antes de MacOS X, todos vivíamos felices, y tranquilos. Sin líneas de comando, siendo la envidia de los usuarios de Windows, pues éstos, a veces (pocas, ciertamente) tenían que usar un intérprete de comandos para algunas tareas. ¡Ah!, pero hete aquí que llegó el MacOs X, y si, es muy bonito, pero tenemos una fastidiosa línea de comandos que nos impide realizar nuestro trabajo como hasta ahora. root, wheel, staff….. ¡Menudos nombres!, ¡¿para que servirá eso?!
Probablemente, si un usuario de Classic ve algo como esto:
-rw-r-xr– 1 francisco adm 5552 2004-03-27 11:57 aguila.jpg
se asombrará, y preguntará qué es eso, y para qué sirve. Sin embargo, para los usuarios de Unix, Linux, y ahora MacOS X, es el pan nuestro de cada día.
Bien, en este artículo vamos a tratar de desenmascarar los secretos de “eso a lo que los gurús del Unix llaman permisos”.
Antes de nada: Usuarios y grupos
Vamos a empezar por lo fácil, es decir, usuarios y grupos.
Bien, cuando nosotros entramos en un ordenador Unix, entramos con un nombre de usuario (en mi caso, francisco). Luego, tenemos al usuario “root” que es el máximo administrador del sistema, es decir, que independientemente de los permisos que tenga un archivo, puede hacer lo que le dé la gana con él (salvo excepciones, que no son temática de ésta mini-guía).
Es decir, un usuario, es una persona que entra en un sistema, y cuando crea un archivo, queda como “creador” de dicho fichero. Ésto se puede cambiar, pero éso lo veremos más adelante.
Grupos: En Unix, un grupo es, una unión de usuarios. Cuando creamos un archivo, éste además pertenece a un grupo. Lo normal es que dicho grupo se llame como nuestro usuario. Podemos pertenecer a más grupos, claro está, pero por defecto, como ya he dicho, nos pondrá por grupo el que lleva nuestro nombre. También es posible cambiar el grupo al que pertenece un archivo, lo veremos más adelante.
¡Oh, permisos!
-rw-r-xr–
Muchos usuarios, con ver sólo eso, sufren, y directamente se olvidan de permisos. “Eso es complicadísimo, dicen algunos”. Pues no. El hecho no es aprenderse algo de memoria. Es pensar.
Veamos, primero, que significan, las r, w, y x.
r = Read, leer en inglés. Ésto hace que ese archivo pueda ser leído.
w = Write, escribir en inglés. Si queremos modificar el archivo, debemos tener ese permiso en sí mismo.
x = eXecute, ejecutar en inglés. Nos permite ejecutar ese archivo, que, lógicamente, en la mayoría de los casos, será un programa. También es obligatorio tenerlo, si queremos cambiar a un directorio (o carpeta), pues sin él, no podremos.
– = Como es lógico, el guión significa “nada”, o sea, que su valor es cero.
d = directorio. ¡Ojo! Ésto no es un permiso, sino que indica el tipo de fichero. Si es una “d” es un directorio, si es un guión, significa que es cualquier otra cosa, menos un directorio.
Pero ésto, visto así, nos dice muy poco. Vamos a “colocar” cada uno en su lugar correcto.
Quedaría algo como así:
drwxrwxrwx
¡Atención!, este orden SIEMPRE va a ser así. Por lo tanto, OBLIGATORIAMENTE va a ser así o con un guión en el lugar de alguno de ellos, como en el ejemplo del principio.
Ahora, vamos a explicar por qué es ese orden y no otro.
Vemos la siguiente (numerada, para que no se pierda nadie):
Lo que hay en la columna “1”, es, como he dicho antes, lo que indica el tipo de fichero. Vuelvo a repetir que es o una d, para indicar el directorio, o un guión -, para indicar que es cualquier otro archivo, menos un directorio. ¡Ojo aquí! No tiene por que ser únicamente un directorio, sólo que lo pongo por ser lo que más se suele encontrar.
En vez de una d o un – puede ser algo de lo siguiente:
l : Indicaría un enlace
b : Dispositivo de bloques
c : Dispositivo especial de caracteres
p : archivo de conducción por nombres
s : semáforo
m : archivo de memoria compartida
Nota: Si alguno de los lectores quiere aprender más sobre lo que significa ésto, le recomiendo que lea algún manual de Unix, o que busque sobre ello en Internet.
En la columna “2” están los permisos que corresponden al usuario. Es decir, al que creó el archivo, o al propietario (luego veremos eso).
Lo más lógico es que tenga, como mínimo, algo como: rw-
Es decir. Nos permite que podamos leer el archivo, y, que además podamos modificarlo.
Si es un directorio, o un ejecutable, podríamos tener algo así: rwx
Pero, si por, ejemplo, queremos no poder modificarlo, por si cometemos algún error, yo lo pondría así:
r-x. ¡Ojo! A pesar de que ésto nos impediría modificarlo, sí podremos borrarlo.
Las columnas “3” y “4” difieren bastante poco de la columna “2”. Es decir, la estructura es la misma, pero, lógicamente tendremos que tener cuidado con los permisos que ponemos.
La columna “3”, representa a los permisos que tienen los usuarios del grupo al que pertenece ese archivo (a pesar de que, normalmente, y por defecto, los archivos pertenecen a un grupo que se llama como nosotros). Pero es bastante útil si queremos que X personas puedan ver ese archivo, pues son los planos de la dominación mundial por parte de faq-mac.com, por ejemplo ;).
Por supuesto, podemos ponerle los permisos que nos dé la gana, pero habría que tener un poco de coherencia.
Por ejemplo, el documento nombrado antes. Vamos a suponer que no queremos cambios por parte de nadie del grupo (aunque nada le impediría a alguien copiarse el archivo, y modificar esa copia, obviamente). Quedaría algo así: r–
La columna “4” representa los permisos del resto de los usuarios. Es decir, de los usuarios que no somos ni nosotros ni los del grupo.
Podemos querer que solo puedan leer el archivo: r–
o, que ni lo vean, ni lo puedan modificar, ni tampoco ejecutarlo, claro: —
Más allá de los permisos: los bits
Lo que he comentado hasta ahora es lo normal, pero hay algo más allá, es decir, lo paranormal :-P.
Esto normalmente en los manuales básicos de Unix no se suele comentar, y, sinceramente, tampoco se usa mucho, pero creo que es interesante, al menos mencionarlo.
Antes de nada, decir que éstos tres “permisos especiales” (llamados bits), representan un riesgo grande de seguridad para los sistemas UNIX si no son usados adecuadamente, así que antes de aplicarlo, asegúrate que sabes lo que haces. No te fíes de nadie (de mí menos que nadie).
Comentar también que estos tres bits sólo tienen efecto si el archivo es ejecutable, aunque se pueden aplicar a cualquier archivo estándar.
SUID (o setuid): Si alguien aplica a un fichero éste tipo de permisos, el usuario que ejecute ese fichero, tendrá los mismos privilegios de quien ha creado el archivo. Por tanto, no recomendaría usarlo en un archivo creado como root, o como administrador de sistema, a no ser que sepamos lo que estamos haciendo.
SGID (o setgid): Es igual que SUID, sólo que en éste caso, se aplica al grupo, en vez de al usuario.
Ambos se representan por la letra s
Pero veámoslo con detalle, porque hay algunas diferencias: si el archivo sobre el que lo aplicamos tiene permiso de ejecución (ya sea en el grupo, o en el usuario).
Si aplicamos el SUID, y el archivo no tiene el permiso de ejecución, obtendremos esto (pongo únicamente la parte correspondiente al usuario en el caso de que sea SUID, y al grupo, en el caso de que sea SGID):
Sr–
Pero, vamos a suponer que dicho archivo tiene permiso de ejecución. Quedaría algo así:
sr-x
Como vemos, la diferencia es obvia.
Ahora, veamos los mismos casos, pero para el SGID (como he dicho, salen representada la parte correspondiente al grupo únicamente).
Si no tiene permiso de ejecución:
Sr–
Y si lo tiene:
sr-x
Pero los bits eran tres, así que vamos a ver en qué consiste el que nos queda, el bit sticky.
El bit sticky, permite que si, por ejemplo, permitimos que todo el mundo pueda leer, escribir, y ejecutar el archivo, puedan hacerlo, pero NUNCA lo podrán borrar. (Si no lleva el sticky, y tiene permiso de escritura, sí se puede borrar). Obviamente, el usuario que posee un archivo con el bit sticky (que no tiene por qué ser el creador, puesto que se puede cambiar) y root, son los únicos que lo pueden borrar. El bit sticky tenía una función (la sigue teniendo, pero nadie la usa ya), para que el archivo en cuestión, al ejecutarlo, estuviera en la memoria permanente de UNIX (o swap), y ésto era útil, pues los equipos tenían muy poca RAM.
El bit sticky se representa con la letra t, y, se representa en el espacio, que corresponde al permiso de ejecución en “todos”, es decir, el campo 4 en mi explicación sobre los permisos.
Veamos los ejemplos:
Si no tiene permiso de ejecución
r-T
Si tiene permiso de ejecución:
r-t
¡Oh!, pero si nos fijamos, en los ejemplos anteriores el bit, se ponía antes del campo sobre el que surtía ejemplo, sin molestar a los otros permisos. Pero, en este caso, ¿como sabemos si el archivo tiene permiso de ejecución para los otros usuarios? Pues sencillo, si es una T (mayúscula), no tiene permiso de ejecución, y si es una t (minúscula) sí lo tiene.
Como os habéis fijado, antes comenté que los bits sólo tenían efecto si tenían permiso de ejecución (y que, obviamente, se puedan ejecutar, pues una foto, por mucho permiso de ejecución que tenga, no es un ejecutable), pues viendo si el bit que se representa está en minúscula o en mayúscula, sabremos si tiene efecto, o no. (Si está en minúscula, si tiene efecto, pero si está en mayúscula, no servirá de nada hasta que cambiemos el permiso de ejecución).
Haciendo el friki: Cambiando los permisos, usuarios y grupos con chown, chmod, chgrp.
Nota: cuando explico la sintaxis de los archivos, uso los símbolos para cuando lo que va entre ellos es necesario para el comando, y los corchetes [] para cuando es opcional.
Ni que decir tiene que tenemos que tener permiso de escritura para cambiar ésto.
Por último, comentar también que aquí pongo las opciones básicas. Si quieres saber todos los parámetros del comando te recomiendo que uses el comando:
man programa
o
programa –help
O, en su defecto que busques entre los cientos de manuales disponibles Internet.
Bien, volvamos a nuestro aguila.jpg
Vamos a empezar por lo fácil, cambiar el grupo. Veamos, veamos cómo estaba:
francisco@TeLeFrancisco:~$ ls -la aguila.jpg
-rwSr-Sr– 1 francisco adm 5552 2004-03-27 11:57 aguila.jpg
Como se puede ver, el grupo es adm, y vamos a suponer que queremos ponerlo en el grupo francisco.
Pues bien:
francisco@TeLeFrancisco:~$ chgrp francisco aguila.jpg
Si nos fijamos, la sintaxis del comando chgrp es:
chgrp [archivo1] [archivo2] […]
Ahora, veamos como ha quedado el archivo después de aplicar éste comando:
francisco@TeLeFrancisco:~$ ls -la aguila.jpg
-rw-r–r– 1 francisco francisco 5552 2004-03-27 11:57 aguila.jpg
Bueno, el siguiente punto es cambiar el usuario. Ésto lo hacemos con el comando chown.
Veamos cómo hemos dejado nuestro aguila.jpg:
francisco@TeLeFrancisco:~$ ls -la aguila.jpg
-rw-r–r– 1 francisco francisco 5552 2004-03-27 11:57 aguila.jpg
Vamos a suponer, que queremos cambiar el usuario “francisco” a un usuario llamado “invitado”. ( ¡Ojo! Lo normal es que este comando sólo se pueda ejecutar como superusuario -o root).
root@TeLeFrancisco:/home/francisco# chown invitado aguila.jpg
y el resultado:
root@TeLeFrancisco:/home/francisco# ls -la aguila.jpg
-rw-rw-rw- 1 invitado francisco 5552 2004-03-27 11:57 aguila.jpg
El comando chown, también permite cambiar el grupo junto con el usuario, o sólo una de las cosas, así que si queremos, podemos olvidarnos del chgrp 😉
Vamos a suponer que también queremos cambiar el grupo, a invitado:
root@TeLeFrancisco:/home/francisco# chown :invitado aguila.jpg
Y, los dos cambios anteriores, unidos en uno:
root@TeLeFrancisco:/home/francisco# chown invitado:invitado aguila.jpg
A pesar de que aquí coincidan el usuario, y el grupo, no tienen por qué ser los mismos.
Así pues, la sintaxis queda así:
chown [usuario][:grupo] [archivo1] [archivo2] […]
Ahora, lo que muchos estabais deseando 😉 ¡Cambio de permisos!
Ésto se hace con el comando chmod. Para cambiar los permisos con éste comando, hay dos opciones:
La primera opción es la “alfabética” o “relativa”.
La segunda opción es la “numérica” o “absoluta”.
Yo explicaré las dos, y tú escogerás la que te parezca más cómoda 😉
La opción alfabética es sencilla de entender, creo.
A parte de los conceptos de r, w, x, s y t de los que ya sabemos su significado, vamos a aprender algunos nombres más:
Ésto lo explico porque la sintaxis del comando chmod alfabético es así:
chmod [ugoa][+-=][rwxst] [archivo1] [archivo2] […]
Veamos algunos ejemplos prácticos con nuestro inolvidable aguila.jpg 😉
francisco@TeLeFrancisco:~$ ls -la aguila.jpg
-rw-rw-rw- 1 francisco francisco 5552 2004-03-27 11:57 aguila.jpg
Supongamos que queremos quitarle el permiso de escritura a los usuarios del grupo, y al resto de la gente, pero queremos añadirle el permiso de ejecución:
francisco@TeLeFrancisco:~$ chmod go-w+x aguila.jpg
Y el resultado:
francisco@TeLeFrancisco:~$ ls -la aguila.jpg
-rw-r-xr-x 1 francisco francisco 5552 2004-03-27 11:57 aguila.jpg
Ahora, a ese archivo (a pesar de que no es un ejecutable) queremos poner el bit SGID, y el sticky:
francisco@TeLeFrancisco:~$ chmod g+s,a+t aguila.jpg
Y su resultado:
francisco@TeLeFrancisco:~$ ls -la aguila.jpg
-rw-r-sr-t 1 francisco francisco 5552 2004-03-27 11:57 aguila.jpg
Si os habéis fijado, para dar varios argumentos, se ponen a continuación del otro, separados por una coma y sin espacios.
Y el último ejemplo, queremos que todos solamente tengan permiso de lectura y ejecución:
francisco@TeLeFrancisco:~$ chmod a=rx aguila.jpg
Y su correspondiente resultado:
francisco@TeLeFrancisco:~$ ls -la aguila.jpg
-r-xr-xr-x 1 francisco francisco 5552 2004-03-27 11:57 aguila.jpg
Bien, la forma numérica o absoluta es, como su nombre dice con números.
Éstos números se indican de la siguiente forma:
—-
Siendo el primero los bits, segundo guión el usuario, el tercero la gente del grupo, y el cuarto, el resto de usuarios.
Los permisos se especifican en formato octal, que pongo en la siguiente tabla para que los entiendas.
Aprenderse esta tabla es un poco lioso, así que vamos a pensar un poco:
—
Los tres guiones, ahora representan a los tipos de permisos. Ahora, usando el sistema binario, vamos a darle al tercer guión (es decir, al primero por la derecha, al que corresponde la x) el valor 1, al segundo guión (al que corresponde la w) el valor 2, y al primer guión (es decir, al tercero por la derecha, que equivale al permiso r) el valor 4.
Por ejemplo, r-x es el permiso 5 sumando sus valores.
Ésto es válido para la segunda columna.
La tercera columna, es igual, pero, en vez de para los permisos, sirve para los bits.
Así pues para poner lectura, escritura y ejecución al usuario, lectura y ejecución al grupo y al resto de la gente y poner el bit sticky, haríamos lo siguiente:
francisco@TeLeFrancisco:~$ chmod 1755 aguila.jpg
lo que daría como resultado:
francisco@TeLeFrancisco:~$ ls -la aguila.jpg
-rwxr-xr-t 1 francisco francisco 5552 2004-03-27 11:57 aguila.jpg
Es decir, la sintaxis del comando chmod numérico sería así:
chmod —- [archivo1] [archivo2] […]
Grupos más comunes
Por último, me gustaría reseñar cuáles son los grupos más comunes en UNIX.
root: como ya comenté, es el grupo del superusuario.
games: usado para juegos.
man: Lo suelen usar las páginas de manual (es decir, las que usan el programa man)
lp: Usado por programas que acceden a la impresora.
mail: Todos los sistemas UNIX suelen llevar un sistema de correo, al menos, local. Éstos programas usan ese grupo.
news: Usado por programas que acceden a grupos de USENET.
nobody (o nogroup): Se refiere a aquellos archivos que no pertenecen a nadie.
disk: Se suele usar para que los usuarios de ese grupo, puedan usar ese disco (o partición).
cdrom: Se suele usar para que los usuarios de ese grupo, puedan usar ese cdrom.
audio: Se suele usar para que los usuarios de ese grupo, puedan usar ese dispositivo de sonido.
staff: Se suele usar para que cualquier usuario pueda hacer modificaciones a determinadas partes del sistema.
wheel: Suele ser usado por root, o por alguien que desea tener los mismos privilegios que root.
Artículo realizado por TeleFrancisco Cañizares. Si tienes dudas o quieres que sigamos profundizando en el tema, deja un comentario al pié del artículo.
¡Enhorabuena!, Un artículo realmente práctico e interesante.
Ahora la cuestión es;
¿Seguiremos sin querer saber nada de la línea de comandos?.
Pues me parece una idea genial, yo en concreto me compre un Macintosh tan solo por que era una maquina UNIX, si siguieran con el classic no lo hubiera comprado ni de broma.
Me gustaria efectivamente que se hicieran mas trabajos al respecto ya que he notado un cierto “elitismo” en los circulos Macintosh de que no saben ni quieren saber por que Con Mac jamas habian necesitado aprender.
En mi caso estpy aprendiendo el mundo UNIX/LINUX y estoy muy satisfecho con mi Mac ya que aparte de que OS X es un sistema estupendo que aparte de sus excelencias me permite “portar” aplicaciones de otros UNIX y LINUX el hardware es muy estable, equilibrado y potente.
Un saludo a todos y que nadie se me enfade que no he dicho esto con mala intencion.
Qué susto !!!! al leer el título del artículo , creía que habían descubierto la manera de cambiar los permisos a traves del teléfono… esto de tener el sistema operativo más avanzado del mundo …. 😀 😀
Artículo muy interesante y didáctico que agradecemos los que venimos del MacOS preX y que odiábamos las líneas de comando. Muchas Gracias por desentrañarnos los jeroglíficos de Unix.
Sólo una apostilla: ¡qué felices, y tranquilos vivíamos sin líneas de comando!, aunque, eso sí, el Mac se nos colgaba. En fin, todo sea por una mayor estabilidad.
Todo eso me parece estupendo. Que pongan una línea en el menu apple para cambiar lo que necesitas con su leyenda en la ayuda o donde quieran; de paso que expliquen los absurdos mensajes a aparecen ahora sí y mañana no sobre que no tienes este o aquel privilegio, incluso entrando como root.
La verdad, no he pasado casi 20 años usando mac para tener que perder el tiempo aprendiendo babosadas como estas, ya tengo bastante con aprender cientos de programas y trabajar. Quiero que el ordenador me haga más fácil la vida, de complicarla ya me encargo yo solo o me compro un PC.
Me parece genial este tutorial, he notado un pequeño error en él:
chgrp [usuario][:grupo] [archivo1] [archivo2] […]
Ahora, lo que muchos estabais deseando 😉 ¡Cambio de permisos!
Donde “chgrp”, ¿no era “chown”?
Muchas Gracias por este magnífico tutorial, voy a jugar un ratito con los permisos :-DDD
Tiene razon can en que un usuario normal no tendria que enfrentarse con estos galimatias. Y ademas se puede hacer una asignacion de permisos basica con la interfaz grafica, cosa que podria haberse comentado en el articulo. Simplemente eligiendo “Obtener informacion” en el menu contextual despues de seleccionar un fichero o carpeta.
Otra cosa es que, en mi opinion , el interfaz grafico no funcione del todo bien. En concreto, cuando se pincha en “Aplicar a todos los elementos incluidos..” no se obtiene el efecto que uno espera, es decir que los permisos que hemos escogidoo se propagen a todos los ficheros y carpetas por debajo de una carpeta.
pues a mi este articulo me ha liado un poco, entiendo q su autor tp nos puede escribir un libro asi por la cara… de todas formas esto de los permisos no se podia hacer con la ventana de información del archivo? xD
Hombre, es verdad que se puede hacer con la ventana de información, pero ¿y si te encuentras en un apuro? 😛
En cuanto a lo del lio, te recomiendo que lo leas, y lo “hagas”, es decir, que uses algun ejemplo, así lo entenderás mejor.
Un saludo, y gracias a todos por vuestros comentarios.
Corregido el pequeño error.
Muy bueno Tel. Aunque me sumo a la opinión de Can. Para liarla con el Mac ya tengo los problemas de diario, para cambiar los permisos (cosa que jamás hice y creo que no haré) ya habrá tiempo.
Toqueteo el Terminal para hacer un Renice o para un Top, de momento es fácil y sencillo, para más cosas “raras”, para eso, están los especialistas.
Las aplicaciones del Mac están para usarlas, pero para usarlas si te sirven de algo, y creo de verdad que la terminal no me sirve más que para liarme un poco más, para cambiar de color una mesa, para eso se usa el PhotoShop y para hacer una mesa nueva, pues el FreeHand, la linea de comandos, creo que esto no lo hace, y si lo hiciera sería supercomplicado. Hace 14 años aprendí a usar AutoCAD y no quiero volver ni loco a usarlo.
Con este comentario “aburrido” no quiero decir que sea bueno o malo el artículo, quiero decir que para un usuario de “curro” no creo que le importe mucho.
Saludines, nos vemos donde siempre 🙂
Y después de leer el artículo para los que no quieren ni necesitan el terminal …
batchmod es una aplicaciones gráficas que permite cambiar los permisos etc …
<http://macchampion.com/arbysoft/>
Interesante artículo … felicidades Francisco
la dirección de batchmod es …
http://macchampion.com/arbysoft/
ps. espero que ahora no oculte el URL el servidor de faq-mac … si es así buscar batchmod en google …
Estimado, deseo exponer mi problema en ansias de una solución óptima asl tema de los Permisos y propietario, espero no molestar.
Cambié los Permisos y propietario de un disco duro interno extra vía SATA. A este disco de 1TB, le cambié por medio del sistema operativo Phanter, los Permisos y propietarios de Leer y escribir a Sin acceso. Luego al reiniciar el equipo no lo pude ver, ni en el Escritorio ni en el Finder, pero si lo veo en las Utilidades de disco, que lo reconoce, permite verificar y reparar el disco, pero no permite Verificar ni Reparar los permisos. El equipo trabaja con solo un usuario administrador.
Agradezco cualquier información que me ayude a recuperar el acceso al disco.
ATTE
RR