ACL cartella modificate da codice PHP (risolto ... quasi!)

Language plugins e scripts (Java, Node.js, Pearl, PHP, Python, Ruby, ?sh)
Rispondi
rossi500
Utente
Utente
Messaggi: 9
Iscritto il: venerdì 20 ottobre 2017, 8:36
Località: Roma

ACL cartella modificate da codice PHP (risolto ... quasi!)

Messaggio da rossi500 »

Messaggioda rossi500 » 9 minuti fa
OBIETTIVO: generare da codice PHP nuove cartelle con privilegi attribuiti a gruppo "xyz" precedentemente creato sul NAS
SCENARIO:
- server web su cui si è modificato OpenBaseDir includendo percorso alla cartella condivisa "test" (esterna alla cartella WEB) accessibile agli utenti windows;
- installazione pacchetto Config File Editor per la modifica del file di configurazione ... sudoers.
- modifica del file "sudoers" inserendo nuova riga per permettere al gruppo "%http" di eseguire somandi sudo (nuova riga aggiunta = http ALL=(ALL) NOPASSWD: ALL)

PROCEDURA TENTATA:
- da codice PHP genero correttamente la cartella "prova2" nel percorso condiviso "test" ma, proprietario e gruppo risultano chiaramente quelli che hanno eseguito il comando MKDIR ovvero user=http e gruppo =%http ambedue con id= 1023.
- tentativo fallito di eseguire il comando di modifica gruppo tramite ... "shell_exec("sudo chgrp 65536 /volume1/test/prova2");"...
- fallimento del comando in quanto chgrp può essere lanciato da admin-sudo oppure da utente che appartiene allo stesso gruppo di origine e destinazione cui il comando si riferisce.
- Non si iresce ad inserire l'user "http" all'interno del gruppo "sociosanitario" in quanto l'utente http non è disponibile tra gli utenti presenti nel menu a discesa.
Ultima modifica di rossi500 il giovedì 11 aprile 2019, 18:44, modificato 3 volte in totale.
  • UPS: Power-Walker - vi450 iec
  • GTW: D-Link 2740B ISP: [ADSL] Wind IP:[Public]
  • NAS: DS213 - DSM 6.1.3-15152 Update 8 - MARVELL Kirkwood 88F6282 - Storage Hibrid raid SHR ext4, 2xWD red 1gb; LAN:LAG(1)
  • NAS: DS214+ - DSM 6.1.3-15152 Update 8 - MARVELL Armada XP MV78230
  • NAS: DS115j - DSM 6.1.3-15152 Update 8
  • Router RT-1900ac
  • CLI: assemblato Win Seven 32
Avatar utente
dMajo
Moderatore
Moderatore
Messaggi: 1962
Iscritto il: sabato 18 agosto 2012, 23:14
Località: FVG - Italia

Re: ACL cartella modificate da codice PHP

Messaggio da dMajo »

perche non segui la guida che tu stesso hai citato nell'altro post usando i comandi che syno mette a disposizione per lo scopo?
Dal 01.01.2015 non rispondo a quesiti tecnici dei non osservanti il regolamento https://www.synologyitalia.com/presentazioni/regolamento-leggere-prima-di-postare-t5062.html

  • UPS: APC SMT2200I+AP9631
  • GTW: Vigor2866Vac(4.4.2): 2StaticIP FTTH(1/.1G)+FTTC(30/3M) :o
  • SWC: Netgear GS728TPv2(PoE+)
    • 4x HP NJ2000G
    • 2x Netgear GS108Tv2
    • 2x VigorAP902
  • NAS: DS1819+: DSM6.2.4(u7),32GB; C(2x845DCPro),R5(3xST6000VN001),R0(2xWD60PURX),VB(WD60EFRX);LAN:LAG(1+2),3,4 :D
    • DS1815+: DSM6.2.4(u7),16GB; R5(3xWD60EFRX),VB(2xWD60EFRX);LAN:LAG(1+2),3
    • RS3617xs+: DSM6.2.4(u7),8GB; R6(8xWD40FFWX),HS(WD40FFWX);LAN:LAG(1+2+3),4,LAG(5+6)
    • DS1513+(4GB); DS115j
  • ALTRO: Denon AVR-4311
    • UE55ES8000Q, UE32ES6800Q, UE22F5410AY
    • Galaxy Note8, A5, TabS3; Nokia N8
  • EXP: E5: NET9 PC:W9,M0,L6

