Creé una instalación de software de python con setup.py. En este software utilizo archivos de datos (archivo XML) cuando instalo estos archivos XML usando setup.py, estos archivos se guardan con otros archivos en /usr/lib/python2.7/site_packages/XYZ
. Pero el permiso de archivo establecido en estos archivos (archivos XML) rwx------
significa que solo el superusuario (raíz) puede leer este archivo. Quiero cambiar el permiso de archivo de archivos XML, ya que rwxr-----
significa que el usuario actual también puede leer ese archivo. ¿Cómo cambio el permiso de los archivos de datos?establecer permisos de archivos en el archivo setup.py
Respuesta
de sesión como root, y en el tipo de shell:
chmod 744 yourfilename
Si es para fines de implementación, solicitar al usuario que se registre como implementación raíz a parche es la peor idea – Bruce
No quiero que el usuario haga esto manualmente cuando el usuario instale este software usando el archivo setup.py entonces el software lo hará automáticamente –
¿No puede simplemente establecer el permiso antes del lanzamiento? – lamwaiman1988
La forma correcta de hacerlo sería para anular el comando install
, aquí es cómo hacerlo.
En primer lugar, en el comienzo de sus setup.py
añadir las siguientes importaciones:
from setuptools.command.install import install
from distutils import log # needed for outputting information messages
Luego hay que crear una clase de comando puede ser llamado, aquí es un ejemplo en el que se crea una clase de comando que instala un guión y se asegura que sólo es ejecutable para root
(la hay otras maneras de que en Python por ejemplo siempre se puede salir de la secuencia de comandos, si no es 0. UID.) también estoy usando otra importación aquí:
from setuptools.command.install_scripts import install_scripts
class OverrideInstall(install):
def run(self):
uid, gid = 0, 0
mode = 0700
install.run(self) # calling install.run(self) insures that everything that happened previously still happens, so the installation does not break!
# here we start with doing our overriding and private magic ..
for filepath in self.get_outputs():
if self.install_scripts in filepath:
log.info("Overriding setuptools mode of scripts ...")
log.info("Changing ownership of %s to uid:%s gid %s" %
(filepath, uid, gid))
os.chown(filepath, uid, gid)
log.info("Changing permissions of %s to %s" %
(filepath, oct(mode)))
os.chmod(filepath, mode)
Ahora se crea la clase. Yo notifique al instalador que al ver install
en la línea de comandos de esta clase debe ser invocada:
setup(
# keep
# all the previous keywords you had ...
# add
cmdclass={'install': OverrideInstall}
)
Espero que esta respuesta ayuda.
Yo uso setup.py
para construir RPM de todo tipo. La solución es un poco diferente para mí. También creo que es más robusto, por dos razones:
- que pueden anular los permisos de un archivo de forma explícita
- no necesito saber el UID y GID del usuario. En cambio, puedo usar texto sin formato.
aquí es un ejemplo de trabajo
from distutils.core import setup
import distutils.command.bdist_rpm
import distutils.command.install
version='13'
data_files = [
('/usr/share/blah', ['README', 'test.sh']),
]
permissions = [
('/usr/share/blah', 'test.sh', '(755, sri, sri)'),
]
class bdist_rpm(distutils.command.bdist_rpm.bdist_rpm):
def _make_spec_file(self):
spec = distutils.command.bdist_rpm.bdist_rpm._make_spec_file(self)
for path, files , perm in permissions:
##
# Add a line to the SPEC file to change the permissions of a
# specific file upon install.
#
# example:
# %attr(666, root, root) path/file
#
spec.extend(['%attr{} {}/{}'.format(perm, path, files)])
return spec
setup(name='sri-testme',
version=version,
description='This is garganbe and is only used to test the permision flag behavior',
author='Chris Gembarowski',
author_email='[email protected]',
url='https://www.python.org/sigs/distutils-sig/',
data_files=data_files,
cmdclass={'bdist_rpm':bdist_rpm}
)
Voy a explicar lo que está pasando con más detalle. Los RPM se crean a partir de un archivo SPEC. bdist_rpm crea un archivo SPEC. En un archivo SPEC, puede seleccionar los permisos y la propiedad de un archivo suministrando la opción% attr.
En el ejemplo para hacer que test.sh sea ejecutable y que sea propiedad del usuario 'sri', agregaría %attr(755, sri, sri)
al final del archivo SPEC.
Así que cuando anulo el comportamiento de bdist_rpm._make_spec_file todo lo que hago es agregar una línea para cada archivo sobre el que deseo anular los permisos.
El archivo de especificación completa de este ejemplo sería:
%define name sri-testme
%define version 13
%define unmangled_version 13
%define release 1
Summary: This is garganbe and is only used to test the permision flag behavior
Name: %{name}
Version: %{version}
Release: %{release}
Source0: %{name}-%{unmangled_version}.tar.gz
License: UNKNOWN
Group: Development/Libraries
BuildRoot: %{_tmppath}/%{name}-%{version}-%{release}-buildroot
Prefix: %{_prefix}
BuildArch: noarch
Vendor: Chris Gembarowski <[email protected]>
Url: https://www.python.org/sigs/distutils-sig/
%description
UNKNOWN
%prep
%setup -n %{name}-%{unmangled_version}
%build
python setup.py build
%install
python setup.py install -O1 --root=$RPM_BUILD_ROOT --record=INSTALLED_FILES
%clean
rm -rf $RPM_BUILD_ROOT
%post
##
# sri will be turned on in the run-once script instead of here
#
%preun
#!/bin/bash
%files -f INSTALLED_FILES
%defattr(-,root,root)
%attr(755, sri, sri) /usr/share/blah/test.sh
- 1. Establecer permisos en un archivo comprimido en python
- 2. ¿Qué permisos de archivos debe tener el contenido de $ GIT_DIR?
- 3. setup.py no instala los archivos de datos
- 4. Permisos en archivos de solución para modificar
- 5. setup.py ejemplos?
- 6. escritura de permisos de archivo en Android
- 7. configuración de python setup.py para instalar archivos en directorios personalizados
- 8. ¿Cómo establecer permisos en un repositorio svn?
- 9. archivos de datos se suman a proyectos python setup.py
- 10. Los permisos de archivo no heredan los permisos de directorio
- 11. Almacenamiento de permisos de archivos en el repositorio de Subversion
- 12. setup.py: ¿instalar solo un archivo pth?
- 13. setup.py y agregando archivo a/bin/
- 14. ¿Establecer permisos predeterminados para los archivos y subdirectorios recién creados en un directorio de Linux?
- 15. ¿Cómo puedo establecer permisos de programación en mi dispositivo char
- 16. Establecer el elemento del archivo de entrada con el archivo usando la API de archivos HTML5
- 17. Permisos de archivos Java para hilos
- 18. Cómo establecer permisos para Android Bluetooth
- 19. Odd permisos en el archivo modificado por PHP move_uploaded_file()
- 20. Manipulación de permisos de archivos de Windows en Java
- 21. ¿Cuál es la forma de Python para establecer permisos de archivos recursivamente?
- 22. ¿Cómo puedo ejecutar un archivo Makefile en setup.py?
- 23. ¿Cómo configuro los permisos (atributos) en un archivo en un archivo ZIP usando el módulo zipfile de Python?
- 24. Conservación de permisos de archivos con Git
- 25. Modificar los permisos del archivo de subversión
- 26. Permisos de archivos de Linux para dispositivos USB en Android
- 27. Tomar posesión de archivos con permisos 'rotos'
- 28. ¿Cómo cambio programáticamente los permisos de archivos?
- 29. Google Drive SDK Permisos por archivo/carpeta
- 30. Mantener los permisos de archivos y carpetas dentro de los archivos
¿Cuál es su umask establece en? – Keith