¿Por qué chmod + w no da permiso de escritura a otro (o)

18

Cuando lo ejecuto chmod +w filenameno da permiso de escritura a other, solo da permiso de escritura a usery group.

Después de ejecutar este comando

chmod +w testfile.txt

ls -l testfile.txtimpresiones en ejecución

-rw-rw-r-- 1 ravi ravi 20 Mar 10 18:09 testfile.txt

pero en caso de +ry +xfunciona correctamente.

No quiero usar chmod ugo+w filename.

Ravi Sevta
fuente
1
Si no quiere usar ugo, use a.
muru
Sí, pero solo quiero saber por qué +wno funciona.
Ravi Sevta
Por eso dejé dos comentarios.
Muru
@muru. Afirma en su askubunturespuesta que hace referencia más arriba que "Este comportamiento es un mandato POSIX y, por lo tanto, no es un error". Tenga en cuenta que el texto de uso de la aplicación POSIX no es normativo y, por lo tanto, POSIX no lo exige.
fpmurphy

Respuestas:

26

Su situacion especifica

En su situación específica, podemos adivinar que su actual umaskes 002(este es un valor predeterminado común) y esto explica su sorpresa.

En esa situación específica donde el umaskvalor es 002 (todos los números son octales).

  • +rsignifica ugo+rporque 002 & 444es 000, lo que permite establecer todos los bits
  • +xsignifica ugo+xporque 002 & 111es 000, lo que permite establecer todos los bits
  • pero +wsignifica ug+wporque 002 & 222es 002, lo que impide que se establezca el bit "o".

Otros ejemplos

  • Con umask 022 +wsignificaría u+w.
  • Con umask 007 +rwxsignificaría ug+rwx.
  • Con umask 077 +rwxsignificaría u+rwx.

¿Qué hubiera cumplido con sus expectativas?

Cuando cambias umaska 000, ejecutando

umask 000

en tu terminal, entonces

chmod +w file

establecerá permisos para ugo + w.

Nota al margen

Según lo sugerido por ilkkachu, tenga en cuenta que eso umask 000no significa que todos puedan leer y escribir todos sus archivos.

Pero umask 000significa que todos los que tienen algún tipo de acceso a cualquier cuenta de usuario en su máquina (que puede incluir programas que ejecutan servicios de servidor ofc) pueden leer y escribir todos los archivos que crea con esa máscara activa y no cambian (si la cadena que contiene directorios hasta la raíz también les permite).

Prvt_Yadav
fuente
44
umask 000 significa que todos los que tienen algún tipo de acceso a una cuenta de usuario en su máquina (que puede incluir programas que ejecutan servicios de servidor de c) pueden leer y escribir todos los archivos que crea con esa máscara activa y no cambian, para ser claros
StarWeaver
44
"+ r significa ugo = r" - no, no lo hace, significa establecer el rbit para aquellas partes donde el umask lo permite. Esto se indica claramente en los manuales de, por ejemplo, GNU chmod y FreeBSD chmod, así como en el estándar. Lo mismo para +x. Pues +wtienes razón, para el caso de esa umask particular.
ilkkachu
44
Además, configurar umask 0 no significa que todos puedan leer y escribir todos sus archivos, ya que muchas aplicaciones crean archivos que son particularmente privados con el modo 0600, lo que significa que el grupo y otras personas no tienen acceso, independientemente de la umask.
ilkkachu
@ilkkachu + r significa ugo = r, esto estaba relacionado con la situación descrita en la pregunta. Eso no fue general.
Prvt_Yadav
2
@Debian_yadav, ese es exactamente el punto: umaskes una parte importante de cómo se +rcomporta, no una nota al margen. Además, incluso asumir umask 002, chmod +rno significa chmod ugo=r, significachmod ugo+r
ilkkachu
24

Con:

chmod +<perms>

los permisos se agregan a usuarios , grupos y otros, pero la umask aún se aplica Se asegura de que el archivo no tenga más permiso que un archivo recién creado.

Si desea agregar los permisos a usuarios , grupos y otros independientemente de la umask, use

chmod a+<perms>

que es la abreviatura de

chmod ugo+<perms>
Stéphane Chazelas
fuente
Significa que + x y a + x no son iguales.
Prvt_Yadav
1
Me gusta tener enlaces: man7.org/linux/man-pages/man1/chmod.1.html „Si no se da ninguno de estos, el efecto es como si se hubiera dado (a), pero bits que se establecen en la máscara de usuario no están afectados. "
tehnicaorg
0

Debe especificar a quién le está dando los permisos, por ejemplo other, mediantechmod o+w testfile.txt

Jaken551
fuente
1
Sí, pero creo que +wda permiso a todos (usuario, grupo y otros).
Ravi Sevta
Para otorgar permisos a todos los usuarios, use chmod a+w testfile.txt. Úselo upara usuario, gpara grupo, opara otro y apara todos.
Jaken551
si chmod a+w filename, chmod +w filenamey chmod ugo+w filenameson alternativas entre sí, entonces ¿por qué no solo usar?+w
Ravi Sevta