# [RISOLTO] aMule & permessi

## Shocker580

Salve,

la domanda potrà sembrare un pò stupida ma per motivi di praticità vorrei poter accedere e scriverei download di aMule anche da utenti appartenenti allo stesso gruppo e non solo dall'utente p2p.

E' quindi possibile costringere aMuled a far scrivere i file con permssi differenti ?

Grazie  :Smile: Last edited by Shocker580 on Wed Feb 16, 2011 7:21 pm; edited 1 time in total

----------

## djinnZ

 *Shocker580 wrote:*   

> vorrei poter accedere e scriverei download di aMule anche da utenti appartenenti allo stesso gruppo e non solo dall'utente p2p

 giuro che non riesco a capire. Sarà l'età... *Shocker580 wrote:*   

> E' quindi possibile costringere aMuled a far scrivere i file con permssi differenti ?

 Questa è un poco più comprensibile, scrutando nella mia sfera di cristallo mi par di scorgere qualcosa. Probabile che non abbia funzionato, visto che il nipotino pestifero me la ha schiantata in terra ancora una volta, ma facciamo comunque un tentativo:

Tieni conto che poichè amule non è il massimo per la sicurezza gira con una uid dedicata (veramente c'è chi suggerisce di sbatterlo in chroot, blidato, ma sono il primo a non curarmene più di tanto e si pongono altri problemi per l'esecuzione) e non è una buona cosa che gli utenti normali (o peggio i wheel) possano eseguire impunemente i file scaricati. Pertanto uomo avvisato... mezzo ammazzato.

Soluzione 1: usi chmod +s o le ACL, un tantino brutale, pone qualche problema se usi selinux (se non ricordo male, non sono troppo affidabile ultimamente) e vale per la singola dir, of course;

Soluzione 2: imposti il misconosciuto e dimenticato umask a qualcosa del genere a=rx,ug+w (caveat emptor: io ho una partizione dedicata montata con nodev,noexec per lo user p2p, per questo me ne frego ed ho messo il comando in /etc/init.d/amuled non ho modificato profile o login.defs);

Soluzione 3: (per accesso via SMB) ti rivolgi a qualcosa del genere 

```
[downloads]

path = /home/p2p

public = yes

writable = yes

force user = p2p

printable = no

create mask = 0770
```

esiste anche modo per impostare separatamente dir e file ma lascio a te il piacere di scoprirlo.

 *uso felice di amule wrote:*   

