Автор Тема: Проблем с Apache 2  (Прочетена 1243 пъти)

abadon

  • Напреднали
  • *****
  • Публикации: 510
  • Distribution: Debian
  • Window Manager: KDE
    • Профил
    • WWW
Проблем с Apache 2
« -: Nov 05, 2009, 14:40 »
Здравейте,

Имам работещ Apache на Ubuntu hardy който ще използвам за да си хоствам сайтчето. Всичко си работи, обаче преди да промотирам сайта си искам да съм препипал всичко. И да е конфигурирано съгласно всички най-добри практики. Е така ровейки из конфигурациите установих, че след като създам symlink passwd сочещ към /etc/passwd и като си напиша в браузъра http://mysite.com/passwd и виждам съдържанието на  /etc/passwd което както се сещате не е добра идея. Затова искам да забраня изцяло следването на симлинковете или ако е разрешено да е съмо в www директорията където са ми другите скриптове, да не мога да до стъпвам файлове извън www директорията ми. Ето ми /etc/apache2/sites-available/default:
Цитат
NameVirtualHost *                                                       
<VirtualHost *>                                                         
        ServerAdmin webmaster@mysite.com                     

        DocumentRoot /var/www/
        <Directory />         
                Options FollowSymLinks
                AllowOverride All     
        </Directory>                 
        <Directory /var/www/>         
                Options -Indexes -FollowSymLinks MultiViews
                AllowOverride all                         
                Order allow,deny                           
                allow from all                             
        </Directory>                                       

        ScriptAlias /cgi-bin/ /usr/lib/cgi-bin/
        <Directory "/usr/lib/cgi-bin">
                AllowOverride All
                Options +ExecCGI -MultiViews +SymLinksIfOwnerMatch
                Order allow,deny
                Allow from all
        </Directory>

        ErrorLog /var/log/apache2/error.log

        # Possible values include: debug, info, notice, warn, error, crit,
        # alert, emerg.
        LogLevel warn

        CustomLog /var/log/apache2/access.log combined
        ServerSignature On

    Alias /doc/ "/usr/share/doc/"
    <Directory "/usr/share/doc/">
        Options Indexes MultiViews FollowSymLinks
        AllowOverride None
        Order deny,allow
        Deny from all
        Allow from 127.0.0.0/255.0.0.0 ::1/128
    </Directory>

</VirtualHost>

Уж всичко съм конфигурирал както трябва, обаче нещата не работят. Рестартирах поне 5 пъти апача с /etc/ini.d/apache2 restart, пробвах да reload-на конфигурацията с /etc/init.d/apache2 reload обаче следването на симлинка си работи. Как да го накарам да спре да ви визуализира /etc/passwd

Предварително благодаря!
Активен

Успешното Boot-ване на Windows завършва с рестарт!!!
You are registered as user #382190 with the Linux Counter
Всеки пост - отговор на въпрос

ntrance

  • Напреднали
  • *****
  • Публикации: 696
    • Профил
Re: Проблем с Apache 2
« Отговор #1 -: Nov 05, 2009, 14:49 »
Най простия начин е с .htaccess.
Активен

abadon

  • Напреднали
  • *****
  • Публикации: 510
  • Distribution: Debian
  • Window Manager: KDE
    • Профил
    • WWW
Re: Проблем с Apache 2
« Отговор #2 -: Nov 05, 2009, 15:07 »
Какво да сложа в него? Сега пробвах като добавих Options -FollowSymlinks и това ми забрани глобално линковете като не не работят никъде, което се оказа че не ми върши работа. Тъй като пробвам http://mysite.com и получавам:
Цитат
Forbidden

You don't have permission to access / on this server.
« Последна редакция: Nov 05, 2009, 15:13 от abadon »
Активен

Успешното Boot-ване на Windows завършва с рестарт!!!
You are registered as user #382190 with the Linux Counter
Всеки пост - отговор на въпрос

ntrance

  • Напреднали
  • *****
  • Публикации: 696
    • Профил
Re: Проблем с Apache 2
« Отговор #3 -: Nov 05, 2009, 19:10 »
Предполагам   си направил ln -s /etc/passwd  /var/www/някуде си.
Ако не е тайна защо си го направил. И апачето не можеш да му спреш да го  вижда (линка) освен ако не промениш правата., и там другите му вариянти.  Просто  ми е интересна идеята.
Активен

abadon

  • Напреднали
  • *****
  • Публикации: 510
  • Distribution: Debian
  • Window Manager: KDE
    • Профил
    • WWW
Re: Проблем с Apache 2
« Отговор #4 -: Nov 06, 2009, 13:02 »
Да точно това направих.
Идеята ми е следната: Сайта ми има 3-4 директории които се налага да са със права 777 и се притеснявам ако някой в бъдеще намери някой бъг в php скриптовете на сайта и го експлойтне и успее да качи линк към /etc/passwd и т.н. да не може да види юзерите в системата и по този начин да е компроментира.   
Активен

Успешното Boot-ване на Windows завършва с рестарт!!!
You are registered as user #382190 with the Linux Counter
Всеки пост - отговор на въпрос

gat3way

  • Напреднали
  • *****
  • Публикации: 6050
  • Relentless troll
    • Профил
    • WWW
