2011-04-28 19 views
5

Me gustaría escribir datos en un archivo, pero el manejador de archivos debe abrirse con permisos de acceso para un usuario específico.Cómo abrir el manejador de archivos Perl para escribir datos vía sudo (o como otro usuario)

Por lo tanto, la siguiente declaración:

open (FH, "> $filename") or die "[email protected]\n"; 

permitiría escribir en un archivo como ese usuario en particular.

¿Hay alguna manera de hacer esto dentro de un script de Perl, sin ejecutar todo el script con sudo -u $username?

+1

Bueno para cambiar el UID efectivo '$>' necesita estar ejecutándose como root, ¿su script se ejecuta ya sea como raíz de setuid o como usuario root? – Doon

Respuesta

2

Existen dos formas establecidas. Stackers, está invitado a editar esta respuesta para completar los inconvenientes de cada uno.

Ejecute el programa con sudo. Lo primero que debe hacer en el programa es abrir los archivos que necesita y conservar los identificadores, e inmediatamente después, drop the root privileges. Cualquier procesamiento adicional debe realizarse con pocos privilegios. Al Apache httpd le gusta esto, abre los archivos de registro como root, pero continúa ejecutándose como nobody o similar.

Si no te gusta de esa manera, ejecuta el programa normalmente, y cuando se necesita para elevar, crear un nuevo proceso y hacer que se ejecute con un usuario configurado sudo, su -, kdesu/gksu o lo que sea. Al cliente de CPAN le gusta esto, busca, desempaqueta, construye y prueba un módulo como un usuario normal, pero llama al sudo make install, etc. cuando es hora de instalarlo.

+0

No sé si puedo abrir un manejador de archivo grabable que use 'sudo'. Realmente estoy tratando de evitar 'sudo', a menos que pueda hacer que ese archivo se pueda escribir para ese usuario. En cuanto a la segunda opción, tendría que pasar el programa 'sudo'ed una referencia de hash Perl, de alguna manera, lo cual no parece sencillo. ¿Esto ayuda a que la pregunta tenga más sentido? –

0

Una alternativa a las sugerencias de daxim es hacer que el script sea propiedad del usuario específico y que los permisos del script incluyan los bits setuid y/o setgid.

+0

... tenga en cuenta, sin embargo, que esto puede ser un dolor real para actualizar/mantener a largo plazo porque la mayoría (si no todos) * nices borrarán los bits suid/sgid cada vez que edite el archivo. –

Cuestiones relacionadas