- Permisos en GNU/Linux
- Mudar o grupo actual por defecto do usuario
- Mudar os permisos
- Efectos dos permisos en arquivos e directorios
- Umask
Permisos en GNU/Linux
Un artigo de repaso sobre a aplicación e uso de permisos en GNU/Linux.
Sobre o básico dos permisos lectura, escritura e execución así cómo o de dono e grupo, non vou tratar, tampouco o das acl ou selinux.
Mudar o grupo actual por defecto do usuario
Nesta sección falo de como poñerse un dos grupos secundarios aos que pertenzamos como se fora o noso primario, a utilidade de isto por exemplo é crear os ficheiros ou directorios co nome do grupo de desenvolvemento ou de x aplicativo, en lugar de un que so sexa o noso nome de usuario.
Para mudalo dono dos arquivos e directorios xa feitos, está o mítico “chown” e logo o grupo está “chgrp”.
Mais para que os novos arquivos que fagamos na sesión os fagamos cun grupo diferente ao noso por defecto, podemos facer uso de ‘newgrp’.
Mudando o noso grupo actual por defecto por un dos nosos grupos secundarios na sesión actual:
newgrp <nome_do_grupo>
Con isto os ficheiros que creamos durante a sesión pasarán a ter como grupo o grupo que nos asinemos, sempre que pertenzamos a él.
Mudar os permisos
Explicación dos básicos
Usando o chmod podemos usar o “atallo” de mencionar a “u”, “g”, “o”, e “a” pra asinarllelos permisos.
Logo deberiamos de incluir un dos seguintes símbolos:
| Símbolo: | Descripción: |
|---|---|
| + | Engade os novos permisos se fai falla. |
| = | Aplica os permisos tal cal os indicamos no comando. |
| - | Retira os permisos indicados no caso de que os teña. |
Exemplo chmod:
chmod o=r,g-w,u+x o_meu_script.sh
Quitar tódolos permisos do arquivo:
chmod a=- arquivo
Permisos en formato numerario octal
Este soe ser un dos da miña predilección, se trata de usalo valor octal dos bits que compoñen os permisos e que dan como valor o seguinte:
| Valor: | Define: | Equivalente: |
|---|---|---|
| 4 | Lectura | r |
| 2 | Escritura | w |
| 1 | Execución | x |
| 0 | ningún | - |
Entonces sumando esos 3 números, podemos obter combinacións do 0 ao 7 pra aplicalos permisos a un dos tres integrantes dos permisos básicos “dono”, “grupo”, “outros.
Total que para sumalos permisos terías que xogar cos valores r,w,x , os cales serían equivalentes a: 4,2,1
No caso de 0, sería ningún, todo son valores octais.
Exemplo permisos octáis:
chmod 604 ficheiro
Neste caso, asgina:
| Obxetivo: | Valor: | Permiso efectivo: |
|---|---|---|
| dono | 6 | Lectura 4 + Escritura 2 |
| grupo | 0 | Ningún |
| outros | 4 | Lectura |
Efectos dos permisos en arquivos e directorios
Repaso básicos
Repaso os básicos para logo explicar os avanzados.
En unix todo son ficheiros, un ficheiro non é máis que un conxuto de bits. Os directorios son ficheiros especiais que como un “directorio telefónico” apuntan a outros directorios ou ficheiros.
O de lectura “r”
- No caso dun arquivo, permite que os seus contidos sexan lidos e copiados.
- Nun directorio, Sen o permiso de execución permite un listado non detaiado dos seus arquivos, non podrían usar o “ls -l” por exemplo, pero si verían que ficheiros están rexistrados no directorio.
O de escritura “w”
- ficheiro: Permite que se poidan modificar e sobreescribir os contidos, así como borrar o arquivo.
- directorio: Para que funcione o permiso ten que estar habilitado o de execución no directorio.
Execución “x”
- ficheiro: Permite que o ficheiro sexa executado coma un proceso, os scripts precisarán ter o de lectura tamén.
- directorio: Permite ao usuario mudar de directorio se os directorios pais teñen permisos de execución, xa que o arquivo especial do directorio en si se pode executar o cal o fai iteractivo ofrecendo información dos ficheiros aos que apunta.
Permisos avanzados sobre ficheiros
Aquí xa entramos nos famosos “setuid”, “setgid” e o “sticky bit”.
Estos son aplicados por Root, poidendo aplicarse de maneira simbólica ( con letras ) ou octal.
No caso do octal faixe engadindo un número máis ao principio.
Setuid e setgid
setuid
setuid = SET User ID upon execution.
O permiso setuid usado nos arquivos executables, permite executalos como root a usuarios que non o son.
Isto pasaría noutros sistemas UNIX, en GNU/Linux o kernel só executa dito permiso se o arquivo é un binario, isto engade unha capa de seguridade que impide que os usuarios poidan modificalo programa e executalo coma root.
setgid
No caso do arquivos faría o mesmo que setuid pero esta vez usando o grupo.
No caso dos directorios aos que se lle aplica, permite que os usuarios poidan compartir arquivos con outros usuarios que están en diferentes grupos.
Cando os usuarios crean un arquivo no directorio, automáticamente pasan a telo grupo propietario do directorio, en lugar do seu grupo por defecto.
Resumo efectos de setuid e setgid
Setuid nun arquivo
Fai que o arquivo se execute baixo a identidade do dono do arquivo, en lugar da identidade do usuario que o executa.
- símbolo: s viría a remplazar ao x nos permisos do usuario.
- octal: 4000.
Setgid nun arquivo
Fai que o arquivo se execute baixo a identidade do grupo do arquivo, en lugar da identidade do grupo do usuario que o executa.
- símbolo: s viría a remplazar ao x nos permisos do grupo.
- octal: 2000.
Setgid nun directorio
Fai que os novos arquivos e directorios creados nel, sexan creados aplicándolles o grupo dono do directorio.
- símbolo: s viría a remplazar ao x nos permisos do grupo.
- octal: 2000.
Sticky bits
Efecto Sticky bit nos arquivos
Resumo: En GNU/Linux non se usa nos arquivos, o kernel non o ten en conta.
Noutros sistemas UNIX o sticky bit úsase tamén cos ficheiros, dependendo do sistema traballará dunha forma ou outra normalmente se trataría de evitar que carguen os datos en swap para axilizala execución dos mesmos, a súa implantación data da quita edición de UNIX no 1974 e o seu uso noutras versións de UNIX aló polo 1984. No caso de GNU/Linux o kernel pasa do sticky bit nos arquivos.
Polo tanto, non se aplica o sticky bit aos arquivos e no caso de facelo non sería utilizado polo kernel do sistema.
Efecto Sticky bit nos directorios
O permiso “stick” coñecido como “sticky bit” ( O bit pegañento ), é importante para evitar que os usuarios non poidan eliminalos ficheiros dos outros usuarios.
O sticky bit nun directorio modifica o permiso de escritura nun directorio, onde só usuarios específicos poden borrar arquivos co sticky bit definido no directorio que os contén:
- O usuario que posee o arquivo.
- O usuario que posee o directorio que ten o sticky bit ( Acostuma a selo root ).
- O usuario root.
Un exemplo de uso do sticky bit, serían os directorios de temporáis /tmp e /var/tmp.
Cando un directorio ten o sticky unha “t” remplazará a “x” nos permisos de others.
No caso de ter “T” significa que os usuarios afectados por others, non teñen o permiso de execución nos arquivos do directorio. Non podrán cambiar a este directorio ou crear arquivos nel.
Resumo Sticky bit
Sticky bit nun arquivo
O kernel de GNU/Linux non lle fai caso nos arquivos, polo que non se usa.
Sticky bit no directorio
Fai que os arquivos dentro do directorio só poidan ser eliminados polo seu dono ou polo root.
- símbolo: t remprazaría ao x nos permisos de “outros”.
- octal: 1000.
Eliminar os permisos especiáis en ficheiros e directorios
Se poñemos o “0000” como en “0777” estariamos quitándolle os permisos especiais ao arquivo ou directorio a tratar.
Umask
Por defecto os arquivos se crean con tódolos seus bits de permisos a 1 salvo os de execución que os pon a 0, o cal resulta en que todos poden leer eescribir no caso dos arquivos, en octal sería 666, no caso dos directorios 777 pois sen execución os directorios non funcionan.
Cando se carga a terminal, se define automáticamente o umask que soe ser 002 ou 022, dependendo da distribución que uses.
O umask restaría os valores dos bits dos permisos por defecto, facendo que se aplique o resultado como os permisos efectivos básicos do arquivo. ( Se non, todos serían 666 no caso dos arquivos e 777 no dos directorios ).
Comportamento de umask
O comando umask, é executado automáticamente cando iniciamos sesión nunha terminal.
Para ter unha UMASK persoalizada e persistente, podemos configurala no arquivo ~/.bashrc .
O umask afecta aos novos arquivos ou directorios que creamos.
Afecta aos permisos básicos de dono,grupo,outros , tamén aos de setuid,setgid ou ao sticky bit. En definitiva todos aqueles que se poidan definir cos números octais.
O que fai é “enmascaralos” permisos que se aplicarían por defecto según o sistema.
Canto máis elevado sexa o valor octal definido máis permisos quitaría ao dono, grupo ou outros aos que se lle aplica.
Como pasa cos permisos octais, aquí teriamos os seguintes valores octais para enmascaralos “umask” arquivos:
- Lectura = 4
- Escritura = 2
- Execución = 1
- Ningún = 0
Por defecto o permiso de execución non se aplica aos arquivos, polo que nos moveriamos polo rango de 0 a 6, poidendo usar o 7 no umask para quitalos todos.
Orixe das definicións de umask por defecto
Noutros sistemas operativos a creación de directorios ou arquivos se pode basear nos permisos do directorio pai, mais en UNIX se basa na especificación da UMASK do usuario.
A umask por defecto dos usuarios se define no /etc/profile.
Nas sesións ssh pode asignarse outro diferente segundo se defina no sshd_conf.
Logo tamén pode ser definido en calquer script intermedio que sexa chamado cando se carga a sesión e o entorno de traballo do usuario.
Consulta do umask que temos aplicado actualmente
Velo umask que temos actualmente:
$ umask
0002
Exemplos de umask sobre arquivos e directorios
Umask na creación de arquivos
Supoñamos que queremos que os arquivos se creen cos seguintes permisos “un tanto raros”: rw-,-w-,r–
No noso /etc/profile por defecto pode vir o umask 0002 ( no caso de ubuntu ), isto supón que aos permisos por defecto 0666 para os arquivos , sempre lle restan aparte, neste caso restaría o de escritura para outros, quedándolle a outros só a posibilidade de leelo arquivo.
O umask actual da miña sesión é: 0002
Cando fago un arquivo por defecto ten os permisos en octal: 664
Entonces teriamos que calcular qué permisos lle queremos “restar” aos de por defecto:
En octal se calcuarían así: 1 , 4+1 , 2+1
Sendo o resultado octal: 6,2,6
Para facela máscara umask sería: 1,5,3
Este sería o umask a usar: 153
Fago un arquivo probas, miro os seus permisos, e logo mudo o umask e fago outro, estos son os resultados:
usuario@localhost:~$ umask
0002
usuario@localhost:~$ touch proba
usuario@localhost:~$ umask 153
usuario@localhost:~$ touch proba2
usuario@localhost:~$ ls -l proba*
-rw-rw-r-- 1 usuario usuario 0 Mar 26 16:36 proba
-rw--w-r-- 1 usuario usuario 0 Mar 26 16:47 proba2
Cómo se pode observar, nunca por defecto se aplicarán os permisos de execución, e logo unha vez aplicado o umask, nos seguintes arquivos creados se aplicarán os permisos desexados coa nosa mascara “rara”.
Un umask bastante efectivo e “seguro” sería o de 0055, o cal só deixaría permisos de lectura ao grupo e a outros. Ou ben meterlle o 7 para outros, e así non terán nengún permiso, mais estos permisos poden facer que os usuarios atopen problemas a hora de usalos arquivos, todo depende de cómo plantexes a seguridade e uso do teu sistema.
Umask na creación de directorios
Cando se crean arquivos, por seguridade o sistema nunca lles aplica o de execución (0666), mais cando creamos directorios por utilidade sempre se lles asina o de execución (0777), pois o directorio ao final é un arquivo que apunta aos inodes dos arquivos aos que enlaza, e sen “execución” o directorio non fai a súa “maxia” de amosar os arquivos que “contén”.
Tendo en conta o tema do permiso de execución o resto sería igual.
umask e permisos especiais
Nestos exemplos uso o 0 ao principio, mais o umask tamén pode afectar aos setuid, setgid e ao bit pegañento, mais non é unha práctica recomendable,xa que por defecto se crean sen este bit especial, polo tanto a restarlle 0 a este bit, incluso se podría definilo umask con só 3 números octais.