Fórum Ubuntu Linux - PT
Suporte Técnico => Servidores => Tópico iniciado por: maurov em 15 de Fevereiro de 2017, 16:45
-
Instalei um hd slave num servidor que recebeu automaticamente o nome de (vou encurtar para facilitar):
/media/myuser/89e802
Veio default com user myuser e grupo root. Já alterei com
chown -Rc myuser:myuser 89e802
Tem permissões
drwxr-xr-x
Dentro dele tem uma pasta produtos, que ficou como
/media/myuser/89e802/produtos
No diretorio raiz do Apache, criei o link:
myuser@myuser:/media/myuser$ ln -s /media/myuser/89e802/produtos
No hd principal do servidor LAMP, ficou:
/var/www/html/produtos
Pelo Nautilus navego normalmente e consigo exibir o arquivo:
/var/www/html/produtos/foto.png
Problema:
Numa página html não abre o:
<img src="produtos/foto.png">
Já tentei achar o erro pelas permissões, pelo proprietário e pela sintaxe do html e do link, mas não localizei o erro.
-
Olá maurov, faltou dizer qual o sistema de arquivos em que esse HD foi formatado. Se for NTFS ou VFAT, por exemplo, há opções essenciais que precisam ser configuradas pra que o acesso funcione a contento.
Já sistemas de arquivos nativos podem exigir outros cuidados.
Em particular, eu verificaria:
1. Que o usuário do apache (se não me engano é "www-data") tem acesso de execução em todos os diretórios do caminho, tanto no caminho real, quanto no link simbólico. O acesso de execução, num diretório, define se um usuário pode recuperar entradas nesse diretório ("Directory Traversal").
2. Que o AppArmor ou o SELinux, se estiverem instalados, estejam configurados pra permitir que o Apache (/usr/bin/httpd) acesse suas pastas.
-
Olá
Creio que seja www-data
ps aux | grep -i apache
root 1199 0.0 0.8 325504 28620 ? Ss 13:59 0:00 /usr/sbin/apache2 -k start
www-data 1341 0.0 0.4 326132 15224 ? S 13:59 0:00 /usr/sbin/apache2 -k start
www-data 1342 0.0 0.4 326132 15312 ? S 13:59 0:00 /usr/sbin/apache2 -k start
www-data 1343 0.0 0.4 326132 15300 ? S 13:59 0:00 /usr/sbin/apache2 -k start
www-data 1344 0.0 0.4 326132 15380 ? S 13:59 0:00 /usr/sbin/apache2 -k start
www-data 1345 0.0 0.4 326132 15220 ? S 13:59 0:00 /usr/sbin/apache2 -k start
www-data 1866 0.0 0.4 326132 15312 ? S 14:18 0:00 /usr/sbin/apache2 -k start
www-data 1867 0.0 0.4 326124 15316 ? S 14:19 0:00 /usr/sbin/apache2 -k start
myuser 6703 0.0 0.0 21312 940 pts/4 S+ 17:08 0:00 grep --color=auto -i apache
Creio não ter AppArmor ou o SELinux, a não ser que se instalem automaticamente junto com outro programa. Mas a instalação desta máquina é nova.
Obs:
Só agora descobri que o ps aux signfica Process Status, All, User's process, X not attached to terminal. :)
Outra coisa:
Copiei esta estrutura de outro servidor que está mostrando as imagens normalmente.
-
E o sistema de arquivos, qual é?
EDIT: E a versão do Ubuntu em uso, qual é, também?
-
Ubuntu 16.04.1
Disco do sitema com ext4(?)
Disco slave com GPT
lsb_release -a
No LSB modules are available.
Distributor ID: Ubuntu
Description: Ubuntu 16.04.1 LTS
Release: 16.04
Codename: xenial
fdisk -l
Disk /dev/sda: 74,5 GiB, 80026361856 bytes, 156301488 sectors
Units: sectors of 1 * 512 = 512 bytes
Sector size (logical/physical): 512 bytes / 512 bytes
I/O size (minimum/optimal): 512 bytes / 512 bytes
Disklabel type: dos
Disk identifier: 0x83879a46
Dispositivo Inicializar Start Fim Setores Size Id Tipo
/dev/sda1 * 2048 149503999 149501952 71,3G 83 Linux
/dev/sda2 149506046 156301311 6795266 3,2G 5 Estendida
/dev/sda5 149506048 156301311 6795264 3,2G 82 Linux swap / Solaris
e
Disk /dev/sdb: 149,1 GiB, 160040803840 bytes, 312579695 sectors
Units: sectors of 1 * 512 = 512 bytes
Sector size (logical/physical): 512 bytes / 512 bytes
I/O size (minimum/optimal): 512 bytes / 512 bytes
Disklabel type: gpt
Disk identifier: E54F18E1-C467-4C8D-8AFE-94A25DE12E8D
-
GPT é a tabela de partições. O comando [sudo] "blkid" pode mostrar o tipo de sistema de arquivos de cada partição de cada disco.
-
sda1 ext4
sda5 swap
sdb ext4
-
Ubuntu server ou desktop?
-
Desktop
Desde o início uso o desktop devido às facilidades gráficas e depois instalo o LAMP
Fiz um teste. Criei uma pasta real chamada produtos1 dentro de /var/www/html e coloquei ali o foto.png. Alterei o caminho no script, e abriu normalmente. Isso me leva a analisar o link novamente.
Outro teste
foto.png estava com permissão 644. Mudei chmod 777 mas também não exibiu.
-
Outro teste:
Coloquei um link para ele mesmo e recebi a mensagem:
Forbidden
You don't have permission to access /produtos/foto.png on this server.
É algo com a permissão mesmo.
-
Certo. AppArmor e SELinux instalados por padrão, no Ubuntu 16.04 Desktop.
Você precisa verificar no perfil do apache2 (/usr/bin/httpd) para o AppArmor, se está liberado o acesso a partir do caminho desse arquivo.
-
em /usr/bin não tem httpd...
Sobre o SELinux:
sestatus
O programa 'sestatus' não está instalado no momento. Você pode instalá-lo digitando:
sudo apt install policycoreutils
Sobre o AppArmor
sudo apparmor_status
apparmor module is loaded.
22 profiles are loaded.
22 profiles are in enforce mode.
/sbin/dhclient
/usr/bin/evince
/usr/bin/evince-previewer
/usr/bin/evince-previewer//sanitized_helper
/usr/bin/evince-thumbnailer
/usr/bin/evince-thumbnailer//sanitized_helper
/usr/bin/evince//sanitized_helper
/usr/bin/ubuntu-core-launcher
/usr/lib/NetworkManager/nm-dhcp-client.action
/usr/lib/NetworkManager/nm-dhcp-helper
/usr/lib/connman/scripts/dhclient-script
/usr/lib/cups/backend/cups-pdf
/usr/lib/lightdm/lightdm-guest-session
/usr/lib/lightdm/lightdm-guest-session//chromium
/usr/sbin/cups-browsed
/usr/sbin/cupsd
/usr/sbin/cupsd//third_party
/usr/sbin/ippusbxd
/usr/sbin/mysqld
/usr/sbin/tcpdump
webbrowser-app
webbrowser-app//oxide_helper
-
Veja qual é o nome do arquivo que executa o apache; pode ser apache mesmo. Depois procure por ele no diretório de configuração do AppArmor pra verificar qual é o seu perfil de acesso.
-
Chegando lá.
Achei um /usr/sbin/apache2. Creio (?) que este arquivo execute o Apache2. Tentei abri-lo com Nano, mas está em formato não compreensível.
Na pasta /etc/apparmor.d/ que parece ser onde ficam as configurações do AppArmor, Tem uma pasta chamada abstractions, onde encontrei um arquivo chamado apache2-common.
Dentro dele fiquei tentado a descomentar uma linha que diz:
# Allow apache to send us signals by default
signal (receive) peer=/usr/sbin/apache2,
Por acaso seria isso?
-
Não.
Procure pelas configurações que definem os arquivos que o apache pode acessar.
-
Enquanto isso.. você promete que não ficará com raiva de mim após responder à minha pergunta?
Você lembrou de ativar a opção "FollowSymLinks" na configuração do seu Apache? :-[ ::)
-
hehe, nem sabia da existência do FollowSymLinks.
Em qual arquivo d configuração ele fica?
Parece ser uma diretiva que pod ser colocada em algum lugar, tipo:
<Directory "/usr/local/httpd/htdocs">
Options Indexes FollowSymLinks
</Directory>
Mas onde fica, ou onde coloco isso? Em usr/local não tem httpd.
Tem aquelas pastas com nomes parecidos, tipo /etc/apache2/sites-enabled/000-default. Não sei se é ali, ou em qual delas.
-
Há algum arquivo em /etc/apache2/sites-enabled/ ?
-
Ali tem um 000-defaul.conf que é um link para /sites-available/000-default.conf
<VirtualHost *:80>
# The ServerName directive sets the request scheme, hostname and port that
# the server uses to identify itself. This is used when creating
# redirection URLs. In the context of virtual hosts, the ServerName
# specifies what hostname must appear in the request's Host: header to
# match this virtual host. For the default virtual host (this file) this
# value is not decisive as it is used as a last resort host regardless.
# However, you must set it for any further virtual host explicitly.
#ServerName www.example.com
ServerAdmin webmaster@localhost
DocumentRoot /var/www/html
# Available loglevels: trace8, ..., trace1, debug, info, notice, warn,
# error, crit, alert, emerg.
# It is also possible to configure the loglevel for particular
# modules, e.g.
#LogLevel info ssl:warn
ErrorLog ${APACHE_LOG_DIR}/error.log
CustomLog ${APACHE_LOG_DIR}/access.log combined
# For most configuration files from conf-available/, which are
# enabled or disabled at a global level, it is possible to
# include a line for only one particular virtual host. For example the
# following line enables the CGI configuration for this host only
# after it has been globally disabled with "a2disconf".
#Include conf-available/serve-cgi-bin.conf
</VirtualHost>
# vim: syntax=apache ts=4 sw=4 sts=4 sr noet
-
É nesse arquivo que tem que ser incluído. Ajuste a diretiva "Directory" pra apontar pro "DocumentRoot".
-
Desculpe o desconhecimento de causa, mas onde exatamente?
Incluir no
/etc/apache2/sites-enabled/000-default.conf ou no
/etc/apache2/sites-available/000-default.conf ?
as linhas:
<Directory "/var/www/html">
Options Indexes FollowSymLinks
</Directory>
?
-
Qualquer lugar depois da diretiva "<VirtualHost ...>" e antes de "</VirtualHost>".
-
:-[
Coloquei com sudo nano
<Directory "/var/www/html">
Options Indexes FollowSymLinks
</Directory>
em
/etc/apache2/sites-available/000-default.conf
que é o arquivo mesmo, não é link.
Forbidden
You don't have permission to access /produtos/foto.png
Será qem alguma opção -R recursiva para incluir subdiretórios?
-
Reiniciou o apache após a alteraçao? "sudo apache2ctl graceful"
Acompanhe os logs do apache (/var/log/apache2/access_log e /var/log/apache2/error_log) pra ver o resultado dos acessos.
-
Access log:
192.168.1.200 - - [16/Feb/2017:17:36:07 -0200] "GET /produtos/10/10.png HTTP/1.1" 403 522 "http://192.168.1.200/produtos.php" "Mozilla/5.0 (X11; Ubuntu; Linux x86_64; rv:51.0) Gecko/20100101 Firefox/51.0"
Deixei como está na real. Nas trocas de mensagens anteriores apenas simplifiquei para foto.png
Error.log
[Thu Feb 16 17:36:07.306785 2017] [:error] [pid 1289] [client 192.168.1.200:47392] PHP Notice: Undefined index: exist in /var/www/html/produtos.php on line 171, referer: http://192.168.1.200/produtos.php
[Thu Feb 16 17:36:07.360695 2017] [core:error] [pid 1289] [client 192.168.1.200:47392] AH00037: Symbolic link not allowed or link target not accessible: /var/www/html/produtos, referer: http://192.168.1.200/produtos.php
Tinha reiniciado a máquina inteira antes disso
-
... devia ter te pedido os logs desde o início. Mea culpa.
Estava com o AppArmor na cabeça, por conta de outro caso que estou acompanhando.
O erro é bem claro.
Confirme que todo o caminho real do arquivo tenha direito de execução pública. Na dúvida, o comando "namei -om <caminho completo do arquivo>" mostra todas as permissões no caminho.
-
Não há uma opção que englobe os subdiretórios?
$ namei -om /var/www/html/produtos
f: /var/www/html/produtos
drwxr-xr-x root root /
drwxr-xr-x root root var
drwxr-xr-x root root www
drwxr-xr-x mauro mauro html
lrwxrwxrwx mauro mauro produtos -> /media/mauro/89e802a4-ed01-4151-a7bd-9d9f36a77b89/produtos
drwxr-xr-x root root /
drwxr-xr-x root root media
drwxr-x--- root root mauro
89e802a4-ed01-4151-a7bd-9d9f36a77b89 - No such file or directory
Se não, precisaria montar uma diretiva para cada subpasta que está dentro de produtos, por exemplo. E podem ser centenas
-
OOOOOpa. Que erro de "No such file or directory" é esse?
-
Boa pergunta.
Para deixar tudo funcionando, bastaria pegar todos os dados que estão no diretório para onde o link aponta e colar dentro da pasta /var/www/html. Vai funcionar.
Mas mantenho a conversa neste tópico para aprender mesmo.
-
Esse HD é fixo? Se for, é melhor você fixar o ponto de montagem dele também.
-
Sim, é fixo.
Reparei que no Nautilus aparece aquele ícone para ejetar midia (um triângulo) ao lado do nome dele, o qual não mostra como "89e802a4-ed01-4151-a7bd-9d9f36a77b89" , mas apenas como "Volume 160GB".
Pelo gparted:
Partição: /dev/sdb1 com uma chave ao lado
Nome: slavehd
Sistema de arquivos: ext4
Ponto de montagem: /media/89e802a4-ed01-4151-a7bd-9d9f36a77b89
Flags: (vazio)
-
Você pode colocar o caminho da partição (/dev/sdb1) ou o seu UUID (que provavelmente é "89e802a4-ed01-4151-a7bd-9d9f36a77b89", mas vc pode confirmar com o comando "sudo blkid") no arquivo /etc/fstab, de forma que o sistema sempre o monte num lugar pré-determinado por você. Por exemplo, "/media/sistema" ficaria legal.
Algo assim:
uuid=89e802a4-ed01-4151-a7bd-9d9f36a77b89 /media/sistema defaults,auto 0 0
Seguido dos comandos "sudo mkdir -p /media/sistemas" e "mount /media/sistemas".
-
sudo blk
/dev/sdb1: UUID="89e802a4-ed01-4151-a7bd-9d9f36a77b89" TYPE="ext4" PARTLABEL="slavehd" PARTUUID="f18a7c58-2d0c-46e4-a8c4-3afd59184059"
Para criar, se eu fizer um
sudo mkdir -p /media/sistemas
Estarei criando outro diretório. Ficariam os dois, o /media/89e802..." e o "/media/sistemas", correto? Não teria que detonar o primeiro? E como indicar que é o disco slavehd?
Para montar, se eu fizer um
"mount /media/sistemas".
Isso só vai montar na primeira abertura. Se desligar a máquina ele volta montado?
E, sobre a questão principal, talvez resolva o problema de vez.
Testaremos logo após.
-
sudo blk
/dev/sdb1: UUID="89e802a4-ed01-4151-a7bd-9d9f36a77b89" TYPE="ext4" PARTLABEL="slavehd" PARTUUID="f18a7c58-2d0c-46e4-a8c4-3afd59184059"
Para criar, se eu fizer um
sudo mkdir -p /media/sistemas
Estarei criando outro diretório. Ficariam os dois, o /media/89e802..." e o "/media/sistemas", correto? Não teria que detonar o primeiro?
Me parece que o outro foi criado automaticamente. Talvez seja removido automaticamente também.
E como indicar que é o disco slavehd?
Não se indica, pois não é preciso indicar.
O que pode acontecer é que, por algum motivo daqueles que só Deus entende, pode ser que depois de amanhã seu disco "/dev/sdb" apareça como "/dev/sde" ou "/dev/hd0s3", fazendo a partição "/dev/sdb1" virar "/dev/sde1" ou "/dev/hd0s3p1".
Mas veja só que lindo, ela vai continuar sendo encontrada no mesmo "UUID=89e802a4-ed01-4151-a7bd-9d9f36a77b89" até que você a formate.
Para montar, se eu fizer um
"mount /media/sistemas".
Isso só vai montar na primeira abertura. Se desligar a máquina ele volta montado?
Pra voltar montado, vc usa a opção "auto". Ou uma opção que a inclua, como a opção "defaults" que eu passei. Se não me engano, "defaults" é um apelido para "auto,atime,rw" e mais algumas opções obscuras. Pelo contrário, vs só precisa se preocupar se não quiser que seja montado automaticamente (mudando as opções de montagem para "defaults,noauto" ou "defaults,hotswap").
E, sobre a questão principal, talvez resolva o problema de vez.
Testaremos logo após.
Dedos cruzados aqui.
-
Um breve resumo aqui.
Ao fazer
sudo mkdir -p /media/hd160
pelo Nautilus, sumiu aquele botão com um triângulo de mídia removível. Ao passar o mouse sobre ele, aquel mensagem curta que se sobrepõe é "Monta e abre volume 160 GB"
Pelo terminal
Em /media ficaram dois diretórios:
/media/hd160
/media/mauro/89e802a4-ed01-4151-a7bd-9d9f36a77b89
Pelo gparted
O sdb1 continuou com ponto de montagem /media/mauro/89e802a4-ed01-4151-a7bd-9d9f36a77b89
Retorno de mount /media/hd160 vem:
mount: can't find /media/hd160 in /etc/fstab
Também testei esta opção com sudo. mesmo retorno
-
Mas você modificou o seu arquivo /etc/fstab ?
-
No fstab não mostra o sdb
# /etc/fstab: static file system information.
#
# Use 'blkid' to print the universally unique identifier for a
# device; this may be used with UUID= as a more robust way to name devices
# that works even if disks are added and removed. See fstab(5).
#
# <file system> <mount point> <type> <options> <dump> <pass>
# / was on /dev/sda1 during installation
UUID=caf9f2b5-86f0-4ce9-8e1a-b04676ecdbc7 / ext4 errors=remount-ro 0 1
# swap was on /dev/sda5 during installation
UUID=fec51e43-1f40-4fbf-b23f-78f5854aabbe none swap sw 0 0
-
Experimente desmarcar lá no Disks a opção de "Montar ao inicializar", depois deixa incluido manualmente apenas no fstab.
No Disks as opções estão meio que escondidas dentro do ícone da engrenagem, logo abaixo do gráfico dos volumes.
Só cuidado para não detonar os volumes.
-
Foi bom ter olhado em disks.
A opção montar ao inicializar estava desmarcada. Alterei a opção, fiz um reboot, e abaixo está o fstab.
# <file system> <mount point> <type> <options> <dump> <pass>
# / was on /dev/sda1 during installation
UUID=caf9f2b5-86f0-4ce9-8e1a-b04676ecdbc7 / ext4 errors=remount-ro 0 1
# swap was on /dev/sda5 during installation
UUID=fec51e43-1f40-4fbf-b23f-78f5854aabbe none swap sw 0 0
/dev/disk/by-uuid/89e802a4-ed01-4151-a7bd-9d9f36a77b89 /mnt/89e802a4-ed01-4151-a7bd-9d9f36a77b89 auto nosuid,nodev,nofail,x-gvfs-show 0 0
A última linha não tinha antes.
-
O que deveria mudar no arquivo fstab?
-
O que deveria mudar no arquivo fstab?
No fstab não parece ser necessário alterar nada, sobremodo se concretamente a partição está de fato montada como se queria que montasse, o que pode ser confirmado pelo comando mount.
Embora não tenha lido extensiva e detalhadamente o tópico, apenas uma vista rápida, sem muita atenção, parece que (post #26) se o link simbólico está apontando em:
lrwxrwxrwx mauro mauro produtos -> /media/mauro/89e802a4-ed01-4151-a7bd-9d9f36a77b89/produtos
Dificilmente dará certo (post #38) com a partição sendo montada em:
/dev/disk/by-uuid/89e802a4-ed01-4151-a7bd-9d9f36a77b89 /mnt/89e802a4-ed01-4151-a7bd-9d9f36a77b89 auto nosuid,nodev,nofail,x-gvfs-show 0 0
Apague e refaça o link simbólico conforme está indicado em fstab, depois acompanhe o log novamente, como mencionado pelo "zekkerj" no post #23.
-
Antes de qualquer alteração, pelo Nautilius,em propriedades:
Link (quebrado) (inode/symlink)
/media/mauro/89e802a4-ed01-4151-a7bd-9d9f3...
58 bytes
Onde ficou no Nautilus o /media/hd160 que criamos antes, e a pasta produtos que criei dentro dele?
Aparece apenas o "Computador 160 GB" na barra da esquerda (com aquele botão de ejetar) e dentro dela o conteúdo que ali coloquei.
Adiantando, removi o link antigo e criei como:
ln -s /media/hd160/produtos
-
Não consigo ver no Nautilus o hd160 criado. só chego lá navegando por cd/media/hd160.
O hd pela instalação default, visto por disks, está como:
ponto de montagem:
/mnt/89e802a4-ed01-4151-a7bd-9d9f3...
identificado como
/dev/disk/by-uuid/89e802a4-ed01-4151-a7bd-9d9f3...
-
Não consigo ver no Nautilus o hd160 criado. só chego lá navegando por cd/media/hd160.
O hd pela instalação default, visto por disks, está como:
ponto de montagem:
/mnt/89e802a4-ed01-4151-a7bd-9d9f3...
identificado como
/dev/disk/by-uuid/89e802a4-ed01-4151-a7bd-9d9f3...
O HD quando é incluido no /etc/fstab pra ser montado automaticamente na inicialização não é mais reconhecido pelo o Nautillus como um dispositivo a ser montado. Lembre-se, o sistema já o montou automaticamente na inicialização num ponto de montagem pré-determinado. O nautilus não precisa mais reconhecer e montar o dispositivo. Captou a mensagem?
-
King, não captei
Gostaria que aparecesse
:o
-
Ou ele aparece no /etc/fstab pra ser montado ou aparece no Nautilus. Nos dois não rola.
-
É um ou outro. Não precisa mais aparecer lá, pq já é montado automaticamente no boot.
-
Achei uma explicação interessante na web, que talvez ainda esteja atual na versão 16.04
http://meupinguim.com/entendendo-arquivo-fstab-linux/
Bom, acho que trocamos bastante informações sobre este tópico. Vou marcá-lo como resolvido. Vlw.