Problema de diretório seguro do Ubuntu Apache2

1

Eu tenho tentado impedir o acesso aos diretórios wp-admin e wp-includes do WordPress no Ubuntu 13.04 com o Apache2 2.2.22. Primeiro, tentei fazer isso usando o .htaccess, que, por algum motivo, não funcionava, mas ao ler Apache Docs eles aconselham contra. Então mudei para a sugestão de colocá-lo na seção <directory> do arquivo conf. Você pode ver o que estou fazendo errado aqui?

  • Qual é a melhor maneira de impedir o acesso a um diretório?
  • Qual é a melhor maneira de impedir o acesso a um único arquivo?
  • Como obtenho o servidor para impor as regras, como impedir o acesso .htaccess, bem como impedir o acesso ao diretório de controle de versão listado abaixo do vserver.conf?

O seguinte é o meu arquivo vserver.conf.

<VirtualHost *:80>
ServerAdmin [email protected]
DocumentRoot /var/www/domain/
    ServerName domain.com
    ServerAlias www.domain.com
<Directory "/var/www/domain/">
    # WordPress Permalink Configuration
    # BEGIN WordPress
    <IfModule mod_rewrite.c>
    RewriteEngine On
    RewriteBase /
    RewriteRule ^index\.php$ - [L]
    RewriteCond %{REQUEST_FILENAME} !-f
    RewriteCond %{REQUEST_FILENAME} !-d
    RewriteRule . /index.php [L]

    # wp-include rules remove if multisite
    RewriteRule ^wp-admin/includes/ - [F,L]
    RewriteRule !^wp-includes/ - [S=3]
    RewriteRule ^wp-includes/[^/]+\.php$ - [F,L]
    RewriteRule ^wp-includes/js/tinymce/langs/.+\.php - [F,L]
    RewriteRule ^wp-includes/theme-compat/ - [F,L]
    </IfModule>
    # END WordPress

    Options FollowSymLinks
    Order allow,deny
    allow from all
</Directory>

<Directory "/var/www/domain/wp-admin">
    Order Deny,Allow
    Deny from all
    # whitelist server IP for use with SSH tunel
    Allow from 192.168.0.1
    # whitelist home IP address
    Allow from 192.168.1.1
</Directory>

<Directory "/var/www/domain/wp-content/plugins/akismet">
    Order Deny,Allow
    Deny from all

    <FilesMatch "^akismet\.(css|js)$">
    Allow from all
    </FilesMatch>
</Directory>

ErrorLog ${APACHE_LOG_DIR}/error-domain.log

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

CustomLog ${APACHE_LOG_DIR}/access-domain.log combined
</VirtualHost>

Também no apache2.conf há essa regra para impedir o acesso ao .htaccess, mas ainda posso acessar o arquivo a partir de um navegador.

AccessFileName .htaccess

# The following lines prevent .htaccess and .htpasswd files from being 
# viewed by Web clients. 

<Files ~ "^\.ht">
    Order allow,deny
    Deny from all
    Satisfy all
</Files>

E em conf.d / security há uma regra para impedir o acesso ao controle de versão que gera um erro 500 em vez de 404 ou 403

# Forbid access to version control directories
#
# If you use version control systems in your document root, you should
# probably deny access to their directories. For example, for git:
#
<DirectoryMatch "/\.git">
Require all denied
</DirectoryMatch>

Aqui estão os mods disponíveis:

actions          authn_alias      authn_file       authz_host       cern_meta        dav_fs           disk_cache       fcgid            imagemap         mem_cache        php5_cgi         proxy_ftp        setenvif         suexec
alias            authn_anon       authnz_ldap      authz_owner      cgi              dav_lock         dump_io          file_cache       include          mime             proxy            proxy_http       speling          unique_id
asis             authn_dbd        authz_dbm        authz_user       cgid             dbd              env              filter           info             mime_magic       proxy_ajp        proxy_scgi       ssl              userdir
auth_basic       authn_dbm        authz_default    autoindex        charset_lite     deflate          expires          headers          ldap             negotiation      proxy_balancer   reqtimeout       status           usertrack
auth_digest      authn_default    authz_groupfile  cache            dav              dir              ext_filter       ident            log_forensic     php5             proxy_connect    rewrite          substitute       vhost_alias

E os mods ativados:

actions.conf  alias.conf  authz_host.load  deflate.conf  dir.conf  env.load  headers.load  mime.load  php5.load    reqtimeout.load  setenvif.conf  status.conf
actions.load  alias.load  cgi.load     deflate.load  dir.load  expires.load  mime.conf     php5.conf  reqtimeout.conf  rewrite.load     setenvif.load  status.load

Como você pode ver, não há mod_access disponível.

    
por Mark Finch 24.09.2013 / 03:43

2 respostas

0

o mod_access está ativado? link

No topo da minha cabeça, eu estou supondo que não é. Isso é estranho. A maioria das versões do apache que vi vieram com o mod_access compilado em ...

    
por 24.09.2013 / 05:49
0

Você pode proteger seu diretório especificando DirectoryIndex

<Directory somepath/wp-admin>
   DirectoryIndex /pathtosomefilesay/404.html
</Directory>

então, no caso acima, sempre retornará o 404.html sempre que você tentar o diretório wp-admin em excesso. Você também pode especificar quem permitir. Espero que isso ajude

    
por 24.09.2013 / 11:26