Re: lug-bg: Linux normal path

2004-11-24 Thread Aleksandar Valchev
ÐÐ ÐÐ ÐÐ ÐÐÐ ÐÑÐÐÐ , ÐÑÐÐÑÐ  ÐÐ 
ÑÑ ÐÐÑÐÑÐÐÑÐÑ ÐÐ chroot(2) ? 
ÐÑÑÑÐÑ Ð google, ÐÐ ÑÐÐ ÐÐ ÐÐÑÐ ÐÐ BIND, ftp Ð 
Ñ.Ð. ÐÐÑÐ ÐÐÐÑÐ ÐÐ  ÐÐ 
ÐÐ ÑÐÑÑÑÐ ÑÐÐÐÑÐ. Ð man 2 chroot Ð Ð 
ÐÐÑÐÐ...

A mail-list of Linux Users Group - Bulgaria (bulgarian linuxers).
http://www.linux-bulgaria.org - Hosted by Internet Group Ltd. - Stara Zagora
To unsubscribe: http://www.linux-bulgaria.org/public/mail_list.html



Re: lug-bg: Linux normal path

2004-11-24 Thread Peter Pentchev
On Wed, Nov 24, 2004 at 01:25:34PM +0200, Aleksandar Valchev wrote:
> Признавам, направо ми взе акъла. Обстойно и изчерпателно. Много ти благодаря. 
> Мисля, че тази информацияще бъде полезна на много хора, не само на мен :).
> 
> Чак толкова сложни неща няма да ми трябват. Правя един сървар, на който му е 
> зададена директория. От тук на там, всички обръщения към пътища на файлове ще 
> започват с тази директория. т.е. има такава структура:
> 
> /home/blabla/ 
> /home/blabla/users/
> /home/blabla/users/ivancho
> /home/blabla/users/petkancho
> /home/blabla/conf/
> 
> Всеки потребител ще си има собствена директория с неопределено съдържание 
> (като файлова структура), но основното е /home/blabla/users. 

В такъв случай това, което ще ти свърши най-добра работа според мен, е
да видиш дали не можеш да изнесеш самия сървър в отделен процес, който в
момента, в който приеме връзка от потребител, да направи един chroot към
/home/blabla/users.  След chroot("/home/blabla/users") вече всички
пътища, които програмата използва, ще бъдат само в рамките на
/home/blabla/users - т.е. съвсем естествено ще се получи това, което
искаш: /mariika да бъде всъщност /home/blabla/users/mariika.

Тук може да имаш два проблема.  Първият е, че chroot можеш да изпълниш
само докато си с user ID 0, т.е. root, така че самият сървърски процес
ще трябва да бъде стартиран като root, след което да направи chroot и да
си продължи работата.  Другият проблем е, че веднъж направил chroot,
"излизане няма" - сървърният процес няма да може нито да
отваря/променя/трие файлове, нито да изпълнява програми, които са извън
/home/blabla/users.  Може би ще е добра идея да си направиш
архитектурата с два процеса - единият да приема връзки от потребителите,
да рови каквото има във външни файлове (може би за да провери права за
достъп и т.н.), след което да подава самите команди (почти без да се е
опитвал да ги parse-ва) на другия, който е chroot-нат и ги изпълнява
горе-долу безопасно.  Това е един вариант, има и други, но за момента
повече не мога да кажа, без да знам купчина подробности - какво всъщност
ще прави този сървър, как ще стигат до него заявките и т.н. :)

Поздрави,
Петър

-- 
Peter Pentchev  [EMAIL PROTECTED][EMAIL PROTECTED][EMAIL PROTECTED]
PGP key:http://people.FreeBSD.org/~roam/roam.key.asc
Key fingerprint FDBA FD79 C26F 3C51 C95E  DF9E ED18 B68D 1619 4553
This sentence every third, but it still comprehensible.


pgpPvCkP3CxUC.pgp
Description: PGP signature


Re: lug-bg: Linux normal path

2004-11-24 Thread Aleksandar Valchev
ÐÑÐÐÐ, ÐÐÐÑÐÐÐ ÐÐ ÐÐÐ ÐÐÑÐÐ. ÐÐÑÑ Ð 
ÐÐÑÐÑÐÐÑ. Ð ÑÐ ÐÐÐÑÑ. 
ÐÐÑÐÑ, ÑÐ ÑÐÐÐ ÐÐÑÐÑÐÐÑÐÑÑÐ ÐÑÐÐ ÐÐÐ ÐÐ 
Ð ÑÐÑÐ, ÐÐ ÑÐÐÐ ÐÐ ÐÐÐ :).

