Portál AbcLinuxu, 2. května 2025 05:30

Nástroje: Začni sledovat (0) ?Zašle upozornění na váš email při vložení nového komentáře.

Vložit další komentář
Cohen avatar 25.7.2007 21:12 Cohen | skóre: 21 | blog: Drobnosti | Brno
Rozbalit Rozbalit vše Re: Fedora 7, Truecrypt, Yum a další
Odpovědět | Sbalit | Link | Blokovat | Admin

Použití suid je nebezpečné. Tvoje řešení přes sudo ale není o moc lepší. Představ si situaci, že si na tvůj počítač někdo přinese svůj TrueCrypt svazek naformátovaný nějakým unixovým filesystémem, na kterém bude mít bash s nastaveným suid bitem vlastněný rootem. Když si takový svazek připojí s parametrem suid, tak má plný přístup ke tvému počítači.

Já to vyřešil vlastním wrapperem (přiloženo níže), který teprve povoluji spouštět přes sudo bez hesla.

Pokud v tom wrapperu někdo objevíte chybu, budu vděčný za nahlášení. ;-)

$ visudo
. . .
%encrypted ALL=(root) NOPASSWD: /usr/local/bin/truecryptmount.sh
. . .
$ ls -l /usr/local/bin/truecryptmount.sh
-rwxr----- 1 root root 7076 2006-07-27 19:56 /usr/local/bin/truecryptmount.sh
$ cat /usr/local/bin/truecryptmount.sh
#!/bin/bash
#
#Tento skript slouzi ke zpristupneni nekterych funkci programu truecrypt 
#i beznym uzivatelum. Je urcen ke spousteni za pomoci sudo bez vyzadovani hesla.
#

#
#Vycisteni promennych pouzivanych skriptem.
#
unset truecryptpath
unset usergroupregexp
unset options
unset user
unset group
unset dmask
unset fmask

#
#Nastaveni cesty k obsluznemu programu truecrypt.
#
truecryptpath=/usr/local/bin/truecrypt