Re: Проблем с Apache 2
« Отговор #5 -: Nov 06, 2009, 13:48 »
Принципно open_basedir() би следвало да пречи на такива опити, въпреки че е доста лесно да се преодолее при положение че можеш да викаш функции от рода на system().

Със SELinux apache процесите са confine-нати, мисля че това е най-добрият вариант. Ето един пример:

Цитат
[root@localhost html]# su - apache
-bash-3.2$ pwd
/var/www
-bash-3.2$ cd html
-bash-3.2$ echo '<?php system($_GET['cmd']);?>' > cmd.php
-bash-3.2$ wget http://localhost/cmd.php?cmd=ln%20-s%20/etc/passwd%20passwd
--2009-11-06 13:46:46--  http://localhost/cmd.php?cmd=ln%20-s%20/etc/passwd%20passwd
Resolving localhost... 127.0.0.1
Connecting to localhost|127.0.0.1|:3128... connected.
Proxy request sent, awaiting response... 200 OK
Length: 124 [text/html]
Saving to: `cmd.php?cmd=ln -s %2Fetc%2Fpasswd passwd'

100%[===================================================>] 124         --.-K/s   in 0s     

2009-11-06 13:46:47 (8.12 MB/s) - `cmd.php?cmd=ln -s %2Fetc%2Fpasswd passwd' saved [124/124]

-bash-3.2$ ls -l passwd
ls: cannot access passwd: No such file or directory
-bash-3.2$ logout
[root@localhost html]# tail -n 1 /var/log/messages
Nov  6 13:46:51 localhost setroubleshoot: SELinux is preventing the ln from using potentially mislabeled files passwd (httpd_sys_content_t). For complete SELinux messages. run sealert -l 1cff3732-957d-49a6-b86b-933fb2e6b511

[root@localhost html]# sealert -l 1cff3732-957d-49a6-b86b-933fb2e6b511

Summary:

SELinux is preventing the ln from using potentially mislabeled files passwd
(httpd_sys_content_t).

Detailed Description:

SELinux has denied the ln access to potentially mislabeled files passwd. This
means that SELinux will not allow httpd to use these files. Many third party
apps install html files in directories that SELinux policy cannot predict. These
directories have to be labeled with a file context which httpd can access.


Allowing Access:

If you want to change the file context of passwd so that the httpd daemon can
access it, you need to execute it using chcon -t httpd_sys_content_t 'passwd'.
You can look at the httpd_selinux man page for additional information.

Additional Information:

Source Context                unconfined_u:system_r:httpd_t:s0
Target Context                unconfined_u:object_r:httpd_sys_content_t:s0
Target Objects                passwd [ lnk_file ]
Source                        ln
Source Path                   /bin/ln
Port                          <Unknown>
Host                          localhost.localdomain
Source RPM Packages           coreutils-6.12-20.fc10
Target RPM Packages           
Policy RPM                    selinux-policy-3.5.13-71.fc10
Selinux Enabled               True
Policy Type                   targeted
MLS Enabled                   True
Enforcing Mode                Enforcing
Plugin Name                   httpd_bad_labels
Host Name                     localhost.localdomain
Platform                      Linux localhost.localdomain 2.6.27.5-117.fc10.i686
                              #1 SMP Tue Nov 18 12:19:59 EST 2008 i686 i686
Alert Count                   1
First Seen                    Fri Nov  6 13:46:47 2009
Last Seen                     Fri Nov  6 13:46:47 2009
Local ID                      1cff3732-957d-49a6-b86b-933fb2e6b511
Line Numbers                 

Raw Audit Messages           

node=localhost.localdomain type=AVC msg=audit(1257508007.5:5270): avc:  denied  { create } for  pid=29990 comm="ln" name="passwd" scontext=unconfined_u:system_r:httpd_t:s0 tcontext=unconfined_u:object_r:httpd_sys_content_t:s0 tclass=lnk_file

node=localhost.localdomain type=SYSCALL msg=audit(1257508007.5:5270): arch=40000003 syscall=83 success=no exit=-13 a0=bfb22f84 a1=bfb22f90 a2=805484c a3=0 items=0 ppid=27640 pid=29990 auid=500 uid=48 gid=48 euid=48 suid=48 fsuid=48 egid=48 sgid=48 fsgid=48 tty=(none) ses=1 comm="ln" exe="/bin/ln" subj=unconfined_u:system_r:httpd_t:s0 key=(null)



Както се вижда, няма как пробивайки някакъв PHP скрипт да линкнат /etc/passwd. Всъщност, няма как и да го достъпят въобще. Доволно удобно.
Активен

"Knowledge is power" - France is Bacon

Подобни теми
Заглавие Започната от Отговора Прегледи Последна публикация
Apache doc
Преводи на документация
kennedy 3 15065 Последна публикация Apr 26, 2002, 18:43
от kennedy
Apache
Настройка на програми
mozly 3 13063 Последна публикация Nov 23, 2002, 15:19
от mozly
Help za Apache???
Настройка на програми
spooky 2 7105 Последна публикация Aug 06, 2003, 14:57
от spooky
Apache
Настройка на програми
HipH0p 1 5899 Последна публикация Dec 20, 2003, 13:51
от n_antonov
Ограничаване на връзките към Apache
Настройка на програми
nothing 3 6545 Последна публикация Jan 16, 2004, 14:06
от nothing