Newsgroup: it.comp.os.linux.iniziare
Titolo: sugli utenti

E' possibile (credo che lo sia!) impostare una dir di root per un utente ma
oltre la quale non possa andare.
Per esempio, l'utente test ha la root in /home/test ma voglio "bloccarlo" in
modo che non possa andare in /home.
Come si fa??
Grazie

 Come si fa??
devi usare chroot(1)
ciao
Kronos
-- 
Home: 
http://kronoz.cjb.net
Il dottore mi ha detto di smettere di fare cene intime per quattro.
A meno che non ci siamo altre tre persone.

Ok, mi sapresti dire come fare? Dove si mette questo comando?



Vado a memoria.... mi pare sia chroot.
Meglio se controlli con il man.
-- 
Odio le catene, tutte ma specialmente quelle
legate ai santi. SPAM.... No, grazie, P.L.F.

 Ok, mi sapresti dire come fare? Dove si mette questo comando?
chroot cambia la  dir specificata in modo che diventi  la nuova root. In
ogni  directory utente  devi quindi  inserire  una directory  bin con  i
programmi permessi,  una directory dev  con zero, null e  quant'altro ti
serve. Una volta eseguito il chroot i programmi non potranno piu`
accedere alle altre directoty del disco, ma saranno confinati in
/home/utente. Per la sintassi vedi man chroot.
Un'alternativa (meno  restrittiva) e` l'uso della  "restricted shell" di
bash in pratica se al posto di bash chiami rbash avrai una shell che non
permettera` l'uso  di cd, di  programmi fuori path, redirezioni  e altre
cose (per dettagli man bash).
ciao
Kronos
-- 
Home: 
http://kronoz.cjb.net
La vasca da bagno fu inventata nel 1850, il telefono nel 1875.
Se fossi vissuto nel 1850, avrei potuto restare in vasca per 25 anni
senza sentir squillare il telefono

In effetti avevo provato a leggere il "manuale" ma non è che sia proprio
chiaro :-(
A parte che la sintassi mi rimane un po' ostica, non ho neppure capito da
"dove" devo impostare il comando.
Cmq grazie per il suggerimento.
Michele


 "dove" devo impostare il comando.
In effetti la questione non e` affatto semplice.
La sintassi e`:
chroot /nuova/root /path/comando (il path di comando e` riferito alla
nuova root.
Detto questo  quello che chiedi tu  non e` molto conveniente,  visto che
dovresti replicare  tutte le cose  necessarie in ogni  directory utente.
La cosa piu` pratica (imho) e`  impostare come nuova root /home, in modo
che  gli utenti  condividano le  directory bin,  lib, etc,  e altro. Per
proteggere la  privacy dei vari  utenti basta  fare un chmod  0700 sulle
directory, cosi` ognuno avra` accesso solo alla propria directory.
Nella /home  dovrai creare le  directory bin,  tmp, lib, etc,  dev, proc
(solo se  ti serve). Nella directory  bin metterai tutti  gli eseguibili
che  ti  servono  (almeno  bash,  ls,  cp,  mv,  rm,  in.telnetd). Nella
directory lib dovranno esserci tutte le  librerie di cui hai bisogno (in
genere basta copiare tutta /lib in /home/lib). In etc ci andranno almeno
host.conf, hosts,  group, passwd e  shadow (dagli ultimi  puoi rimuovere
tutte  le voci  che  non sono  strettamente  necessarie, in  particolare
root). Per quanto  riguarda dev  non sono sicuro  di cosa  serva, quindi
copiala tutta e poi togli quello  che non vuoi (es. audio, hdX, ecc). La
tmp la crei vuota (mkdir tmp && chmod 1777 tmp).
A   questo  punto   l'ambiente  jail   dovrebbe  essere   pronto. Adesso
bisogna  istruire  il sistema  su  come  fare  il chroot. Crea  un  file
/home/bin/telnetd.secure che contiene questo:
#!/bin/bash
chroot /home /bin/in.telnetd
quindi modifica la riga di telnet in /etc/inetd.conf:
telnet  stream  tcp  nowait root  /usr/sbin/tcpd /home/bin/telnet.secure
Adesso con telnet dovresti essere in grado di provare il nuovo ambiente.
Almeno in teoria  :) Non ho mai provato un  operazione del genere quindi
e` possibile che abbia dimenticato qualcosa.
Se dovessi avere  problemi di librerie/file mancanti  puoi copiare tutto
/bin in  /home/bin, /lib e  /usr/lib in  /home/lib, /etc in  /home/etc e
rimuovere in seguito quello che non serve.
Fammi come e` andata :)
ciao
Kronos
-- 
Home: 
http://kronoz.cjb.net
Non ho ancora capito se il mio cane e` maschio o femmina:
quando fa la pipi` si chiude in bagno

Anzitutto grazie per la disponibilità.
Detto questo, in effetti, la seconda soluzione che mi prospetti è senz'altro
più comoda, solo che (forse sbaglio io) vedo che il nuovo utente riesce cmq
a risalire, per esempio in /home, dalla sua root /home/utente
A me basterebbe limitarlo esclusvamente nella sua root.
Ciao e grazie ancora!


 A me basterebbe limitarlo esclusvamente nella sua root.
La soluzione che ti ho esposto imposta come nuova root /home, permettendo
quindi agli utenti di entrarci. Se vuoi limitarli ulteriormente devi
replicare in ogni directory utente le dir etc, tmp, bin, lib, proc (come
da post precedente) ed impostare come shell di login uno script che
prima esegue il chroot e poi esegue la shell:
#!/bin/bash
chroot $HOME
/bin/bash
Lo script deve essere suidato, altrimenti non funziona.
Cmq considera l'uso di rbash.
ciao 
Kronos
-- 
Home: 
http://kronoz.cjb.net
"I've seen things you people wouldn't believe...
 Attack Ships on fire off the shores of Orion.
 I've watched C-beams glitter in the dark off of Tanhauser Gate.
 All those moments will be lost in time...like tears, in rain.
 Time to die." -- Roy Batty (played by Rutger Hauer)

 Lo script deve essere suidato, altrimenti non funziona.
Scusa, non funziona e basta :)
Gli script non posso essere suidati, ti serve un programma, usa questo
(shell.c):
#include <unistd.h>
#include <stdlib.h>
int main (int argc, char **argv) {
	char *home;
 
	home = getenv("HOME");
	chroot(home);
 
	seteuid(getuid());
	execl("/bin/bash","bash","--login",NULL);
	return 0;
}
 
Compila con gcc -Wall -O2 -oshell.chroot shell.c
Il file (shell.chroot) deve essere suidato (chmod +s shell.chroot) per
funzionare. Non dovrebbe comportare problemi di sicurezza, visto che
abbandona i privilegi di root subito dopo il chroot.
Non serve una copia del file per utente, ne basta una in /sbin.
Bash e tutti gli altri binari vanno invece duplicati.
ciao
Kronos
-- 
Home: 
http://kronoz.cjb.net
You and me baby ain't nothin' but mammals
So let's do it like they do on the Discovery Channel

Ok, ti ringrazio molto, sei stato davvero gentile!
Ciao
Michele