#
#Test, zda byl skriptu predan alespon jeden parametr.
#
if [ $# -ge 1 ]; then
    #
    #Test, zda cesta k obsluznemu programu skutecne ukazuje na spustitelny 
    #soubor.
    #
    if [ -x $truecryptpath ]; then
        #
        #Analyza predanych parametru.
        #
        case "$1" in
            #
            #Zadost o vypis vsech pripojenych svazku. Musi byt zdan prave jeden 
            #parametr.
            #
            -l) if [ $# -eq 1 ]; then
                    #
                    #Vypis vsech pripojenych svazku.
                    #
                    $truecryptpath --list
                #
                #Pokud nebyl zdan prave jeden parametr, konci s chybou.
                #
                else
                    exit 4
                fi;;
            #
            #Zadost o odpojeni vsech pripojenych svazku. Musi byt zdan prave 
            #jeden parametr.
            #
            -a) if [ $# -eq 1 ]; then
                    #
                    #Odpojeni vsech pripojenych svazku.
                    #
                    $truecryptpath -d
                #
                #Pokud nebyl zdan prave jeden parametr, konci s chybou.
                #
                else
                    exit 5
                fi;;
            #
            #Zadost o odpojeni konkretniho svazku. Musi byt zdany prave dva 
            #parametry.
            #
            -u) if [ $# -eq 2 ]; then
                    #
                    #Kontola, zda druhy parametr je cesta k beznemu souboru 
                    #nebo adresari.
                    #
                    if [ -f "$2" -o -d "$2" ]; then
                        #
                        #Odpojeni svazku identifikovaneho pripojnym bodem nebo 
                        #zdrojovym souborem.
                        #
                        $truecryptpath -d "$2"
                    #
                    #Pokud druhy parametr neni cesta k beznemu souboru nebo 
                    #adresari, konci s chybou.
                    #
                    else
                        exit 8
                    fi
                #
                #Pokud nebyly zdany prave dva parametry, konci s chybou.
                #
                else
                    exit 6
                fi;;
            #
            #Zadost o pripojeni svazku. Musi byt zadano prave osm parametru.
            #
            -m) if [ $# -eq 8 ]; then
                    #
                    #Nastaveni pomocne promenne s regularnim vyrazem, kteremu 
                    #musi odpovidat zadane jmeno uzivatele a skupiny.
                    #
                    usergroupregexp='[ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz_][ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789_.-]*[ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz01234567899_.$-]\?';
                    #
                    #Nastaveni pomocne promenne se jmenem uzivatele, ktery ma 
                    #byt vlastnikem souboru na pripojenem svazku.
                    #
                    user=`echo "$5" | grep -x -m 1 "$usergroupregexp"`;
                    #
                    #Nastaveni pomocne promenne se skupinou uzivatelu, ktere 
                    #maji nalezet soubory na pripojenem svazku.
                    #
                    group=`echo "$6" | grep -x -m 1 "$usergroupregexp"`;
                    #
                    #Nastaveni pomocne promenne se maskou prav k adresarum na 
                    #pripojenem svazku.
                    #
                    dmask=`echo "$7" | grep -x -m 1 '[0-7]\{3\}'`;
                    #
                    #Nastaveni pomocne promenne se maskou prav k souborum na 
                    #pripojenem svazku.
                    #
                    fmask=`echo "$8" | grep -x -m 1 '[0-7]\{3\}'`;
                    #
                    #Kontola, zda treti parametr je cesta k beznemu souboru, 
                    #ctvrty parametr je cesta k adresari a pomocne promenne 
                    #obsahuji retezec nenulove delky.
                    #
                    if [ -f "$3" -a -d "$4" -a -n "$user" -a -n "$group" -a -n "$dmask" -a -n "$fmask" ]; then
                        #
                        #Nastaveni pomocne promenne s parametry pro pripojeni 
                        #svazku.
                        #
                        options="uid=$user,gid=$group,dmask=0$dmask,fmask=0$fmask,utf8,noauto,nodev,noexec,nosuid";
                        #
                        #Pokud druhy parametr obsahuje retezece '-r'...
                        #
                        if [ "$2" = '-r' ]; then
                            #
                            #...pripoj svazek se zadanymi parametry ze zadaneho 
                            #umisteni do zadaneho pripojneho bodu pouze pro 
                            #cteni.
                            #
                            $truecryptpath -r --mount-options "$options" "$3" "$4"
                        #
                        #Pokud druhy parametr obsahuje retezece '-w'...
                        #
                        elif [ "$2" = '-w' ]; then
                            #
                            #...pripoj svazek se zadanymi parametry ze zadaneho 
                            #umisteni do zadaneho pripojneho bodu pro cteni 
                            #i zapis.
                            #
                            $truecryptpath --mount-options "$options" "$3" "$4"
                        #
                        #Pokud druhy parametr nebosahuje reteze '-r' nebo '-w', 
                        #konci s chybou.
                        #
                        else
                            exit 9
                        fi;
                    #
                    #Pokud neni spravne nastaven treti nebo ctvrty parametr 
                    #nebo alespon jedna promenna obsahuje retezec nulove delky, 
                    #konci s chybou.
                    #
                    else
                        exit 10
                    fi
                #
                #Pokud nebylo zdano prave osm parametru, konci s chybou.
                #
                else
                    exit 7
                fi;;
            #
            #Pokud v prvnim parametru nebyl nalezen spravny prikaz, konci 
            #s chybou.
            #
            *) exit 3;;
        esac
    #
    #Pokud cesta k obsluznemu programu neukazuje na spustitelny soubor, konci 
    #s chybou.
    #
    else
        exit 2
    fi
#
#Pokud skriptu nebyl predan ani jeden parametr, konci s chybou.
#
else
    exit 1
fi
$ exit
> # Read-only mód.
> sudo /usr/local/bin/truecryptmount.sh -m -r '/home/michalr/enc.tc' '/home/michalr/encmnt/' 'michalr' 'encrypted' '077' '177'
> # Unmount.
> sudo /usr/local/bin/truecryptmount.sh -u '/home/michalr/enc.tc'
> # Read-write mód.
> sudo /usr/local/bin/truecryptmount.sh -m -w '/home/michalr/enc.tc' '/home/michalr/encmnt/' 'michalr' 'encrypted' '077' '177'
> # Unmount all.
> sudo /usr/local/bin/truecryptmount.sh -a
> # List.
> sudo /usr/local/bin/truecryptmount.sh -l
OpenPGP key fingerprint: 489C 5EC8 0FD6 2BE8 9E59 B4F7 19C1 3E8C E0F5 DB61 (https://www.fi.muni.cz/~xruzick7/pgp-klic/)
25.7.2007 21:28 -=eM=- | skóre: 11 | blog: Merljin | Praha
Rozbalit Rozbalit vše Re: Fedora 7, Truecrypt, Yum a další
Popravdě řečeno, ta možnost mě nenapadla. Script je to pěknej, ale momentálně nad moje schopnosti - přiliš komplikované zatím - snad až se naučím sciptovat v bashi :) Musím si ho uložit a prostudovat. Na druhou stranu, zatím to používám jen sám na svém pc, tak by rizika měla být minimální ( snad ) . Nedovedu si ale představit jak obtížný musí být spravování nějakých serverů na které má třeba na VŠ přístup ( shell ) spoustu studentů. Masakr :)
It is wiser to find out than to suppose. -- Mark Twain
25.7.2007 21:54 Lu-Tze | skóre: 15 | blog: Lu-Tzeho blog
Rozbalit Rozbalit vše Re: Fedora 7, Truecrypt, Yum a další
Hele, jenom si tipnu, tak to kdyžtak ignoruj.