> 
> 
> ```
> USE="daemon geoip gtk nls remote unicode -debug -stats -upnp" emerge -1N amule
> 
> ...

 

Ti lascio a riflettere sulle implicazioni in termini di sicurezza e praticità di quanto ti ho scritto con il solito avviso che i cocci sono tuoi e te li tieni.

E che sono in vena di scherzare (fare l'imbecille) quindi non leggere come un rimbrotto nulla di quanto sopra (al massimo come un non troppo velato RTFM od a cercare precedenti discussioni sull'argomento permessi in quanto, per l'innata pigrizia, s'indulge troppo a non voler ripetere le stesse cose).

Infine ti lascio un sibillino rinvio al "Mago" di John Fowles (cercansi copia online, in italiano, dei suoi scritti, in particolare dei primi due e dell'adattamento cinematografico)...  :Twisted Evil: 

----------

## Shocker580

Inizio col dire che il mio linguaggio poco umano a volte deriva dalla tastiera wireless che uso che tende a saltare con piacere i tasti che digito come nell'esempio soprastante "scriverei download" = scrivere_i_download".

Concordando sull'idea che effettivamente è pericoloso l'uso di aMule e con l'idea che più avanti potrei fare anch'io un chroot ora vorrei analizzare o meglio riuscire a capire le tue soluzioni.

1. chmod +s a cosa porta ? +s non serve per l'userid ?

2. Mi sembra un'ottima idea ma dove posso impostarlo per l'utente p2p ? In oltre, nodev a cosa serve in fstab ?

3. L'idea di SMB è ottima e infatti è già così configurata per quella directory ma chiaramente i file già scritti da p2p non saranno modificabili.

Quello che non capisco è il tuo "uso felice di amule", a cosa portano quei comandi ?

Grazie  :Smile: 

----------

## djinnZ

meno male che l'avevo sottolineato che ero in vena di fare il cretino...

1: chmod g+s ,prova ad impostarlo per una directory, aggiungi gli utenti che ti interssano a p2p e vedrai cosa succede quando creano un file. Alle volte fa bene fare qualche tentativo.

Per le acl cerca che sono pigro.

2: nodev e noexec bloccano l'uso dei device o l'esecuzione dei file indipendentemente dagli attributi scritti sul disco. Se hai una partizione seprata prova, come sopra.

umask non lo imposti per l'utente p2p (in questo caso lo si mette in .profile od in .bashrc, può andar bene per un utente "normale") o globalmente (e ti ho detto quali sono i file) ma lo imposti per amule inserendo il comando nello shell script /etc/init.d/amuled prima della chiamata ad amuled. Più semplice di così...

3: force user fa si che chi accede tramite smb acceda come utente p2p e create mask fa si che siano creati i file con attributo 0770 leggibili, scrivibili ed eseguibili al proprietario ed al gruppo. Mi pare sin troppo chiaro. Se poi vuoi che ti indichi i comandi per sistemare i file già presenti... ti rispondo sul serio che è il caso di leggerti il fottuto manuale ed usare la tastiera.

Forse ho dimenticato di dirti che le soluzioni non sono alternative ma complementari, mea culpa.

Il chroot non risolve molto, ero sarcastico, dovresti avere doppi eseguibili e ti poni ulteriori problemi (noexec te lo scordi), usa hardening gcc+pax piuttosto (a quel punto puoi anche usare grsec per l'hardening del chroot, a queste condizioni forse serve a qualcosa).

Quei comandi ti servono per configurare amule (od anche il torrent od installare jdownloader p2p lo puoi uare anche per altri programmi) per scegliere l'interfaccia web, scegliere /bin/false per preview o browser, il nick, se vuoi la preallocazione dei file, per disabilitare/abilitare le statistiche, abilitare l'utente da remoto con diritti limitati, impostare una password (in amule, è preferibile averle tutte e due) o persino far avviare amuleweb in automatico (senza dover usare lo script in init.d, deprecabile pratica invece, comunque è meglio utilizzare amulegui) etc. ond anche balmente per bilitare una shell ed utilizzare i comandi nell'utente p2p.

In generale sarebbe bene lanciare sempre e comunque usermod -L -s /sbin/nologin p2p, non si sa mai.

Ed il primo è per le use consigliate. Mi sembra facile.

Documentati sui comandi che ti ho suggerito (non posso spiegarti uno per uno cosa fanno, già mi sfottono per la logorrea nelle risposte) e fai qualche prova. Poi chiedi ulteriori lumi o dubbi.

O vai in chat e chiedi di darti una mano se proprio credi che ti serva qualcuno che ti guidi passo passo.

Non sono incavolato (lo ripeto perchè sto solo cercando di portarti nella giusta mentalità. Linux non è windows devi avere mente più aperta) ma sentirmi chiedere a cosa serve lo sticky bit è sconfortante. Vuol dire, tra l'altro, che non hai un'idea della gestione dei permessi. Se vuoi rendere più sicuro il sistema si parte da questo e quando ti viene suggerito qualcosa si verifica sempre, metti caso che  abbia sbagliato a scrivere (e capita, capita)...

----------

## Shocker580

Finalmente ho tutto chiaro (per il SMB l'avevo fin da prima che rispiegassi, forse non mi sono espresso bene).

L'unica cosa che non mi riesce è proprio nel settare l'umask 002 nello script amuled, dove va messo ? Perché se lo incorporo prima della riga

```
env HOME="${AMULEHOME}" start-stop-daemon --start \
```

viene ignorato

Se dentro: 

```
env HOME="${AMULEHOME}" umask 002 && start-stop-daemon --start \
```

 mi restituisce un

```
env: umask: No such file or directory
```

Quindi dove lo posso dare?

----------

## djinnZ

proviamo l'alternativa (te la volevo risparmiare, ma a quanto pare questi rompiglioni di devel insistono nel voler sisemare sempre tutto a puntino, mi sa che appena finisco di importarmi le conf del vecchio server gli fischieranno eccome le orecchie): prova 

```
umask 002
```

la soluzione più sofisticata sarebbe 

```
session optional pam_umask.so umask=022
```

```
chfn -o "umask=002 p2p"
```

in realtà sono un tantino in dubbio sul file in pam.d, direi di evitare di metterlo in system-auth (per usarlo su ogni utente, quindi dovresti commentare la riga UMASK in login.defs e umask xxx in profile ed in bashrc) come troveresti in rete ma fai qualche prova (non mi sono ancora applicato a come hanno sistemato pam.d).

----------

## Shocker580

La prima soluzione non funziona con aMuled ne tanto meno con la shell

```
p2p@linux ~ $ umask