www.alldataee.com
rossi500
Utente
Utente
Messaggi: 9
Iscritto il: venerdì 20 ottobre 2017, 8:36
Località: Roma

Re: ACL cartella modificate da codice PHP

Messaggio da rossi500 »

Da quello che il mio scarso inglese ha compreso i comandi "synouser " vanno digitati all'interno di una sessione telnet.
Questa procedura non è a me utile in quanto il codice PHP che sta dietro la mia pagina web si interfaccia con il file system e permette di creare-cancellazione-rinomina di cartelle in modo dinamico direttamente dal form-utente presente in pagina web.
L'esigenza è quindi che l'user "apache" (ovvero html) esegua operazioni sul file system modificando cartelle cui l'utente accede direttamente dall'"esplora risorse" window
Ultima modifica di rossi500 il giovedì 11 aprile 2019, 18:45, modificato 1 volta in totale.
  • UPS: Power-Walker - vi450 iec
  • GTW: D-Link 2740B ISP: [ADSL] Wind IP:[Public]
  • NAS: DS213 - DSM 6.1.3-15152 Update 8 - MARVELL Kirkwood 88F6282 - Storage Hibrid raid SHR ext4, 2xWD red 1gb; LAN:LAG(1)
  • NAS: DS214+ - DSM 6.1.3-15152 Update 8 - MARVELL Armada XP MV78230
  • NAS: DS115j - DSM 6.1.3-15152 Update 8
  • Router RT-1900ac
  • CLI: assemblato Win Seven 32
Avatar utente
dMajo
Moderatore
Moderatore
Messaggi: 1962
Iscritto il: sabato 18 agosto 2012, 23:14
Località: FVG - Italia

Re: ACL cartella modificate da codice PHP

Messaggio da dMajo »

No.
I comandi che ti ho descritto (chmod e ln) vanno si digitati da telnet/ssh (1 volta, provvisoriamente). Poi quando avrai finito l'applicazione web e costruirai un pacchetto spk per distribuirla agli utenti questi comandi dovrai inserirli nello script di post-install o pre-install del pacchetto stesso affinche il NAS li esegua una volta sola durante il setup.

Servono perche poi i comandi synouser (e gli altri) possano essere richiamati da PHP. Per alcuni credo sia più appropriato exec() che shel_exec() che dovrebbe consentirti di catturare l'output in una array per poter poi esser analizzato via PHP


PS: la guida che hai citato credo sia un po' datata, ma il principio rimane valido. Ad esempio nel tempo sono poi state aggiunte altre applicazioni controllate come la note station quindi gli altri valori di "app_privilege" andranno un po' ricercati, sempre in codifica binaria muovendosi verso il MSB (2^n).
Dal 01.01.2015 non rispondo a quesiti tecnici dei non osservanti il regolamento https://www.synologyitalia.com/presentazioni/regolamento-leggere-prima-di-postare-t5062.html

  • UPS: APC SMT2200I+AP9631
  • GTW: Vigor2866Vac(4.4.2): 2StaticIP FTTH(1/.1G)+FTTC(30/3M) :o
  • SWC: Netgear GS728TPv2(PoE+)
    • 4x HP NJ2000G
    • 2x Netgear GS108Tv2
    • 2x VigorAP902
  • NAS: DS1819+: DSM6.2.4(u7),32GB; C(2x845DCPro),R5(3xST6000VN001),R0(2xWD60PURX),VB(WD60EFRX);LAN:LAG(1+2),3,4 :D
    • DS1815+: DSM6.2.4(u7),16GB; R5(3xWD60EFRX),VB(2xWD60EFRX);LAN:LAG(1+2),3
    • RS3617xs+: DSM6.2.4(u7),8GB; R6(8xWD40FFWX),HS(WD40FFWX);LAN:LAG(1+2+3),4,LAG(5+6)
    • DS1513+(4GB); DS115j
  • ALTRO: Denon AVR-4311
    • UE55ES8000Q, UE32ES6800Q, UE22F5410AY
    • Galaxy Note8, A5, TabS3; Nokia N8
  • EXP: E5: NET9 PC:W9,M0,L6

www.alldataee.com
rossi500
Utente
Utente
Messaggi: 9
Iscritto il: venerdì 20 ottobre 2017, 8:36
Località: Roma

