Progetto

Generale

Profilo

Accesso a repository APT privato con SSH » Cronologia » Versione 2

Versione 1 (Simone Piccardi, 17-03-2021 16:27) → Versione 2/9 (Simone Piccardi, 18-03-2021 16:19)

h1. Accesso a repository APT privato con SSH 

 Esistono casi in cui può essere necessario fornire accesso a terzi ad un repository APT privato, ad esempio per fare utilizzare pacchetti sperimentali che non devono essere distribuiti pubblicamente.  

 In tal caso però restringere gli accessi ad un repository APT per con l'usuale scaricamento dei pacchetti via HTTP comporta il problema di come autenticare gli utenti, con l'ulteriore problema di dover passare all'uso di HTTPs per evitare di trasmettere le credenziali di accesso in chiaro.  

 Per risolvere il problema in maniera più pulita si può sfruttare una funzionalità poco nota di APT: APT, che supporta la distribuzione dei pacchetti via SSH.  

 Il vantaggio dell'uso di SSH come metodo di scaricamento è che è possibile fare utilizzare ai client una autenticazione a chiavi, evitando la necessità di creare e gestire utenze e credenziali di autenticazione sul server.  

 Per evitare però di fornire ai client un accesso utente SSH, utilizzando in shell sul server occorrerà configurare il servizio in modo che l'utente prescelto sia utilizzabile soltanto per eseguire il download dei pacchetti tramite APT.  

 h2. La configurazione di un utente dedicato in una chroot 

 Per    realizzare questo requisito predisporremo un utente dedicato al servizio, @readrepo@ operante all'interno di un chroot in cui verrà installato esclusivamente lo stretto necessario.   
 Il primo passo è creare l'utente con: 

 <pre> 
 useradd -m readrepo 
 </pre> 

 e non si deve impostare una password,perché l'accesso sarà possibile soltanto tramite autenticazione a chiavi. 

 Il passo successivo è la preparazione di    @/home/readrepo/@ come gabbia chroot, anzitutto occorre rendere la directory di proprietà di @root@ e non dell'utente stesso, con: 

 <pre> 
 chown -R root.root /home/readrepo/ 
 </pre> 

 si dovranno poi creare le sottodirectory necessarie ai programmi da installare nel chroot con: 

 <pre> 
 mkdir /home/readrepo/{debian,dev,lib,lib64,bin,lib/x86_64-linux-gnu} 
 </pre> 

 ed i file di dispositivo con: 

 <pre> 
 mknod -m 666 /home/readrepo/dev/null c 1 3 
 mknod -m 666/home/readrepo/dev/tty c 5 0 
 mknod -m 666 /home/readrepo/dev/zero c 1 5 
 mknod -m 666 /home/readrepo/dev/random c 1 8 
 </pre> 

 Infine si dovranno copiare i binari e le librerie di sistema dei programmi usati da APT: questi sono @sh@, @bash@, @dd@ e @find@, che andranno copiati sotto @/home/readrepo/bin@. Le rispettive librerie possono essere trovate, per ciascuno di essi, con qualcosa del tipo: 

 <pre> 
 root@archive:~# ldd $(which bash) 
	 linux-vdso.so.1 (0x00007fff497e5000) 
	 libtinfo.so.6 => /lib/x86_64-linux-gnu/libtinfo.so.6 (0x00007f7291b3b000) 
	 libdl.so.2 => /lib/x86_64-linux-gnu/libdl.so.2 (0x00007f7291b36000) 
	 libc.so.6 => /lib/x86_64-linux-gnu/libc.so.6 (0x00007f7291975000) 
	 /lib64/ld-linux-x86-64.so.2 (0x00007f7291c9c000) 
 </pre> 

 e per ciascuno si dovranno copiare le librerie mostrate dal comando (non @linux-vdso.so.1@) nelle corrispondenti directory sotto @/home/readrepo@.  

 Infine di dovrà creare la directory @.ssh@ ed il file @.ssh/authorized_keys@ con permessi adeguati per dare accesso all'utente, questo si può fare con: 

 <pre> 
 mkdir -m 750 /home/readrepo/.ssh 
 touch /home/readrepo/.ssh/authorized_keys 
 chmod    640 /home/readrepo/.ssh/authorized_keys 
 chgrp -R readrepo /home/readrepo/.ssh 
 </pre> 

 le chiavi autorizzate all'uso dell'utente dovranno poi essere aggiunte manualmente (dall'amministratore) al file @.ssh/authorized_keys@ 

 Tutta questa procedura può essere automatizzata usando lo script allegato che prende come argomento lo script @sshaptchroot.sh@ allegato alla pagina, che prende come argomento l'utente da creare ed effettua tutte le operazioni precedentemente descritte in maniera automatica (in particolare le copie delle librerie necessarie). 


 a questo punto si potrà limitare l'utente all'accesso ad una chroot in @/home/readrepo/@ sfruttando la direttiva @ChrootDirectory@ di @/etc/ssh/sshd_config@, si dovrà pertanto aggiungere (in coda al file, a causa dell'uso della direttiva @Match@ per selezionare l'utente): 

 <pre> 
 #Added for chroot test 
 Match User readrepo 
 ChrootDirectory /home/readrepo 
 </pre> 

 a questo punto sarà necessario creare all'interno di    @/home/readrepo/@ quanto necessario al'uso  


 h2. Configurazione delle sorgenti sul client 

 In tal caso si dovrà utilizzare all'interno di @sources.list@ una indicazione dell'uso del repository con una riga del tipo:  

 <pre> 
 deb ssh://readrepo@archive.truelite.it:/debian buster-truelite main 
 </pre> 

 occorrerà inoltre abilitare la funzionalità di accesso ai repository via SSH aggiungendo in a    @/etc/apt/apt.conf.d/99localssh@ un contenuto del tipo: 

 @/etc/apt/apt.conf.d/99localssh@: 
 <pre> 
 Dir::Bin::Methods::ssh "ssh"; 
 </pre> 

 h2.  
 da finirie