Cuando SCP'ing a mi servidor Fedora, un usuario sigue recibiendo errores acerca de no poder modificar las marcas de tiempo del archivo ("hora establecida: operación no permitida"). El usuario no es el propietario del archivo, pero no podemos enviarle chown
archivos a este usuario por razones de seguridad. El usuario puede sudo
, pero como esto sucede a través de un cliente SCP / FTP, tampoco hay forma de hacerlo. Y finalmente, no queremos tener que darle acceso a este usuario root, solo para permitirle usar una sincronización como rsync o WinSCP que necesita establecer marcas de tiempo.
El usuario es parte de un grupo con rw
permisos completos en todos los archivos y directorios relevantes. ¿Alguna idea sobre cómo otorgar permiso de usuario a touch -t
estos archivos específicos sin chown
dárselos?
Información adicional Todo esto tiene que ver con habilitar el desarrollo de PHP en un escenario de desarrollador único (es decir, sin SCM). Estoy tratando de trabajar con Eclipse o NetBeans para trabajar en una copia local del sitio basado en PHP (WordPress), mientras le permito al usuario obtener una vista previa "instantánea" de sus cambios en el servidor de desarrollo. El usuario estará trabajando de forma remota. Hasta ahora, todos los intentos de sincronización automática han fallado, incluso utilizando WinSCP en modo "carpeta de observación", donde monitorea una carpeta local e intenta cargar cualquier cambio hasta el error del directorio remoto porque siempre intenta establecer la fecha / marca de tiempo .
El usuario tiene acceso a sudo, pero me han dicho que realmente no es una buena idea trabajar en 'root', por lo que no he estado dispuesto a iniciar sesión como root para hacer este trabajo. Además, no debería ser necesario. Me gustaría que otro usuario que no sea superusuario pueda hacer lo mismo: usar la información de su cuenta, establecer una conexión FTP y poder trabajar de forma remota a través de la sincronización. Por lo tanto, la solución debe funcionar para alguien sin acceso de root.
Lo que me sorprende es la dificultad que tengo. Todos estos softwares (NetBeans, Eclipse, WinSCP) están diseñados para permitir la sincronización, y todos intentan escribir la marca de tiempo. Entonces debe ser posible. WinSCP tiene la opción de desactivar "establecer marca de tiempo", pero esta opción deja de estar disponible (siempre "activada") cuando selecciona monitor / sincronizar carpeta. Por lo que se tiene que ser algo que es bastante estándar.
Dado que soy un completo idiota cuando se trata de Linux, y soy el "administrador del servidor" del desarrollador, solo puedo suponer que es algo idiota lo que estoy haciendo o que he (mal) configurado.
Resumen En pocas palabras, quiero que todos los usuarios que tengan acceso grupal de r / w a un directorio puedan cambiar la marca de tiempo de los archivos en ese directorio a través de SCP.
fuente
root
grupo: elroot
grupo no tiene permisos especiales, solo elroot
usuario los tiene.Respuestas:
Por que no funciona
Cuando intenta cambiar el tiempo de modificación de un archivo con
touch
, o más generalmente con la llamada del sistema subyacenteutime
, hay dos casos.Por qué esto normalmente no importa
--omit-dir-times
(-O
).Soluciones
Ok, detente ahí. El hecho de que haya un único desarrollador no significa que no deba usar SCM. Deberías estar usando SCM. Haga que el desarrollador registre un archivo y bríndele una forma de presionar un botón de "implementación" para verificar los archivos de SCM en el directorio en vivo.
No hay absolutamente ninguna razón técnica por la que no deba usar SCM, pero puede haber una razón humana. Si la persona que trabaja en estos archivos se llama a sí misma "desarrollador", debería estar usando SCM. Pero si se trata de una persona no técnica que introduce documentos, SCM podría ser demasiado complicado. Así que continúa empujando los archivos a través de FTP o SSH. Hay tres formas en que esto puede funcionar.
rsync
tiene una opción para no sincronizar tiempos. Scp no lo hace a menos que se lo digas. No conozco WinSCP pero probablemente también pueda.apache
usuario, el enfoque habitual sería permitir el acceso SSH del usuario comoapache
. El enfoque fácil es hacer que el usuario cree una clave privada SSH y agregue la clave pública correspondiente~apache/.ssh/authorized_keys
. Esto significa que el usuario podrá ejecutar comandos arbitrarios como elapache
usuario. Como de todas formas está de acuerdo en otorgarle al usuario derechos de sudo, no importa en su caso. Es posible, pero no tan fácil, poner más restricciones (necesita una entrada de base de datos de usuario separada con un nombre diferente, la misma ID de usuario, un shell restringido y una cárcel chroot; detalles en una pregunta separada, aunque esto ya puede estar cubierto en este sitio o en la falla del servidor ).¹ O, para un archivo vacío, escriba un byte y luego trunque.
² Salvo complicaciones adicionales, pero ninguna que yo sepa se aplica aquí.
fuente
apache
, entonces podrían establecer tiempos. Vea mi respuesta revisada para la solución correcta y un par de subóptimas.Puede configurar rsync para usar sudo en el extremo remoto de esta manera:
fuente
sudo rsync
es muy difícil de restringir. Solo lo sugerí porque el OP dijo que el usuario ya tenía acceso a sudo.