Tiene dos formas complementarias de implementar esto:
Conceder a los usuarios permisos para usar gitrepositorios de forma remota
Úselo gitolite3para proporcionar un esquema de repositorios de hub-live (esto se describe en detalle aquí ), que básicamente requiere que tenga un barerepositorio (un repositorio de concentrador ) para permitir a sus usuarios empujar / extraer y una versión extraída del mismo repositorio (un repositorio en vivo ) ubicado en la ruta adecuada /srv/www/html, por ejemplo, por ejemplo.
Me gusta usar gitolite3para manejar el repositorio del concentrador , pero eso no es un requisito, aunque es bastante conveniente tener un control de acceso específico vinculado a su LDAP de elección si es necesario. gitolite3puede proporcionar control de grano fino hasta el nivel de sucursal.
También es una buena práctica limitar las capacidades del gitolite3usuario a través de sudo, y manejar los ganchos por medio de sudollamadas. Este es un ejemplo de trabajo que utiliza gitolite3ganchos (siéntase libre de adaptarlos, o mejorarlos / arreglarlos) para satisfacer sus necesidades:
El contenido relevante de /etc/sudoerso /etc/sudoers.d/gitolite3sería algo similar a:
Cmnd_Alias GITOLITE_CMDS = /usr/bin/git, /bin/chown, /bin/find, /usr/bin/xargs, /bin/chmod, /sbin/restorecon, /usr/local/sbin/publisher-hub2live
Cmnd_Alias GITOLITE_APACHE_CMDS = /usr/sbin/apachectl graceful
Defaults:gitolite3 !requiretty
Defaults:gitolite3 lecture=never
gitolite3 ALL = (root)NOPASSWD: GITOLITE_CMDS
gitolite3 APACHE_HOSTS = (root)NOPASSWD: GITOLITE_APACHE_CMDS
post-updategancho de repositorio de cubo :
#!/bin/sh
echo "****"
echo "**** Calling publisher-hub2live script [Hub's post-update hook]"
echo "****"
sudo /usr/local/sbin/publisher-hub2live "/srv/www/html" "root:apache" "2750" "640"
exit 0
publisher-hub2live guión:
#!/bin/sh
echo "****"
echo "**** Pulling changes into Live [publisher-hub2live]"
echo "****"
cd "$1" || exit
umask 0022
unset GIT_DIR
/usr/bin/git pull hub master
# custom actions here
# e.g call grunt tasks
/bin/chown -R "$2" "$1"
/bin/find "$1" -type d -exec chmod "$3" {} +
/bin/find "$1" -type f -exec chmod "$4" {} +
/bin/chmod u+x "$1"/.git/hooks/post-commit
/sbin/restorecon -R -v "$1"
exec /usr/bin/git update-server-info
exit 0
Limitar la capacidad de ejecutar comandos no autorizados en un shell de inicio de sesión
Lo que necesitaría implementar es un método reproducible y auditable para limitar la capacidad del usuario para realizar acciones distintas a las estrictamente permitidas.
No es obligatorio, pero ayuda si tiene sus usuarios registrados en LDAP, y ya ha implementado los mecanismos para realizar la autenticación LDAP, ya sea mediante un módulo PAM, o usando freeIPA y sssd.
Para implementar este escenario, lo que hago actualmente es lo siguiente (tenga en cuenta que este tipo de restricciones requiere que se cumplan varias condiciones; de lo contrario, la restricción se puede eludir fácilmente):
- Los usuarios no pertenecen al
wheelgrupo, el único autorizado para usar su(impuesto a través de PAM). Por lo general, sysadmexiste un usuario que no es LDAP ( ) para permitir que administradores confiables realicen acciones en casos de recuperación ante desastres o indisponibilidad de LDAP.
Los usuarios reciben una seguridad adecuada rbashcon una RUTA de solo lectura que apunta a un privado ~/bin, este ~/bin/directorio contiene enlaces a todos los comandos permitidos, por ejemplo:
$ ll ~/bin
total 0
lrwxrwxrwx. 1 root dawud 14 Sep 17 08:58 clear -> /usr/bin/clear*
lrwxrwxrwx. 1 root dawud 7 Sep 17 08:58 df -> /bin/df*
lrwxrwxrwx. 1 root dawud 10 Sep 17 08:58 egrep -> /bin/egrep*
lrwxrwxrwx. 1 root dawud 8 Sep 17 08:58 env -> /bin/env*
lrwxrwxrwx. 1 root dawud 10 Sep 17 08:58 fgrep -> /bin/fgrep*
lrwxrwxrwx. 1 root dawud 14 Sep 17 08:58 git -> /usr/bin/git*
lrwxrwxrwx. 1 root dawud 9 Sep 17 08:58 grep -> /bin/grep*
lrwxrwxrwx. 1 root dawud 10 Sep 17 08:58 rview -> /bin/rview*
lrwxrwxrwx. 1 root dawud 13 Sep 17 08:58 sudo -> /usr/bin/sudo*
lrwxrwxrwx. 1 root dawud 17 Sep 17 08:58 sudoedit -> /usr/bin/sudoedit*
lrwxrwxrwx. 1 root dawud 13 Sep 17 08:58 tail -> /usr/bin/tail*
lrwxrwxrwx. 1 root dawud 11 Sep 17 08:58 wc -> /usr/bin/wc*
los usuarios se les da una, de sólo lectura entorno restringido (piensa en cosas por el estilo LESSSECURE, TMOUT, HISTFILElas variables). Esto es para evitar shellescapes de comandos como lessy garantizar la auditabilidad.
El único editor permitido es rvim, por la misma razón. Los usuarios solo pueden ejecutar sudoedit, que están configurados para ejecutarse rvimen la sudoconfiguración:
Defaults editor=/usr/bin/rvim
Si existen restricciones MAC (la distribución GNU / Linux específica que está utilizando tiene SELinux habilitado), los usuarios se asignan al usuario SELinux staff_uy se les otorgan derechos para ejecutar comandos como otro usuario según sea necesario sudo. La sudorulesnecesidad específica debe revisarse cuidadosamente para evitar que el usuario eluda estas limitaciones, y también puede implementarse en su infraestructura LDAP existente (esta es una de las características de freeIPA).
los usuarios /home, /tmpy posiblemente /var/tmpson poliinstantiados a través de /etc/security/namespace.conf:
/tmp /tmp/.inst/tmp.inst-$USER- tmpdir:create root
/var/tmp /tmp/.inst/var-tmp.inst-$USER- tmpdir:create root
$HOME $HOME/$USER.inst/ tmpdir:create root
Polyinstantiation de directorios no es una característica nueva, ha estado disponible durante bastante tiempo. Como referencia, vea este artículo de 2006 . De hecho, muchos módulos ya se usan pam_namespacede manera predeterminada, pero la configuración predeterminada en /etc/security/namespace.confno habilita la poliinstanciación. Además, /etc/security/namespace.initdebe hacer que todos los archivos esqueléticos sean de solo lectura para los usuarios y que sean propiedad de ellos root.
De esta manera, puede elegir si los usuarios pueden ejecutar cualquier comando en su propio nombre (a través de un enlace en el ~/bindirectorio privado , provisto a través de /etc/skel, como se explicó anteriormente), en nombre de otro usuario (a través de sudo) o ninguno.