BTW piš radši if not něco then exit; dělej než if něco then dělej else exit a neporoste ti to tak do šířky

Takže: Brání tenhle skriptík tomu, abych nepřeplácnoul např. /bin něčím vlastním? Ani nechci domejšlet, co by se mohlo stát, jestli ne :-)
Cohen avatar 25.7.2007 22:00 Cohen | skóre: 21 | blog: Drobnosti | Brno
Rozbalit Rozbalit vše Re: Fedora 7, Truecrypt, Yum a další
Nejsem si moc jistý, co máš na mysli. Jak chceš „přeplácnout“ /bin?
OpenPGP key fingerprint: 489C 5EC8 0FD6 2BE8 9E59 B4F7 19C1 3E8C E0F5 DB61 (https://www.fi.muni.cz/~xruzick7/pgp-klic/)
25.7.2007 22:03 Lu-Tze | skóre: 15 | blog: Lu-Tzeho blog
Rozbalit Rozbalit vše Re: Fedora 7, Truecrypt, Yum a další
No prostě jako mountpoint uvedu /bin...
Cohen avatar 25.7.2007 22:05 Cohen | skóre: 21 | blog: Drobnosti | Brno
Rozbalit Rozbalit vše Re: Fedora 7, Truecrypt, Yum a další
Aha, to je další dobrá poznámka. To by se mělo taky nějak řešit. Díky za tip.
OpenPGP key fingerprint: 489C 5EC8 0FD6 2BE8 9E59 B4F7 19C1 3E8C E0F5 DB61 (https://www.fi.muni.cz/~xruzick7/pgp-klic/)
Cohen avatar 25.7.2007 22:03 Cohen | skóre: 21 | blog: Drobnosti | Brno
Rozbalit Rozbalit vše Re: Fedora 7, Truecrypt, Yum a další
Aha, oni se tam vlastně spouští ty grepy apod. bez absolutní cesty, co? To jsi asi měl na mysli, že? Hmm . . . :-D Tak jdu záplatovat. ;-)
OpenPGP key fingerprint: 489C 5EC8 0FD6 2BE8 9E59 B4F7 19C1 3E8C E0F5 DB61 (https://www.fi.muni.cz/~xruzick7/pgp-klic/)
Cohen avatar 25.7.2007 22:06 Cohen | skóre: 21 | blog: Drobnosti | Brno
Rozbalit Rozbalit vše Re: Fedora 7, Truecrypt, Yum a další
Moment, to by nemělo vadit, ne? Sudo tuším resetuje $PATH, ne?
OpenPGP key fingerprint: 489C 5EC8 0FD6 2BE8 9E59 B4F7 19C1 3E8C E0F5 DB61 (https://www.fi.muni.cz/~xruzick7/pgp-klic/)
otula avatar 28.7.2007 00:38 otula | skóre: 45 | blog: otakar | Adamov
Rozbalit Rozbalit vše Re: Fedora 7, Truecrypt, Yum a další
Odpovědět | Sbalit | Link | Blokovat | Admin
Chtělo by to nekompilovat truecrypt přímo do systému, ale vytvořit si balíček, který se pak seriózně nainstaluje
Kdo vám tvrdí, že jste paranoidní, ten v tom spiknutí s největší pravděpodobností jede taky.

Založit nové vláknoNahoru

Tiskni Sdílej: Linkuj Jaggni to Vybrali.sme.sk Google Del.icio.us Facebook

ISSN 1214-1267, (c) 1999-2007 Stickfish s.r.o.