usuario una todos recursivos recursivo propietario permisos los dar carpeta cambiar archivos chef

chef - una - permisos linux 777



¿Cómo cambio recursivamente el propietario y el grupo en un directorio con Chef? (4)

El resource_directory solo tiene 2 acciones disponibles: create y delete

Necesito actualizar recursivamente el propietario y el grupo de un directorio.

¿Cómo puedo hacer eso?

utilizando un simple resource_execute ?

execute "chown-data-www" do command "chown -R www-data:www-data /var/www/myfoler" user "root" action :run end


Podríamos escribir un recurso de chef que itere a través de su jerarquía de directorios y cree un archivo o recurso de directorio para cada archivo que encuentre y luego configurarlo para administrar el propietario y el grupo en esos archivos. Sin embargo, no le gustará eso, ya que si tiene mil archivos en ese directorio, obtendrá mil recursos de chef y sus convergencias serán lentas.

Si lo desea, puede, de hecho, lanzar su propio código que hace algo como lo que escribí en los tickets tickets.opscode.com/browse/CHEF-690 que se hacía referencia @name, pero no lo recomendaría.

Si está tratando de evitar la "manipulación" y corregir la corrupción aleatoria de los atributos de usuario y grupo, su solución probablemente sea correcta. Siempre ejecutará ese comando en cada convergencia de chef y el recurso siempre se mostrará como actualizado, pero el comando se ejecutará lo más rápido posible (chown -R es básicamente convergente e idempotente, ya que verifica los permisos antes de intentar establecerlos) ). No obtendrá informes sobre permisos fijos, que es el único inconveniente.

Si solo intenta corregir los permisos una vez que construye un servidor, entonces debe lanzar un condicional de no_si para verificar que si el directorio raíz tiene los permisos correctos, no lo ejecute cada vez. Eso le dará un comportamiento idempotente y no ejecutará el comando en cada ejecución, pero el inconveniente es claramente que si uno de los archivos bajo esa estructura de directorios tiene sus permisos alterados por alguien o algo en el futuro, entonces no se corregirá.

Hay un posible caso de uso aquí para un recurso único que se comporta como chown -R y luego informa de lo que solucionó (y la matriz de archivos que tenían perms cambiados) que sería útil para casos como los informes SOX y PCI-DSS, pero Actualmente cubrimos ese caso de uso.

tl; dr es que su solución está bien y puede agregar una protección not_if si lo desea


Puede configurar la acción predeterminada a nada y luego tener recursos que pueden arruinar las cosas, notifique al reparador de permisos:

execute "chown-data-www" do command "chown -R www-data:www-data /var/www/myfoler" user "root" action :nothing end resource "that may screw up perms" do stuff "one two three" notifies :run, execute "chown-data-www" end

con más opciones podría tener la acción: ejecute pero no si la carpeta principal ya tiene los permisos correctos. Puede modificar esto para incluir un directorio / archivo / problema más profundo, o con un comando de búsqueda similar a this

execute "chown-data-www" do command "chown -R www-data:www-data /var/www/myfoler" user "root" action :run not_if "stat -c %U /var/www/myfolder |grep www-data" end

Editar: corregir para reflejar el comentario a continuación


Si esto es una sola vez para arreglar los permisos, su ruta más corta podría ser solo cuchillo ssh. (Simplemente lo hice después de terminar aquí en mi propia búsqueda).

knife ssh ''name:*'' "sudo chown -R $user:$group /full/path/to/directory"

knife ssh ''name:*'' "sudo chmod -R 770 /full/path/to/directory"

Si estuviera configurando esto desde cero, creo que necesitaría configurar la ruta del directory y los permisos adecuados con una línea (NOTA: aplique explícitamente los permisos a cada padre en la ruta)

%w[ /foo /foo/bar /foo/bar/baz ].each do |path| directory path do owner ''root'' group ''root'' mode ''0755'' end

y luego crear cada file individual como un cookbook_file.


Yo usaría el directorio de recursos sin formato con action :create . Por documentación:

:create Default. Create a directory. If a directory already exists (but does not match), update that directory to match

directory