Comando 'chmod g + s'

45

Hola, quiero entender el papel del chmod g+scomando en Unix.

También me gustaría saber qué hace en este contexto particular:

cd /home/canard;
touch un;
chgrp canard .;
chmod g+s .;
touch deux ;

Entiendo todos los roles de los comandos excepto chmod g+sy quiero saber las diferencias entre los archivos uny los deuxresultados de esta serie de comandos.

otus
fuente

Respuestas:

61
chmod g+s .;

Este comando establece el ID de grupo (setgid) en el directorio actual, escrito como ..

Esto significa que todos los archivos y subdirectorios nuevos creados dentro del directorio actual heredan la ID de grupo del directorio, en lugar de la ID de grupo principal del usuario que creó el archivo. Esto también se pasará a los nuevos subdirectorios creados en el directorio actual.

g+s afecta la identificación del grupo del archivo pero no afecta la identificación del propietario.

Tenga en cuenta que esto solo se aplica a los archivos recién creados . Los archivos que se mueven ( mv) al directorio no se ven afectados por la configuración setgid. Los archivos que se copian cp -ptampoco se ven afectados.

Ejemplo

touch un;
chgrp canard .;
chmod g+s .;
touch deux ;

En este caso, deuxpertenecerá al grupo canardpero unpertenecerá al grupo del usuario que lo creó, sea lo que sea.

Nota menor sobre el uso de punto y coma en los comandos de Shell

A diferencia de co perl, un comando de shell solo debe ir seguido de un punto y coma si hay otro comando de shell siguiéndolo en la misma línea de comando. Por lo tanto, considere la siguiente línea de comando:

chgrp canard .; chmod g+s .;

El punto y coma final es superfluo y se puede eliminar:

chgrp canard .; chmod g+s .

Además, si tuviéramos que colocar los dos comandos en líneas separadas, entonces el punto y coma restante no es necesario:

chgrp canard .
chmod g+s .
John1024
fuente
1
De hecho, los archivos que se copian (por ejemplo, por cp) son de nueva creación. Si no heredan el permiso de grupo, el programa de copia está jugando juegos, como copiar a un archivo temporal y luego moverlo al directorio de destino.
Kaz
1
@Kaz Buen punto. Actualicé la respuesta para aclarar que es la cp -pque anula la configuración setgid.
John1024
¿Pero cp -panula la configuración setgid? ¿En cada implementación de Unix existente? POSIX dice que no se especifica si un error al copiar la ID de usuario o la ID de grupo en cp -p da como resultado un mensaje de diagnóstico. Sin embargo, los bits S_SUID y S_SGID, respectivamente, deben borrarse en esa situación (es decir, si un archivo es setuid bob, pero la propiedad de bob no se puede copiar para que el archivo sea propiedad de janet, no lo haga setuid) janet.)
Kaz
"¿ cp -panula la configuración setgid?" De acuerdo con la especificación POSIX, eso es lo que se supone que debe hacer. Lo hace en todos los sistemas Unix que he usado. Ha citado la parte de la especificación con respecto a qué hacer para proteger la seguridad en el caso de que la ID del grupo no se pueda duplicar. Nunca me he encontrado con una situación de "no puedo", ¿verdad?
John1024
7

Puede cambiar los permisos de archivo con el comando chmod. En Unix, los permisos de archivo, que establecen quién puede tener diferentes tipos de acceso a un archivo, se especifican tanto por clases de acceso como por tipos de acceso. Las clases de acceso son grupos de usuarios, y a cada uno se le pueden asignar tipos de acceso específicos.

Unix / Linux tiene usuarios y grupos de usuarios que se pueden asignar para el acceso a archivos

Las opciones g + s son las siguientes:

g - los permisos que otros usuarios en el grupo del archivo tienen para ello

s: establece la identificación de usuario o grupo en la ejecución

Aquí hay un ejemplo de uso:

chmod =rwx,g+s filename

(permita que todos lean, escriban y ejecuten un archivo en particular y activen la ID de grupo establecida)