ÐÐÐ ÑÐÐ ÑÐ ÐÐÑÐ ÐÑÐÐ ÐÐ ÐÐ ÑÑÑÐÐÐÑ. 
ÐÑÐÐÑ  ÑÑÑÐÐÑ, ÐÐ ÐÐÐÑÐ ÐÑ Ð 
 ÐÐÑÐÐÑÐÑÐÑ. ÐÑ ÑÑÐ ÐÐ ÑÐÐ, ÐÑÐÑÐÐ 
ÐÐÑÑÑÐÐÐÑ ÐÑÐ ÐÑÑÐÑÐ ÐÐ ÑÐÐ ÑÐ 
ÑÐÐÑ Ñ ÑÐÐÐ ÐÐÑÐÐÑÐÑÐÑ. Ñ.Ð. ÐÐÐ ÑÐ 
ÐÑÑÑÐ:

/home/blabla/ 
/home/blabla/users/
/home/blabla/users/ivancho
/home/blabla/users/petkancho
/home/blabla/conf/

ÐÑÐÐÐ ÐÐÑÑÐÐÐÑÐÐ ÑÐ ÑÐ ÐÐÐ ÑÐÐÑÑ 
ÐÐÑÐÐÑÐÑÐÑ Ñ ÑÐÐÐ ÑÑÐÑÑÐ 
(ÐÐÑÐ ÑÐÐ ÐÑÑÑÐ), ÐÐ ÐÑÐÑÐ Ð 
/home/blabla/users. 
ÐÐÑÑÐÐÐÑÐÐÐÑÐ ÑÐ ÑÐ Ñ ÐÐÑÐÐÐÑÐÐÐ 
ÐÑÐÐÑÑÑÐ ÐÐ Ñ ÐÐ ÐÐÑÐÐÑÐÑÐÐ Ñ.Ð. 
ÐÐÐ 
ÐÐÑÑÐÐÐÑÐÐÑ mariika  ÐÐÑÐÐÐ ÐÐ 
ÑÑÐÑÑÐÑÐ ÐÐ 
ÐÐÑÐÐÑÐÑÐÑÑÐ /home/blabla/users/mariika, ÑÐ maiika ÑÐ 
ÐÑÐ ÑÐÐÐ /mariika, 
Ð ÐÑÐÐ ÐÐ  ÐÐÑÐ ÑÐ, ÐÐ ÐÑÑÐÑÐ 
ÐÐÑÐÐÑÐÑÐÐ.  ÑÐ mariika 
ÐÑÐÐ ÐÐ  Ð ÑÐ Ñ ÐÑÑÐÐÑÐ 
ÐÐÑÑÐÐÐÑÐÐÐ, ÑÐ Ð ÐÐ ÐÑÑÐÐ 
ÑÐÐ ÐÑÑÑÐ ÐÐÑÐ ÐÐ ÐÐÑÐÐ ÑÐ ÐÐÐ 
/home/blabla/users/. Ð ÑÐÐÐ ÐÐÑÐ  
ÐÐÑÐÐÐ ÐÐ ÑÑÐ ÐÐÑÐÐÑÐÑÐÑÑÐ ÐÐ 
ÐÐÑÑÐÐÐÑÐÐ ivancho 
(/home/blabla/users/ivancho), ÑÐ ÑÑÑÐÐÑÐ ÑÐ  ÐÐÐ 
ÐÐÑÐÐÑÐÑÐÐ ÑÐ Ñ 
Ð  ÐÑÑÐ ÐÐÑÐÐÑÐÑÐÑ ÐÑ mariika Ð 
ÐÑÐÐ.  ÑÐ  mariika ÐÐ 
ÐÐÐÑÐÐ ÐÐÑÐ ?

AÐÐ mariika ÐÑ "///mariika   ///" ÐÐÐ ÐÐÑÐ ÐÐÐ 
 ÐÐ ÐÐ ÐÑÐ ÐÐÑÐ 
ÐÐÐ ÐÐÐ ÐÐ ÐÐÑÐÑÐÑÐÑ ÐÐÐ ÐÐ ???

ÐÐ Ð Ð ÐÐÐÑÐ ÐÐÐÑÐÐ ÐÑÐÐ, ÐÐ ÐÑÐ ÐÑÐ 
ÐÐ Ð ÐÑÑÐÐ Ð ÐÑÐ


A mail-list of Linux Users Group - Bulgaria (bulgarian linuxers).
http://www.linux-bulgaria.org - Hosted by Internet Group Ltd. - Stara Zagora
To unsubscribe: http://www.linux-bulgaria.org/public/mail_list.html