Re: ACL cartella modificate da codice PHP

Messaggio da rossi500 »

Troppo diversa la soluzione che proponi da quel che sto cercando; non devo generare un pacchetto da distribuire ma solo ottenere l'assegnazione di privilegi cartella da codice PHP.
--------------------------------------------------------------------------------------------------
Utile per altri utenti posto la soluzione fin qui utilizzata: usare il comando php "RENAME" per spostare e rinominare cartelle in precedenza preparate che abbiano i privilegi conformi alle mie necessità. In altre parole mi creo un "serbatoio" cartelle ca cui attingo via codice php per spostarle in altra posizione del file-system per rinominarle come mi serve.
Per realizzare in "serbatoio" delle cartelle uso un file bach windows che copia una cartella tipo e produce n clonate conservandone i privilegi.
il file x-copy bach windows è il seguente e va lanciato da windows finestra CMD.
------------------------------------------------------------------------------------------------
::creare copie della struttura tipo cartelle del beneficiario attraverso
::l'utilizzo di questo fileBach.
::le copie verranno poi spostate e rinominate nel percorso del beneficiario.
::lo spostamento mantiene invariati i privilegi impostati nell'albero
::directori di cui alla cartella modello

::File bach che per n volte crea copia della struttura directory
::specificata nelle variabili "PercorsoSorgente" "PercorsoDestinazione"
::::::::::::::::::::::::::::::::::::::::::
:: %~dp0% percorso attuale del file bach
::::::::::::::::::::::::::::::::::::::::::
set loopcount=40
:loop
xcopy "%~dp0FacSimile" "%~dp0Modello%loopcount%" /O/X/E/H/K/I
set /a loopcount=loopcount-1
if %loopcount%==0 goto exitloop
goto loop

:exitloop

set INPUT=
set /P INPUT=Digita qualcosa:
--------------------------------------------------------------------------------------------------------------
Ultima modifica di rossi500 il giovedì 11 aprile 2019, 18:45, modificato 1 volta in totale.
  • UPS: Power-Walker - vi450 iec
  • GTW: D-Link 2740B ISP: [ADSL] Wind IP:[Public]
  • NAS: DS213 - DSM 6.1.3-15152 Update 8 - MARVELL Kirkwood 88F6282 - Storage Hibrid raid SHR ext4, 2xWD red 1gb; LAN:LAG(1)
  • NAS: DS214+ - DSM 6.1.3-15152 Update 8 - MARVELL Armada XP MV78230
  • NAS: DS115j - DSM 6.1.3-15152 Update 8
  • Router RT-1900ac
  • CLI: assemblato Win Seven 32
rossi500
Utente
Utente
Messaggi: 9
Iscritto il: venerdì 20 ottobre 2017, 8:36
Località: Roma

Re: ACL cartella modificate da codice PHP

Messaggio da rossi500 »

Mi rispondo da solo.. (dopo giorni di emicrania)
OBIETIVO:
assegnare permessi di lettura/scrittura/none a DIR creata da codice PHP.
SCAENARIO:
Apache HTTP server 2.4
PHP 7.0

AZIONI INTRAPRESE:
-------------------------------------
modifica del file "sudoers" tramite editor "Config File editor" aggiungendo le righe
# Configuro privilegio a gruppo html (apache) e user pippo all'esecuzione di sudo senza password
pippo ALL=(ALL) NOPASSWD: ALL
http ALL=(ALL) NOPASSWD: ALL

modificata la stringa shell_exe che lanciavo da PHP per farla puntare alla directory "/usr/bin/"
non funzionante: shell_exec("sudo chgrp gruppo1 /volume1/prova2/");
funzionante: : shell_exec("sudo /usr/bin/chgrp gruppo1 /volume1/prova2/");

così facendo ottengo di modificare gruppo, proprietario, privilegi della cartella prova2.
--------------------------------------------------------------------------------------------------------------------
esempio di procedura di test per controllo dei comandi sopra definiti (funzionante!)
//creazione cartelle
mkdir('/volume1/xyz/prova1');
mkdir('/volume1/xyz/prova2');
//risultato = drwxrwxrwx+ 2 http http 4096 Oct 22 12:59 prova2 mkdir

//proprietario http
shell_exec("sudo /usr/bin/chown 1023 /volume1/xyz/prova1/");
hell_exec("sudo /usr/bin/chown 1023 /volume1/xyz/prova2/");