0022

p2p@linux ~ $ cat .profile 

umask 002

p2p@linux ~ $ 
```

(chiaramente ho sloggato e riloggato)

Per quanto riguarda la situazione più sofisticata, perché se imposto l'umask nel pam poi devo disabilitarlo da tutte le altre parti ? Non farei quindi prima a impostarlo in login.defs ? Inoltre con questa modifica mi ritroverei ad avere ogni utente con un umask più libero del dovuto..

----------

## djinnZ

strano, controlla proprietario e permessi. bada che .profile vale per login shell altrimenti devi usare .bashrc (anche con un hard link)

umask 022 vuol dire che i file creati saranno rw-r--r-- e le dir rwxr-xr-x mentre 002 corrisponde a rw-rw-r-- e rwxrwxr-x. Spero che questo ti sia chiaro e che un sistema con umask impostato a 002 non è sicuro, tutti i demoni andrebbero in esecuzione con queste impostazioni, non solo gli utenti.

Il consiglio di toglierlo da login.defs, nel caso decidi di usare pam_umask globalmente (in system-auth), è per evitare sovrapposizioni (in teoria dovrebbe agire nell'ordine pam e poi login.defs, ma questo è da verificare, al momento non ho tempo da dedicare a queste cose) per quanto riguarda bashrc e profile dovrebbero reimpostare umask all'avvio di ogni shell di login quindi certamente dopo che ha provveduto pam.

A questo punto con chfn andresti a gestire l'umask da passwd per ogni singolo utente mentre globalmente è impostato direttamente da pam.

Un tentativo per vedere se funziona solo per i demoni lo farei comunque.

----------

## Shocker580

Considerando che ho una partizione apposita, a questo punto, anch'io montata con noexec e no dev e che voglio un umask 002 solo per l'utente p2p non riesco a capire quale possa essere il rischio  :Confused: 

Tornando al discorso, con .bashrc nella shell ottengo l'umask desiderato ma amuled scrive sempre coi propri diritti. Vorrei proprio evitare di usare un'impostazione globale per non andare a modificare troppo il sistema. Ed anche con chfn -o "umask=0002 p2p" continuo a non ottenere nulla..

Non so dove sbattere la testa, se hai qualche idea  :Smile:  Tanto meglio...

----------

## Shocker580

Un UP per una soluzione   :Laughing: 

----------

## zolar czakl

Amule dovrebbe avere una voce per i permessi.

Amuled non legge lo stesso file di configurazione?

E' parecchio che non lo uso  :Embarassed: .

----------

## djinnZ

@zolar_czacl : amule (a sentire Shocker580) sembra che non ha più la gestione permessi è qui il problema.

Mi pare che comunque bastava mettere delle direttive PermissionFiles/Dirs con i valori in decimale e non in ottale in amule.conf ma sto andando a memoria.

@Shocker580: Ti ripeto che era un tentativo quello di provare a non disabilitare in login.defs e non mettere pam_umask in system_auth etc. O usi pam_umask o login.defs

Altrimenti ci sono le acl per convincere gli utenti linux a scrivere con i giusti permessi.

http://a2.pluto.it/a2227.htm

http://wiki.kaspersandberg.com/doku.php?id=howtos:acl

un poco datate ma dovrebbero andar bene.

e le vecchie discussioni sull'argomento permessi

https://forums.gentoo.org/viewtopic-t-734990-highlight-permessi.html

https://forums.gentoo.org/viewtopic-t-560691-highlight-permessi.html

https://forums.gentoo.org/viewtopic-t-560420-highlight-permessi.html

per capirci...

----------

## Shocker580

Intanto ti ringrazio per il tentativo!

aMuled come hai detto tu usa lo stesso file amule.conf di aMule normale ma nella configurazione a riga di comando non sono riuscito a trovare quello che dicevi, così ho aperto direttamente la versione con GUI ed il risultato nella sezione Sicurezza è questo:

http://img823.imageshack.us/img823/3407/schermatapreferenze.png  :Laughing: 

----------

## Shocker580

djinnZ come ho tempo faccio qualche tentativo e aggiorno qui. Grazie

----------

## Shocker580

Ammetto che sto per impazzire  :Laughing: 

Dopo un "lungo" studio delle ACL POSIX sono arrivato alla conclusione che il comando che fa al caso mio è questo:

setfacl -m  default:group::rwx Incoming

così da ottenere:

```
# file: Incoming