Re: lug-bg: Linux normal path

2004-11-24 Thread Peter Pentchev
On Wed, Nov 24, 2004 at 11:49:37AM +0200, Aleksandar Valchev wrote:
> Трябва ми една функция на C++, която от зададения като стринг път да го 
> нормализира т.е. от ///homeblabla/// -> /home/blabla. 
> 
> Някой да се сеща за други преобразования?

Ако искаш бърз отговор - не е толкова просто...  Погледни какво съм
написал за APR (Apache Portable Runtime) в последния параграф, но след
това - а за предпочитане преди това - може да прочетеш и другите неща,
които написах :)

Зависи каква точно ти е целта :)  Откъде идва този път, накъде ще отива,
през какви преобразувания ще минава след това...

Основните проблеми са три:
- escape-ване на отделни символи с \
- quote-ване на по-големи поредици символи с ' или "
- интересни неща като /../

Първите две са на практика едно и също, ще ги разгледаме заедно.

Въпросът е 1. дали някой ти е подал нещата, escape-нати или quote-нати
по този начин, и 2. дали ти трябва да ги подадеш на този след теб,
escape-нати или quote-нати по този начин.

Как са ти ги подали...  Ако parse-ваш директно user input, или си играеш
на нещо като шел или нещо такова, може да се наложи да преобразуваш
пътя, преди да му правиш проверки за коректност и каноникализация.  В
смисъл, може да се наложи да се разходиш по него символ по символ, при
срещане на \ да сложиш следващия символ директно, при срещане на кавичка
или апостроф да вземеш всичко до следващата, такива неща.  Макар че в
общия случай това трябва да бъде решено още *преди* да ти подадат на теб
нещата - ако става дума за user input, вероятно още преди това си го
разбил на думи и в този момент си се справил с кавичките, апострофите и
quote-ването.  Ако не си, ще трябва да го направиш, преди да започнеш
каноникализация.

Да ги подадеш на този след теб...  Ако ще ги подаваш на chdir(2),
mkdir(2), opendir(2) или нещо такова, или като параметър на програма,
която изпълняваш *директно* с exec*(3) или Perl-овския вариант на exec()
СЪС СПИСЪК от параметри, тогава НЕ трябва да escape/quote-ваш нищо.  Ако
обаче ще си строиш команда, която да подадеш на шел или на system(3) (то
е горе-долу едно и също), или на Perl/PHP exec()/passthru() с ЕДИН
параметър (при което то също го подава на system(3)), или на glob(3) или
Perl-овски glob(), тогава трябва много да внимаваш с интервалите, да не
се окаже в един момент, че вместо един път подаваш три.  А, да, ако го
подаваш на нещо, което в един момент ще стигне до изпълнение от шел, ще
е добре да escape-неш *всички* символи, които не са букви, цифри, тирета
или подчертавки - така хем ще хванеш неща като точка и запетая, долар,
обратни апострофи и какво ли не, хем ще "хванеш" и неща, за които в
момента не е ясно, че значат нещо специално за шела, но в някой бъдещ
шел ще значат.

Ако ще ги слагаш в SQL заявки, там нещата също са по-специални, но и
правилата са малко по-различни... но ако си стигнал дотук, би трябвало
да ги знаеш - пак кавички, апострофи, тук-там по някоя обратна наклонена
черта, и си общо-взето готов.

Ако ще ги даваш на нещо трето, тогава пак ще трябва да се замислиш за
това как това трето нещо интерпретира различни поредици от символи -
примерно дали се опитва да разпознае %2E или & или Ї или
някакъв друг вид представяне на multibyte characters, character entities
и какво ли не още.  За малък пример виж следващата точка :)

Сега за третата точка - зависи какво все пак ще правиш с този път и защо
го каноникализираш.  Ако целта ти е да ограничиш достъпа до дадено дърво
от директории, тогава определено ще трябва да внимаваш за /../, но - и
тук има едно голямо но - това внимаване за '..' *задължително* трябва да
бъде синхронизирано с преобразуването на пътя във вид, удобен за
логаритмуване от този *след* теб.  Като много бърза демонстрация виж
десетките начини, по които в продължение на 4-5 години различни
части от MS IIS можеха да бъдат излъгани да ти дадат достъп до различни
части от файловата система, защото това, което каноникализираше и
проверяваше, не винаги знаеше за всички възможности, по които следващият
можеше да интерпретира пътя - в един момент можеш да му подадеш /.%2e/ и
то ще мине, после пък се оказва, че може и с /..%00/, после пък можеше
да подадеш едната или двете точки като Unicode, после изведнъж мина нещо
като /..%2F и изобщо... тези две неща *трябва* да бъдат синхронизирани!