Para establecer / modificar los permisos de un archivo, debe usar el programa chmod. Por supuesto, solo el propietario de un archivo puede usar chmod para alterar los permisos de un archivo. chmod tiene la siguiente sintaxis: chmod [opciones] archivos de modo La parte 'modo' especifica los nuevos permisos para los archivos que siguen como argumentos. Un modo especifica los permisos de los usuarios que deben cambiarse, y luego qué tipos de acceso deben cambiarse. Digamos por ejemplo: chmod ax socktest.pl

Esto significa que el bit de ejecución debe borrarse (-) para todos los usuarios. (propietario, grupo y el resto del mundo) Los permisos comienzan con una carta que especifica qué usuarios deberían verse afectados por el cambio, esto podría ser cualquiera de los siguientes:

u the owner user
g the owner group
o others (neither u, nor g)
a all users

Esto es seguido por una instrucción de cambio que consiste en un + (bit establecido) o - (bit claro) y la letra correspondiente al bit que debe cambiarse. Veamos algunos ejemplos:

$ ls -l socktest.pl 
-rwxr-xr-x   1 nick     users         1874 Jan 19 10:23 socktest.pl*

$ chmod a-x socktest.pl 
$ ls -l socktest.pl 
-rw-r--r--   1 nick     users         1874 Jan 19 10:23 socktest.pl

$ chmod g+w socktest.pl 
$ ls -l socktest.pl 
-rw-rw-r--   1 nick     users         1874 Jan 19 10:23 socktest.pl

$ chmod ug+x socktest.pl 
$ ls -l socktest.pl 
-rwxrwxr--   1 nick     users         1874 Jan 19 10:23 socktest.pl*

$ chmod ug-wx socktest.pl 
$ ls -l socktest.pl 
-r--r--r--   1 nick     users         1874 Jan 19 10:23 socktest.pl

Números extraños ... Es posible que haya encontrado cosas como el archivo chmod 755 y, por supuesto, se preguntará qué es esto. La cuestión es que puede cambiar todo el patrón de permisos de un archivo de una vez usando un número como el de este ejemplo. Cada modo tiene un número de código correspondiente y, como veremos, hay una manera muy simple de averiguar qué número corresponde a cualquier modo. Cada uno de los tres dígitos del número de modo corresponde a uno de los tres tripletes de permisos. (u, g y o) Cada bit de permiso en un triplete corresponde a un valor: 4 para r, 2 para w, 1 para x. Si el bit de permiso agrega este valor al número del triplete de permisos. Si se borra, no agrega nada. (Algunos de ustedes podrían notar que, de hecho,

Triplete para ti: rwx => 4 + 2 + 1 = 7

Triplete para g: r-x => 4 + 0 + 1 = 5

Triplete para o: r-x => 4 + 0 + 1 = 5

Que hace : 755

Entonces, 755 es una manera concisa de decir 'No me importa si otras personas leen o ejecutan este archivo, pero solo yo debería poder modificarlo' y 777 significa 'todos tienen acceso completo a este archivo'

referencia perfecta

paralaje
fuente
0

El resultado del comando ls dependerá de umask.

g + s establecerá sgid en el archivo. Consulte aquí para obtener más información sobre SUID SGID

así que si tu umask, por ejemplo, es 022, el resultado será algo como:

-rw-r--r--    1 romeo    canard     0 Jan 31 20:58 deux
-rw-r-Sr--    1 romeo    UsersGrp   0 Jan 31 20:58 un
Romeo Ninov
fuente
0

En Linux, ¿una de las opciones de montaje predeterminadas para ext? fs es 'nogrpid | sysvgroups '. Entonces, el primer toque un, crea un archivo con una identificación de grupo igual a fsgid del proceso de creación donde fsgid = egid.

chmod g + s., hace que la creación posterior de archivos / directorios herede la identificación del grupo de la carpeta principal y si lo creado es un directorio, también se establece g + s como su padre.

Aquí toca deux, crea deux, con grupo de canard.

La semántica cambia si la opción de montaje era 'grpid | bsdgroups 'en ese caso, la creación de un nuevo archivo / directorio heredaría la identificación del grupo de su carpeta principal, incluso sin configurar g + s para el padre mismo.

Nizam Mohamed
fuente