Op deze website gebruiken we cookies om content en advertenties te personaliseren, om functies voor social media te bieden en om ons websiteverkeer te analyseren. Ook delen we informatie over uw gebruik van onze site met onze partners voor social media, adverteren en analyse. Deze partners kunnen deze gegevens combineren met andere informatie die u aan ze heeft verstrekt of die ze hebben verzameld op basis van uw gebruik van hun services. Meer informatie.

Akkoord

Vraag & Antwoord

OS Linux

Rechten home-directory

Marcel de Reus
7 antwoorden
  • Even een korte vraag. Weet iemand hier een goede manier op snel alle rechten in de home-directory naar wens te zetten? Ik wil dat alle mappen chmod 700 zijn en dat alle files chmod 600 zijn. Ik heb echter geen idee hoe je door geeft dat je alle files in je home-directory wilt hebben, dus ook alle files en directories die dieper in de directory-hierarchie liggen en de bestanden die met een '.' beginnen.

    Als ik weet hoe dat aan te geven kan vervolgens dit het probleem wel oplossen:
    [code:1:545ca14bf7]
    if [ -d $i ]; then
    chmod 700 $i
    else
    chmod 600 $i
    fi
    [/code:1:545ca14bf7]

    Kun je overigens ook nog aangeven wat voor rechten een nieuwe dir of file standaard moet krijgen als je hem aanmaakt? Bijvoorbeeld met mkdir en voor files met vim.

    Alvast bedankt.
  • Marcel toch, RTFM :wink: , manpage chmod :

    [quote:b8c3fbf8f6]
    -R, –recursive
    Recursively change permissions of directories and their contents.
    [/quote:b8c3fbf8f6]
  • Water toch, RTFQ :P

    ergens.. ergens moet ik zo'n scriptje hebben liggen, gebruikt om in /var/www alles rw-rw-r– te maken behalve de exec's ;)
    naja, kan um even niet vinden :/

    Ik kan je alleen even een perlvoorbeeld geven, pardon me, maar die had ik nog liggen ;)

    [code:1:24bbe5d141]foreach $file (@f) {

    $filename = $dir . '/' . $file;

    if ($file eq '.' || $file eq '..')
    {
    }
    elsif (-d $filename)
    {
    # depending on your needs you can do subdirs
    do_dir($filename);
    }
    elsif (substr($file,-4,4) eq '.gif')
    {
    @plaatjes = (@plaatjes, $filename);
    }
    }

    [/code:1:24bbe5d141]

    Das een beetje het idee


    of w8.. dat kan ook met je eigen script :+

    [code:1:24bbe5d141]if [ -d $i ]; then
    chmod 700 $i
    <roep hier je eigen script weer aan>
    else
    chmod 600 $i
    fi
    [/code:1:24bbe5d141]

    Dat idee? :)
  • Moet het perse een scriptje zijn? Als het eenmalig is….

    Recursief in /home alles op 600 zetten. Daarna niet-recursief *. op 700 zetten.


    Of kijk ik er nu te naief tegenaan?
  • Dat is te naief ja. Je hebt dan namelijk alle dieper liggende directries op 600 gezet, waardoor ze read-only geworden zijn.
    Dats je recursief kunt gebruiken snap ik, maar het probleem is dat er onderscheid tussen mappen en files gemaakt moet worden. Perl is geen probleem, dat brabbel ik ook, maar ik zie geloof ik niet helemaal in hoe het gegeven voorbeeld toe te passen is op dit probleem.
    Het scriptje dat ik gaf is in principe prima. Het punt is alleen dat je het door:

    [code:1:10e13c119f]
    for i in *; do
    if [ -d $i ]; then
    chmod 700 $i
    else
    chmod 600 $i
    fi
    done
    [/code:1:10e13c119f]
    Alleen op de huidige directory toepast en gezien het aantal subdirs en subdirs van subdirs is het geen doen om elke directory zo af te gaan. De vraag is echter hoe voor ik 'for i in ?' op de plaats van het vraagteken alle directories en subdirectories van /home/marcel in? Dus bijvoorbeeld /home/marcel /home/marcel/films /home/marcel/muziek/Bad\ Religion /home/marcel/muziek/Bad\ Religion/No\ Control enz enz
    In al die mappen moet de if lus worden uitgevoerd.

    Het probleem is dat ik namelijk bij het backuppen geen rekening met de rechten heb gehouden, waardoor alles alleen-lezen is en ik niet wil dat met 'chmod -R 700 /home/marcel' alle files executable worden.
  • find . | while read i
    do
    de rest hetzelfde

    Wil je $i variable overal quoten, in het geval er spaties in je file-/dir namen zitten. - "$i"
  • Marcel:
    Ik weet niet hoe je chmod kunt uitvoeren vanuit perl, maar dit doe je dan (ongever)

    /me beseft dat er iets mist :+

    [code:1:a525837b08]opendir(D, $dir);
    @f = readdir(D);
    closedir(D);
    foreach $file (@f) {

    $filename = $dir . '/' . $file;

    if ($file eq '.' || $file eq '..')
    {
    }
    elsif (-d $filename)
    {
    # depending on your needs you can do subdirs
    do_dir($filename);
    <code voor chmod 600 $filename>
    }
    else
    {
    <code voor chmod 700 $filename>
    }
    }[/code:1:a525837b08]

    dit plaats je dus in een function do_dir(map).

    Snapje?

    Dit kan in principe ook met jou script maar, dan ook in een functie do_dir(map):

    [code:1:a525837b08]
    <begin function do_dir($map);>
    for i in $map\*; do
    if [ -d $i ]; then
    chmod 700 $i
    <roep so_dir aan met als argument $i>
    else
    chmod 600 $i
    fi
    done
    <einde function>[/code:1:a525837b08]

    ik weet niet hoe het werkt met functions in BASH, amar dat is het idee :)

Beantwoord deze vraag

Dit is een gearchiveerde pagina. Antwoorden is niet meer mogelijk.