Ако ти се струва, че го правя да изглежда сложно, причината е съвсем
проста - каноникализация на пътища НАИСТИНА е много сложно нещо, и много
зависи от това от кого ги взимаш, на кого ги даваш, и с каква цел ги
каноникализираш.  Ако искаш просто решение, което ще работи в голяма
част от случаите, погледни Apache Portable Runtime (apr) -
http://apr.apache.org/ - страхотна библиотека от какви ли не функции,
която е в основата на факта, че Apache върви върху толкова много
платформи.  Там има секцийка 'Filepath Manipulation Functions' -
http://apr.apache.org/docs/apr/group__apr__filepath.html - някои от тях
може и да ти свършат работа :)

Поздрави,
Петър

-- 
Peter Pentchev  [EMAIL PROTECTED][EMAI

Re: lug-bg: Linux normal path

2004-11-24 Thread Krasimir Kazakov
Aleksandar Valchev wrote:
ÐÑÑÐÐÐ ÐÐ  ÑÑÐÐÑÐÑ ÐÐ C++, ÐÐÑÑÐ ÐÑ Ñ ÐÐÑÐ ÑÑÑÐÐÐ ÐÑÑ ÐÐ ÐÐ 
ÐÐÑÐÐÑÐ Ñ.Ð. ÐÑ ///homeblabla/// -> /home/blabla. 

ÐÑÐÐÐ ÐÐ ÑÐ ÑÐÑÐ ÐÐ ÐÑÑÐÐ ÐÑÐÐÐÑÐÐÐÑ?
 

Edinstveno se seshtam za unix comandata , nadqvam se da ti svurshi rabota :)
bash-3.00# readlink -f ///homeblabla///
/home/blabla
bash-3.00#
--
Regards: Krasimir Kazakov

A mail-list of Linux Users Group - Bulgaria (bulgarian linuxers).
http://www.linux-bulgaria.org - Hosted by Internet Group Ltd. - Stara Zagora
To unsubscribe: http://www.linux-bulgaria.org/public/mail_list.html



Re: lug-bg: Linux normal path

2004-11-24 Thread Nikolay Mitev
ÐÐÑÐÑÑÐ
Aleksandar Valchev wrote:
ÐÑÑÐÐÐ ÐÐ  ÑÑÐÐÑÐÑ ÐÐ C++, ÐÐÑÑÐ ÐÑ Ñ ÐÐÑÐ ÑÑÑÐÐÐ ÐÑÑ ÐÐ ÐÐ 
ÐÐÑÐÐÑÐ Ñ.Ð. ÐÑ ///homeblabla/// -> /home/blabla. 

ÐÑÐÐÐ ÐÐ ÑÐ ÑÐÑÐ ÐÐ ÐÑÑÐÐ ÐÑÐÐÐÑÐÐÐÑ?
 

ÐÐÐ-ÐÐÐÑÐ  Boost.Filesystem. ÐÑÑÑÐ ÑÑÐÐÑÐÐ ÑÐÐÐÑÐ.
Ð ÐÐ-ÑÐÐÑÐ path::normalize.
http://boost.org/libs/filesystem/doc/path.htm#normalize
cheers,
face

A mail-list of Linux Users Group - Bulgaria (bulgarian linuxers).
http://www.linux-bulgaria.org - Hosted by Internet Group Ltd. - Stara Zagora
To unsubscribe: http://www.linux-bulgaria.org/public/mail_list.html



lug-bg: Linux normal path

2004-11-24 Thread Aleksandar Valchev
ÐÑÑÐÐÐ ÐÐ  ÑÑÐÐÑÐÑ ÐÐ C++, ÐÐÑÑÐ ÐÑ 
Ñ ÐÐÑÐ ÑÑÑÐÐÐ ÐÑÑ ÐÐ ÐÐ 
ÐÐÑÐÐÑÐ Ñ.Ð. ÐÑ ///homeblabla/// -> /home/blabla. 

ÐÑÐÐÐ ÐÐ ÑÐ ÑÐÑÐ ÐÐ ÐÑÑÐÐ ÐÑÐÐÐÑÐÐÐÑ?

A mail-list of Linux Users Group - Bulgaria (bulgarian linuxers).
http://www.linux-bulgaria.org - Hosted by Internet Group Ltd. - Stara Zagora
To unsubscribe: http://www.linux-bulgaria.org/public/mail_list.html