# owner: p2p

# group: p2p

user::rwx

group::rwx

other::r-x

default:user::rwx

default:group::rwx

default:other::r-x
```

ed effettivamente se con l'utente p2p scrivo un file ottengo:

```
p2p@linux /mnt/download/aMule/Incoming $ touch a

p2p@linux /mnt/download/aMule/Incoming $ getfacl a

# file: a

# owner: p2p

# group: p2p

user::rw-

group::rw-

other::r--

p2p@linux /mnt/download/aMule/Incoming $ 
```

Perfetto no??

NO!

aMule continua a scrivermi tutto così:

```
p2p@linux /mnt/download/aMule/Incoming $ ls -l

totale 964596

-rw-r--r-- 1 p2p p2p       830 16 feb 11.23 "file aMule"

-rw-rw-r-- 1 p2p p2p         0 16 feb 12.25 a

p2p@linux /mnt/download/aMule/Incoming $ 
```

Possibile che aMule fa ancora come gli pare??

Devo riavviare il demone ? Il sistema ? Mah!  :Shocked: 

HELP!

----------

## djinnZ

tagliamo la testa al toro, te lo espongo per comandi e configurazioni (capisci cosa vuol dire ogni comando, ovviamente, non mi assumo responsabilità):

```
[eMule]

...

IncomingDir=/home/p2p/downloaded

TempDir=/home/p2p/aMuleTemp

...

PermissionsFiles=438

PermissionsDirs=510

...

```

```
[downloaded]

path = /home/p2p/downloaded

public = yes

writable = yes

force user = p2p

printable = no

create mask = 0660

directory mode = 0770

force directory mode = 0770

force group = p2p

[downloads]

path = /home/p2p/aMuleTemp

public = yes

writable = yes

force user = p2p

printable = no

create mask = 0660

directory mode = 0770

force directory mode = 0770

force group = p2p
```

se vuoi potresti pensare di usare un remount nfs

```
/home/p2p/amule/aMuleTemp (rw,insecure,all_squash,anonuid=???,anongid=???)

/home/p2p/amule/downloaded (rw,insecure,all_squash,anonuid=???,anongid=???)
```

commentati gli umask nei vari profile bashrc e login.defs, aggiungi pam_umask in system.auth, imposti con chfn -o "umask=002 utente" i vari utenti che devono cooperare e ti rivolgi a qualcosa del genere

```
chown -R p2p /home/p2p

chgrp -R p2p /home/p2p

chmod -R u+rw /home/p2p

chmod -R og-rwx /home/p2p

chmod -R a+X /home/p2p

chmod -R a-rwx /home/p2p/downloaded /home/p2p/aMuleTemp

chmod -R ug+rwXs /home/p2p/downloaded /home/p2p/aMuleTemp

setfacl -x /home/p2p/downloaded /home/p2p/aMuleTemp

setfacl -m default:owner::rwx /home/p2p/downloaded /home/p2p/aMuleTemp

setfacl -m default:group::rwx /home/p2p/downloaded /home/p2p/aMuleTemp

setfacl -m default:other::--- /home/p2p/downloaded /home/p2p/aMuleTemp
```

beh se così non vuol saperne non so cosa dirti.

Controlla bene perchè in genere qualche cretinata la metto sempre.

----------

## Shocker580

Ho risolto diversamente.. i diritti ACL vengono applicati solo ai file creati nella cartella quindi non vengono applicati se copiati. Evidentemente aMule da Temp a Incoming fa proprio una copia, quindi alla fine è bastato impostare gli stessi diritti ACL anche in Temp!

Grazie DjinnZ, finalmente posso mettere un RESOLVED  :Smile: 

----------