//pulizia permessi
shell_exec("sudo /usr/bin/chmod 770 /volume1/xyz/prova1/");
shell_exec("sudo /usr/bin/chmod 770 /volume1/xyz/prova2/");
//risultato = drwxrwx--- 2 1023 1023 4096 Oct 22 12:59 prova2 chmod 770

//attribuzione privilegi gruppo
shell_exec("sudo /usr/bin/chgrp legale /volume1/xyz/prova1/");
shell_exec("sudo /usr/bin/chgrp sociosanitario /volume1/xyz/prova2/");
//risultato = drwxrwx--- 2 1023 sociosanitario 4096 Oct 22 12:59 prova2 chmod 770
---------------------------------------------------------------------------------------------------
procedura definitiva (funzionante) di creazione e assegnazione privilegi cartella da codice php.
Prerequisito è la preparazione di una cartella "modello" con sottocartelle e privilegi ben configurati secondo le proprie esigenze.
ATTENZIONE nell'assegnazione privilegi di attribuire alll'user "http" privilegio di modifica permessi cartella
ATTENZIONE nel ripetere ... synoacltool ... una volta per ogni cartella di cui si desidera modificare i privilegi (altrimenti questi rimangono ereditati)

//copio cartella tipo per avere un duplicato del modello; in questa prima fase i privilegi saranno ereditati per tutte le cartelle
function dir_copy($src, $dst) {
/* Returns false if src doesn't exist */
$dir = opendir($src);
/* Make destination directory. False on failure */
if (!file_exists($dst)) @mkdir($dst);

/* Recursively copy */
while (false !== ($file = readdir($dir))) {

if (( $file != '.' ) && ( $file != '..' )) {
if ( is_dir($src . '/' . $file) ) dir_copy($src . '/' . $file, $dst . '/' . $file);
else copy($src . '/' . $file, $dst . '/' . $file);
}
}
closedir($dir);
}

$src = '/volume1/xyz/System/Cartelle_Tipo/aaaz/';
$dst = '/volume1/xyz/System/Cartelle_Tipo/bersaglio';
dir_copy($src, $dst);
//---------------------------------------------------------------------------------------
//seconda fase: copio permessi da beneficiario > bersaglio eseguendo n volte il comando synoacltool per quante cartelle desidero effettuare la clonazione dei permessi
shell_exec("sudo /usr/syno/bin/synoacltool -copy /volume1/xyz/System/sxs/ /volume1/prova/System/Cartelle_Tipo/bersaglio");
shell_exec("sudo /usr/syno/bin/synoacltool -copy /volume1/xyz/System/sxs/aa/ /prova/System/Cartelle_Tipo/bersaglio/aa/");
shell_exec("sudo /usr/syno/bin/synoacltool -copy /volume1/xyz/System/sxs/bb/ /volume1/prova/System/Cartelle_Tipo/bersaglio/bb/");


DOCUMENTAZIONE:
file-station/synoacltool-enforce-inherit-t9969-10.html
Ultima modifica di rossi500 il martedì 16 aprile 2019, 8:04, modificato 5 volte in totale.
  • UPS: Power-Walker - vi450 iec
  • GTW: D-Link 2740B ISP: [ADSL] Wind IP:[Public]
  • NAS: DS213 - DSM 6.1.3-15152 Update 8 - MARVELL Kirkwood 88F6282 - Storage Hibrid raid SHR ext4, 2xWD red 1gb; LAN:LAG(1)
  • NAS: DS214+ - DSM 6.1.3-15152 Update 8 - MARVELL Armada XP MV78230
  • NAS: DS115j - DSM 6.1.3-15152 Update 8
  • Router RT-1900ac
  • CLI: assemblato Win Seven 32
Avatar utente
dMajo
Moderatore
Moderatore
Messaggi: 1962
Iscritto il: sabato 18 agosto 2012, 23:14
Località: FVG - Italia

Re: ACL cartella modificate da codice PHP

Messaggio da dMajo »

rossi500 ha scritto:Troppo diversa la soluzione che proponi da quel che sto cercando; non devo generare un pacchetto da distribuire ma solo ottenere l'assegnazione di privilegi cartella da codice PHP.
Allora significa che devi eseguire solo una volta quei comandi da telnet/ssh per abilitare l'utilizzo corretto dei sdk/api da PHP.


