Portál AbcLinuxu, 7. května 2025 20:17
* getfacl PokusAH.txt # file: PokusAH.txt # owner: ... # group: DokumentyFakturyKeSchvaleni user::rw- group::rwx group:DokumentyFakturyKeSchvaleni:rwx mask::rwx other::---Přestože složka, do které byl soubor přesunut, má nastaveno:
* getfacl 2.\ Faktury\ autorizovane # file: 2. Faktury autorizovane # owner: ... # group: DokumentyFakturyAutorizovane # flags: -s- user::rwx group::rwx group:DokumentyFakturyAutorizovane:rwx mask::rwx other::--- default:user::rwx default:group::rwx default:group:DokumentyFakturyAutorizovane:rwx default:mask::rwx default:other::---Pokud by uživatel v té 2. složce soubor vytvořil (nebo ho tam zkopíroval), tak bude mít práva v pořádku:
* getfacl PokusAH.txt # file: PokusAH.txt # owner: ... # group: DokumentyFakturyAutorizovane user::rw- group::rw- group:DokumentyFakturyAutorizovane:rwx group:DokumentyPlnyPristup:rwx mask::rwx other::---Tzn. můj problém spočívá v tom, že při přesunutí souboru se neaplikují defaultní práva nastavená té cílové složce, ale soubor si přístupová práva přinese s sebou z původního umístění. Nevíte prosím někdo o způsobu, jak tohle chování změnit? Cílem je, aby se práva přesunutého souboru nastavila podle cílové složky. Díky, Karel
Řešení dotazu:
mv
nemění práva nebo vlastníka přesouvaného souboru. Není to bug, ale vlastnost - https://bugs.debian.org/cgi-bin/bugreport.cgi?bug=402332#22.
Má to svoji logiku, protože ty nevytváříš nový soubor, ale pouze přesunuješ/přejmenováváš originál.
mv
, ale cp
a pak starý soubor smaže. Že by to bylo ovlivněné SMB klientem? Nebo máš nějaký nestandardní mv
.
Moje samba: Version 4.8.5
---> složka-1 -> podsložka sdilena-uživatel-1(SGID) -> testovací-soubor | -> podsložka sdilena-uživatel-2(SGID) sdilena-složka --- -> podsložka sdilena-uživatel-3(SGID) | ----> složka-2 -> podsložka skupina-1(SGID) -> přesunutý testovací-soubor -> podsložka skupina-2(SGID) -> podsložka skupina-3(SGID)Test přesunu jsem prováděl z Win7.
mv
, tak se ti ty práva také zdědí?
Když dáš příkaz alias
nemáš tam vypsáno mv?
práva by byla OK, ale nejspíš by se zároveň změnilo info o tom, kdo soubor vytvořilNení to protimluv? Práva by přece nebyly OK, když by byl zachován i původní vlastník, který by měl stále právo zápisu.
chown -R vlastnik_slozky:skupina *
v příslušném adresáři. pokud tam nejsou statisíce souborů tak je to rychlé.
# Argumenty: jedna nebo vice slozek # Skript zjisti prava zadane slozky pomoci getfacl. # Tato prava rekurzivne aplikuje na vsechny vnorene soubory a slozky. while [ "$#" != "0" ]; do echo echo $1 sed "s/./-/g" <<< $1 PravaVsechna=`getfacl -p "$1"` PravaDefaultni=`getfacl -p -d "$1"` # aplikujeme defaultni prava rekurzivne na soubory v zadane slozce a vsech vnorenych find "$1" -mindepth 1 -type f -print0 | while read -d $'\0' Polozka; do #echo Soubor: "$Polozka" setfacl --set-file=- "$Polozka" <<< "$PravaDefaultni" done # aplikujeme prava i defaultni prava rekurzivne na slozky v zadane slozce a vsech vnorenych find "$1" -mindepth 1 -type d -print0 | while read -d $'\0' Polozka; do #echo Slozka: "$Polozka" setfacl --set-file=- "$Polozka" <<< "$PravaVsechna" done # prejdeme na dalsi argument shift doneZa náměty na vylepšení předem děkuju
Nabízí se: nechat původníhoPokud to všechno děláš hlavně proto, aby s těmi schválenými fakturami už neoprávnění zaměstnanci nemohli manipulovat (v případě že by se taková faktura dostala třeba do adresáře kde ostatní mají právo čtení), tak pokud nezměníš vlastníka, tak je tvoje snaha k ničemu protože původní vlastník (nějaký pepa z účtárny) bude moci soubor editovat nebo měnit práva.
nastavit podle uživatele, který provádí ten přesun (to neumím a možná to ani nejde...Ve chvíli přesunu by to šlo jednoduše:
chown whoami path/to/file
ale zpětně v cronu už to nezjistíš.
Pokud chceš kopírování práv opravdu jen u příkazu mv a všechno ostatní je OK, tak jestli místo inotify to nepřilepit přímo na to mv, nějak takto:
alias mv='moje_mv.sh'
cat moje_mv.sh
#!/bin/bash mv "$@" result="$?" if [ "$result" -ne 0 ]; then CilovySoubor=<zjistit z $@> if <cesta CílovehoSouboru == cesta sdíleného adresáře Samby>; then chown whoami <CílovySoubor> getfacl -p <RodičovskýAdresář CilovehoSouboru> setfacl --set-file=- <CílovySoubor> fi fi
PravaVsechna=`getfacl -p <RodičovskýAdresář CilovehoSouboru>` setfacl --set-file=- <CilovySoubor> <<< "$PravaVsechna"Takže snad je pochopitelné co tim chtěl básník říct
if [ "$result" -ne 0 ]; then
má být if [ "$result" -eq 0 ]; then
. Důkaz, že jsem unavený, good night.
Podle mě pak taky musí narazit na to, že šéf přesune nějaký dokument od sebe do jiné složky, kam mají mít přístup i zaměstnanci - a jak teda potom řeší práva? Nevěřím, že by ručně cosi upravoval.V tomto případě by tvoje řešení s děděním práv mělo: výhodu: je to rychlé, nic se musí ručně upravovat, nevýhodu: jakýkoliv zaměstnanec s právy k dané složce by ten "šéfův" soubor mohl upravit. Kdybys to takto tomu šéfovi vysvětlil, tak by z té výhodu už tak nadšený nebyl. Rychlé a jednoduché řešení nebývá vždy to správné.
Já věřím tomu, že pro stávající fungování jsou nějaké důvody, jenže bohužel požadavek uživatelů je, aby to fungovalo jinak - mně osobně jejich přání připadá logičtější než to stávající fungování, ale chápu, že oba přístupy mají svoji logiku. Mimochodem, pokud se dělá přesun mezi filesystémy, tak mv dokonce vyvine nějaké úsilí navíc, aby tam dostal ta původní práva - kdyby tak byl nějaký globální příznak, kterým by se mu dalo říct, aby se na to vykašlal :) Docela by mě zajímalo, jestli tady někdo má Sambu v ostrém provozu. Podle mě pak taky musí narazit na to, že šéf přesune nějaký dokument od sebe do jiné složky, kam mají mít přístup i zaměstnanci - a jak teda potom řeší práva? Nevěřím, že by ručně cosi upravoval.Já nevim. V mém případě prostě šéf přesune soubor na svou sdílenou složku a ostatní uživatelé do tohoto souboru mohou zapisovat. Proč ti to nefunguje a mě ano, nevim.
Proč ti to nefunguje a mě ano, nevim.Myslel jsem, že už to víš. Jak jsi o pár řádků níže napsal, tak složka1 a složka2 jsou na jiném (virtuálním) disku a to je důvod proč se ti soubor kopíruje (nepřesunuje) a žádné "úsilí navíc" se u tebe neprovádí. U mě "úsilí navíc" také žádné neprobíhá, nevím co tím bylo myšleno.
Vlastně by asi stačilo, když by každá ta složka byla samostatně namountovaná?Adresář můžeš namountovat příkazem
mount --bind
, ale pokud budou adresáře na stejném filesystému, tak ti to moc nepomůže - mv se bude chovat stejně. Můžeš použít "loopback device" nebo lvm, ale nemyslím, že to je jednodušší než cron/script. Navíc kdyby si chtěli vytvořit 16. adresář, tak bys musel přiběhnout a mountovat ho.
By default, an object inherits permissions from its parent object, either at the time of creation or when it is copied or moved to its parent folder. The only exception to this rule occurs when you move an object to a different folder on the same volume. In this case, the original permissions are retained.Takže jestli jsem ještě nezapomněl anglicky, tak by se to na Win mělo chovat stejně jako na linuxu, tzn. při přesunu jsou práva ponechána.
tato jednoduchá úvaha není plně v sambě implementována.Nejde o Sambu, ale u fungování filesystému, který se u příkazu
mv
chová podle pravidla: Trezor nemůže být odemčen pouhým přesunutím. Lidé si prostě neuvědomují, že při přesunu zůstává soubor v originálním stavu a to se týká nejen vlastníka a práv, ale také datumu vytvoření souboru, který bývá pro lidi také důležitý. Takže kdybys dal do Samby funkci, která by místo mv
prováděla cp
nebo prováděla nějako manipulaci s právy, tak by si zase lidé stěžovali, že Samba nerespektuje pravidla filesystému.
Tiskni
Sdílej:
ISSN 1214-1267, (c) 1999-2007 Stickfish s.r.o.