Assegnare http ai sudoers, inserire percorsi di sistema in openbasedir non fa altro che aprire buchi di sicurezza sul tuo nas. Spero almeno il sito/php che stai facendo non sarà pubblicato in internet e che nessuno gli correli questi tuoi post.
Dal 01.01.2015 non rispondo a quesiti tecnici dei non osservanti il regolamento https://www.synologyitalia.com/presentazioni/regolamento-leggere-prima-di-postare-t5062.html

  • UPS: APC SMT2200I+AP9631
  • GTW: Vigor2866Vac(4.4.2): 2StaticIP FTTH(1/.1G)+FTTC(30/3M) :o
  • SWC: Netgear GS728TPv2(PoE+)
    • 4x HP NJ2000G
    • 2x Netgear GS108Tv2
    • 2x VigorAP902
  • NAS: DS1819+: DSM6.2.4(u7),32GB; C(2x845DCPro),R5(3xST6000VN001),R0(2xWD60PURX),VB(WD60EFRX);LAN:LAG(1+2),3,4 :D
    • DS1815+: DSM6.2.4(u7),16GB; R5(3xWD60EFRX),VB(2xWD60EFRX);LAN:LAG(1+2),3
    • RS3617xs+: DSM6.2.4(u7),8GB; R6(8xWD40FFWX),HS(WD40FFWX);LAN:LAG(1+2+3),4,LAG(5+6)
    • DS1513+(4GB); DS115j
  • ALTRO: Denon AVR-4311
    • UE55ES8000Q, UE32ES6800Q, UE22F5410AY
    • Galaxy Note8, A5, TabS3; Nokia N8
  • EXP: E5: NET9 PC:W9,M0,L6

www.alldataee.com
rossi500
Utente
Utente
Messaggi: 9
Iscritto il: venerdì 20 ottobre 2017, 8:36
Località: Roma

Re: ACL cartella modificate da codice PHP (risolto)

Messaggio da rossi500 »

Corretta la tua osservazione riguardo l'apertura di .. buchi .. di sicurezza inserendo la modifica nel file sudoers.
L'inserimento di ... http ALL=(ALL) NOPASSWD: ALL .. è solo per la fase di debug dell'applicativo, la fase successiva prevede la limitazione del ..NOPASSWORD .. solo ai comandi che necessitano; stesso discorso di limitazione va poi applicato al .. ALL ... riguardo da dove viene eseguito il comando lasciando ..LOCALHOST.
Poichè la modifica del codice HTML della pagina web è limitata all'admin del sito, va da se che l'admin ha anche accesso al sudoers. Accetto il rischio (vista la non criticità dei dati contenuti in db) di attacchi intensivi da parte di .. esperti .. informatici in quanto conoscendo il contesto in cui gira il software ovvero la cultura informatica degli utenti, è molto più facile leggegre la pw di login da sotto la tastiera che non cimentarsi in hackeraggio del NAS

Riguardo il mio piccolo sito, non è un applicativo che gira su internet ed è isolato ad una piccola rete locale ad esclusivo uso degli operatori.
----------------------------------
Hai scritto:
Allora significa che devi eseguire solo una volta quei comandi da telnet/ssh per abilitare l'utilizzo corretto dei sdk/api da PHP
-----------------------------------
Citi una procedura chi io non conosco. Se la citi è evidente che la ritieni migliore e mi fido del tuo giudizio vista la fonte di provenienza. Purtroppo non conoscendola non sono in grado di utilizzarla.
Sa hai tempo e modo di lasciar qui traccia, sarei felice di poter studiare qualcosa su quanto hai suggerito così da .. crescere .. un poco di più. :)
  • UPS: Power-Walker - vi450 iec
  • GTW: D-Link 2740B ISP: [ADSL] Wind IP:[Public]
  • NAS: DS213 - DSM 6.1.3-15152 Update 8 - MARVELL Kirkwood 88F6282 - Storage Hibrid raid SHR ext4, 2xWD red 1gb; LAN:LAG(1)
  • NAS: DS214+ - DSM 6.1.3-15152 Update 8 - MARVELL Armada XP MV78230
  • NAS: DS115j - DSM 6.1.3-15152 Update 8
  • Router RT-1900ac
  • CLI: assemblato Win Seven 32
Rispondi

Torna a “Language plugins e scripts (Java, Node.js, Pearl, PHP, Python, Ruby, ?sh)”