Beruflich Dokumente
Kultur Dokumente
1.Ficheiro /etc/httpd/conf/httpd.conf
# ServerRoot: The top of the directory tree under which the server's configuration, error, and log files
are kept.
# Do not add a slash at the end of the directory path. If you point ServerRoot at a non-local disk, be sure
to specify a local
# disk on the Mutex directive, if file-based mutexes are used. If you wish to share the same ServerRoot
for multiple httpd
# daemons, you will need to change at least PidFile.
ServerRoot "/etc/httpd"
# Listen: Allows you to bind Apache to specific IP addresses and/or ports, instead of the default. See also
the
# <VirtualHost> directive. Change this to Listen on specific IP addresses as shown below to prevent
Apache from
# glomming onto all bound IP addresses.
#Listen 12.34.56.78:80
Listen 80
# User/Group: The name (or #number) of the user/group to run httpd as. It is usually good practice to
create a dedicated
# user and group for running httpd, as with most system services.
User apache
Group apache
# ServerAdmin: Your address, where problems with the server should be e-mailed. This address appears
on some
# server-generated pages, such as error documents. e.g. admin@your-domain.com
ServerAdmin root@localhost
# DocumentRoot: The directory out of which you will serve your documents. By default, all requests are
taken from this
# directory, but symbolic links and aliases may be used to point to other locations.
DocumentRoot "/var/www/html"
# The location and format of the access logfile (Common Logfile Format). If you do not define any access
logfiles
# within a <VirtualHost> container, they will be logged here. Contrariwise, if you *do* define per-
<VirtualHost>
# access logfiles, transactions will be logged therein and *not* in this file.
CustomLog "logs/access_log" common
# ScriptAlias: This controls which directories contain server scripts. ScriptAliases are essentially the same
as Aliases,
# except that documents in the target directory are treated as applications and run by the server when
requested
# rather than as documents sent to the client. The same rules about trailing "/" apply to ScriptAlias
directives as to Alias.
ScriptAlias /cgi-bin/ "/var/www/cgi-bin/"
# DirectoryIndex: sets the file that Apache will serve if a directory is requested.
<IfModule dir_module>
DirectoryIndex index.html
</IfModule>
<VirtualHost 10.254.0.2>
ServerName server2.mpf.com
DocumentRoot /www/docs/
ErrorLog logs/server2-error_
CustomLog logs/server2-access_
</VirtualHost>
Onde Pedidos HTTP efectuados ao endereço 10.254.0.1 darão acesso aos documentos da directoria
/www/docs/server1, enquanto que os pedidos efectuados ao endereço 10.254.0.2 darão
acesso aos documentos da directoria /www/docs/server2.
As directivas de configuração que aparecem dentro das declarações “VirtualHost” são válidas no âmbito
do respectivo Virtual Host (no exemplo os logs de acessos e erros são mantidos em ficheiros separados
para os dois Virtual Hosts).
Neste exemplo os dois endereços seriam registados no DNS com os hostnames correspondentes e a
máquina seria configurada para responder por ambos os endereços (na mesma interface de Rede ou em
interfaces separadas).
Este método possui a desvantagem óbvia de gastar endereços IP, o que no caso de Servidores ligados à
Internet pode ser problemático, dado os endereços oficiais serem em geral um recurso escasso.
Neste exemplo começamos por declarar que o Servidor tem configurados Virtual Hosts por nome, para o
endereço 10.254.0.1 (directiva NameVirtualHost).
Dado que os Virtual Hosts utilizam o mesmo endereço o Servidor Apache recebe pedidos apenas nesse
endereço IP. O Apache distingue os pedidos efectuados a ambos os Virtual Host pela informação contida
no próprio pedido HTTP (pelo URL utilizada no pedido).
3. Definição de virtualhosts 2
Neste cenário dois nomes de domínio seriam associados no DNS ao mesmo endereço IP, um IP com dois
A records (nomes de domínio) ou como CNAME de outro domínio
<VirtualHost *:80>
#Este primeiro host da lista é também o host por omissão em *:80
ServerName www.pagina.com
ServerAlias pagina.com
DocumentRoot "/www/domain"
</VirtualHost>
<VirtualHost *:80>
ServerName outra.pagina.com
DocumentRoot "/www/otherdomain"
</VirtualHost>
É possível definir o inverso caso tenhamos habilitado essa funcionalidade por omissão por – em vez de +
no Indexes.
DHCP
é um protocolo que permite a obtenção de endereços IP e outra informação de rede, por parte de clientes,
de forma dinâmica e automática.
O DHCP é particularmente adequado a máquinas que mudam frequentemente de localização na Rede
(como acontece tipicamente com computadores portáteis) mas pode ser utilizado igualmente para a
configuração de servidores – atribuindo endereços estáticos – e para conseguir gerir a configuração IP de
todas as máquinas da rede local a partir de um ponto centralizado.
O servidor mantém uma lista dos endereços IP que pode atribuir e uma lista com os endereços IP
atribuídos (ficheiro dhcpd.leases).
Os endereços são atribuídos por um dado período (lease). Findo esse período não podem ser utilizados
pelos clientes.
O servidor pode ser configurado para atribuir determinado endereço a determinada máquina.
Inicialmente o cliente envia por broadcast uma mensagem DHCP Discover (UDP, porto 67). Como o
cliente não possui ainda informação relativa à rede local, esta mensagem é enviada usando os endereços
0.0.0.0 (origem) e 255.255.255.255 (destino).
Um ou vários servidores respondem com uma mensagem DHCP Offer (UDP, porto 68). Esta mensagem
contém o endereço IP que o servidor oferece ao cliente, assim como a máscara de rede, endereço IP do
servidor e a duração da lease (entre outros parâmetros). O servidor reserva o endereço que ofereceu ao
cliente até que o aceite/rejeite ou até que ocorra um timeout.
O cliente selecciona um dos endereços “oferecidos” e envia uma mensagem DHCP Request por
broadcast. Esta mensagem identifica o endereço escolhido e o servidor que ofereceu esse endereço. O
envio desta mensagem por broadcast permite que os restantes servidores libertem os endereços
reservados.
Um endereço atribuído a um cliente pelo servidor DHCP é designado por lease. Cada lease tem associado
um determinado tempo de validade. O servidor DHCP mantém um registo de todos as leases e
respectivos tempos de validade.
A meio do tempo de expiração da lease o cliente tenta renovar o seu endereço, enviando uma mensagem
DHCP Request ao mesmo servidor. Caso não consiga renovar o endereço irá tentar novamente mais tarde,
e caso continue a não conseguir tratará de pedir uma nova configuração.
Normalmente os clientes DHCP utilizados na obtenção de configurações de Rede garantem que os
parâmetros de configuração obtidos ficam activos na máquina de forma persistente durante todo o período
de validade da lease (mesmo entre reboots).
O tempo de validade das leases é um dos parâmetros mais importantes de configuração. Este tempo deve
ser decidido tendo em conta vários factores, como o número de endereços disponíveis para atribuição, o
número médio de horas de ligação à Rede dos utilizadores com computadores portáteis, etc. Valores mal
calculados para o tempo de validade das leases podem levar rapidamente ao esgotamento de endereços.
servidor DHCP (/sbin/dhcpd).
• cliente DHCP (/sbin/dhclient).
• Relay Agent DHCP (/sbin/dhcrelay).
• ficheiro de configuração do servidor (/etc/dhcp/dhcpd.conf)
• Exemplo de ficheiro de configuração:
/usr/share/doc/dhcp-4.2.5/dhcpd.conf.example
• Ficheiro com leases atribuídas:
/var/lib/dhcp/dhcpd.leases
1. Config no cliente
Por exemplo no ficheiro /etc/sysconfig/network-scripts/cfg-eth0
DEVICE=eth0
BOOTPROTO=dhcp
ONBOOT=yes
2. Config no server
/etc/dhcpd.conf
option domain-name "dhcp.marcopauloferreira.com";
option domain-name-servers 1.1.1.1, 8.8.8.8;
option time-servers ntp.tempoviainternet.exemplo.com;
option ntp-servers ntp1.marcopauloferreira.com, ntp2.marcopauloferreira.com;
subnet 1.10.100.0 netmask 255.255.255.0
{ # Pesquisa
range 1.10.100.0 1.10.100.20; # gama dinâmica
default-lease-time 86400; # 24h de tempo de expiração
max-lease-time 90000; # 25h de tempo máximo de expiração
option subnet-mask 255.255.255.0;
option broadcast-address 1.10.100.255;
option routers 1.10.100.254;
host sherlock1
{
hardware ethernet 00:50:04:0a:86:db;
fixed-address 1.10.100.50;
}
}
3. Exemplo de so config estática
subnet 1.10.200.0 netmask 255.255.255.0
{ # Teste
deny unknown-clients;
default-lease-time 28800; # 8h de tempo de expiração
max-lease-time 36000; # 10h de tempo máximo de expiração
option subnet-mask 255.255.255.0;
option broadcast-address 1.10.200.255;
option routers 1.10.200.254;
host watson
{
hardware ethernet 00:02:3F:72:83:CE;
fixed-address 1.10.200.20;
}
host igor
{
hardware ethernet 00:E0:4C:39:00:2F;
fixed-address 1.10.200.29;
}
}
4. Principais commandos e parametros
GROUP: permite aplicar um conjunto de parâmetros e declarações a conjuntos de clientes ou sub-redes;
HOST: define parâmetros e declarações específicas a um determinado host;
SUBNET: permite aplicar um conjunto de parâmetros e declarações aos clientes de determinada sub-
rede;
RANGE: define a gama de endereços que podem ser atribuídos aos clientes.
ALWAYS-REPLY-RFC1048: usado para clientes que só entendem o protocolo BOOTP.
DEFAULT-LEASE-TIME: tempo de ‘lease’ por defeito;
FIXED-ADDRESS: usado nas declarações ‘host’; especifica a atribuição de um endereço fixo (usado em
conjunto com o parâmetro ‘hardware’);
HARDWARE: identifica uma dada máquina através do seu endereço MAC.
MAX-LEASE-TIME: tempo máximo de ‘lease’.
Broadcast-address: endereço de broadcast na sub-rede dos clientes.
Domain-name: nome do domínio local.
Domain-name-servers: lista dos servidores de DNS a usar pelos clientes.
Host-name: string usada para identificar o nome do cliente.
routers: lista de routers a usar pelos clientes, por ordem de preferência.
Subnet-mask: máscara de sub-rede a usar pelos clientes.
1. Tabela de inodes
A tabela de inodes contém todos os inodes e é criada quando o Sistema de ficheiros é criado também
(com mkfs por exemplo). Pode usar-se o commando df -i para ver quantos inodes estão usados e estão
livres num sistema de ficheiros montado.
root@rhel53 ~# df -i
Filesystem Inodes IUsed IFree IUse% Mounted on
/dev/mapper/VolGroup00-LogVol00
4947968 115326 4832642 3% /
/dev/hda1 26104 45 26059 1% /boot
tmpfs 64417 1 64416 1% /dev/shm
/dev/sda1 262144 2207 259937 1% /home/project42
/dev/sdb1 74400 5519 68881 8% /home/project33
/dev/sdb5 0 0 0 - /home/sales
/dev/sdb6 100744 11 100733 1% /home/research
Aqui pode ver-se a utilização de inodes para vários sistemas de ficheiros montados.
Não se vêm números para o /dev/sdb5 pois este é um sistema de ficheiros fat
Cada inode tem um número único (número de inode). Pode ver-se os números dos inodes com o
comando ls -li (first number que aparece represents inode)
817266 -rw-rw-r-- 1 paul paul 0 Feb 5 15:38 file1
Estes três ficheiros foram criados um após o outro pelo que obtiveram 3 inodes diferentes (primeira
coluna). Toda a informação visualizada com este ls está no inode, excepto o nome do ficheiro, que está
contido no directório.
2. Links Simbolicos
não se ligam aos inodes, mas criam um nome para mapeamento de nome. Os links simbólicos são criados
com ln -s. Tal como se pode ver abaixo, o links simbólicos obtém o seu próprio inode.
paul@RHELv4u4:~/test$ ln -s file2 symlink_to_file2
paul@RHELv4u4:~/test$ ls -li
817273 -rw-rw-r-- 1 paul paul 13 Feb 5 17:06 file1
817270 -rw-rw-r-- 2 paul paul 106 Feb 5 17:04 file2
817270 -rw-rw-r-- 2 paul paul 106 Feb 5 17:04 hardlink_to_file2
817267 lrwxrwxrwx 1 paul paul 5 Feb 5 16:55 symlink_to_file2 -> file2
As permissões num link simbólico não têm significado, visto que apenas as permissões do ficheiro alvo
são aplicáveis.
Os Hard links estão limitados às suas próprias partições (porque estes apontam para um inode), já os
simbólicos podem referenciar qualquer lugar (outros sistemas de ficheiros, até mesmo de redes)
Links podem ser removidos com o rm
Encontrar todos ficheiros terminados em .conf no directório actual (pwd) e subdirectórios do mesmo:
find . -name "*.conf"
Encontrar todos ficheiros do tipo ficheiro (não directório, pipe ou etc.) que termina em .conf:
find . -type f -name "*.conf"
Encontrar todos ficheiros que são mais recentes que o ficheiro file42.txt:
find . -newer file42.txt
Find também pode executar outro comando para todos os ficheiros encontrados. Este exemplo irá
procurar por ficheiros *.odf e copiá-los para /backup/:
find /data -name "*.odf" -exec cp {} /backup/ \;
Find também pode executar, após confirmação, outro comando para qualquer ficheiro encontrado. Este
exemplo irá remover todos os ficheiros *.odf caso o utilizador aprove para todos os ficheiros encontrados:
find /data -name "*.odf" -ok rm {} \;
encontrar todos links simbólicos? Find path -type l , por dono find path -user user
A ferramenta locate é muito diferente do find no sentido de que a mesma usa um índice para localizar
ficheiros. Isto é muito mais rápido do que percorrer todos os directórios, mas também significa que está
sempre desactualizado. Se o índice não existe ainda, então tem de criá-lo (como root no Red Hat
Enterprise Linux) com o comando updatedb.
[paul@RHEL4b ~]$ locate Samba
warning: locate: could not open database: /var/lib/slocate/slocate.db:...
warning: You need to run the 'updatedb' command (as root) to create th...
Please have a look at /etc/updatedb.conf to enable the daily cron job.
[paul@RHEL4b ~]$ updatedb
fatal error: updatedb: You are not authorized to create a default sloc...
[paul@RHEL4b ~]$ su -
Password:
[root@RHEL4b ~]# updatedb
[root@RHEL4b ~]
Crontab
O comando crontab pode ser usado para manter o ficheiro crontab. Cada utilizador pode ter o seu
próprio ficheiro crontab para agenda tarefas para uma altura específica. Essa altura pode ser especificada
nesta ordem: minuto, hora, dia do mês, mês e dia da semana.
Se um campo contém um asterisco (*), isto representa todos os valores desse campo.
Os utilizadores não devem editar o ficheiro directamente, devem sim usar o comando crontab -e que
usará o editor definido nas variáveis de ambiente EDITOR ou VISUAL. Os utilizadores podem ver as
suas próprias tabelas cron com o comando crontab -l.
O daemon crond do cron está a ler as tabelas cron, tendo em conta os ficheiros /etc/cron.allow e
/etc/cron.deny. Estes ficheiros funcionam da mesma forma que at.allow e at.deny. Quando o ficheiro
cron.allow existe, o seu username deve estar nele, caso contrário não poderá usar o cron. Quando o
ficheiro cron.allow não existe, o seu nome não pode estar contido no ficheiro cron.deny se quiser usar o
cron.
etc/crontab
O ficheiro /etc/crontab contém entradas de quando executar tarefas
horárias/diárias/semanais/mensais/anuais. Assemelhar-se-á ao conteúdo abaixo:
SHELL=/bin/sh
PATH=/usr/local/sbin:/usr/local/bin:/sbin:/bin:/usr/sbin:/usr/bin
20 3 * * * root run-parts --report /etc/cron.daily
40 3 * * 7 root run-parts --report /etc/cron.weekly
55 3 1 * * root run-parts --report /etc/cron.monthly
• /etc/cron.*
Os directórios mostrados abaixo, contém as tarefas que são executadas nas alturas agendadas em
/etc/crontab. O directório /etc/cron.d é para casos especiais,
para agendar tarefas que requerem controlo mais granular do que horário/diário/semanal/mensal.
paul@laika:~$ ls -ld /etc/cron.*
drwxr-xr-x 2 root root 4096 2008-04-11 09:14 /etc/cron.d
drwxr-xr-x 2 root root 4096 2008-04-19 15:04 /etc/cron.daily
drwxr-xr-x 2 root root 4096 2008-04-11 09:14 /etc/cron.hourly
drwxr-xr-x 2 root root 4096 2008-04-11 09:14 /etc/cron.monthly
drwxr-xr-x 2 root root 4096 2008-04-11 09:14 /etc/cron.weekly
Redirecionamento de output e input
A consola Bash tem 3 fluxos, recebe do stdin (fluxo 0), envia para o stdout (fluxo 1) e mensagens de erro
para o stderr (fluxo 2). O diagrama acima mostra uma interpretação dos 3 fluxos.
Tipicamente o teclado serve de stdin, enquanto que tanto o sdout como o stderr vão para o ecrã.
stdout pode ser redireccionado com o sinal de maior. Quando a linha for lida pela consola, o sinal > será
processado e a consola irá limpar/esvaziar o ficheiro. A notação > é de facto a abreviação de 1> (stdout
referenciado como fluxo 1).
[paul@RHELv4u3 ~]$ echo It is cold today!
It is cold today!
[paul@RHELv4u3 ~]$ echo It is cold today! > winter.txt
[paul@RHELv4u3 ~]$ cat winter.txt
It is cold today!
[paul@RHELv4u3 ~]$
Redireccionamento do stderr é feito com 2>. Isto pode ser muito útil para prevenir que as mensagens de
erro inundem o ecrã.
Redireccionamento do stdout para um ficheiro, e stderr para /dev/null. Escrever 1> é o mesmo que > :
[paul@RHELv4u3 ~]$ find / > allfiles.txt 2> /dev/null
[paul@RHELv4u3 ~]$
Para redireccionar tanto o stdout como o stderr para o mesmo ficheiro, use 2>&1.
[paul@RHELv4u3 ~]$ find / > allfiles_and_errors.txt 2>&1
[paul@RHELv4u3 ~]$
A notação &> irá pôr tanto o stdout como o stderr num fluxo apenas (para um ficheiro).
paul@debian7:~$ rm file42 &> out_and_err
paul@debian7:~$ cat out_and_err
rm: cannot remove ‘file42’: No such file or directory
paul@debian7:~$ echo file42 &> out_and_err
paul@debian7:~$ cat out_and_err
file42
paul@debian7:~$
Redireccionar o stdin é feito com < (abreviação de 0<).
[marco@PRCSVR ~]$ cat < text.txt
One
two
[marco@PRCSVR ~]$ grep two < text.txt
two
[marco@PRCSVR ~]$
O here document (algumas vezes chamado here-is-document) é uma forma de adicionar input até que
uma certa sequência (tipicamente EOF) é encontrada. O
marcador EOF pode ser digitado literalmente ou através de Ctrl-D.
[paul@RHEL4b ~]$ cat <<EOF > text.txt
> one
> two
> EOF
[paul@RHEL4b ~]$ cat text.txt
one
two
[paul@RHEL4b ~]$ cat <<brol > text.txt
> brel
> brol
[paul@RHEL4b ~]$ cat text.txt
brel
[paul@RHEL4b ~]$
A here string pode ser usada para passar strings a um comando. O resultado é o mesmo que echo string
| command (mas há menos um processo a correr).
[mferreira @procsvr]~# base64 <<< marco.ferreira
bWFyY28uZmVycmVpcmEK
[mferreira @ procsvr]~# echo marco.ferreira | base64
bWFyY28uZmVycmVpcmEK
[mferreira @ procsvr]~# base64 <<< bWFyY28uZmVycmVpcmEK
YldGeVkyOHVabVZ5Y21WcGNtRUsK
[mferreira @ procsvr]~# echo bWFyY28uZmVycmVpcmEK | base64
YldGeVkyOHVabVZ5Y21WcGNtRUsK
(Redirecionamento confuso) A consola vai ler a linha toda antes de aplicar o redireccionamento. A linha
seguinte é bem legível e está correcta:
cat winter.txt > snow.txt 2> errors.txt
Contudo, esta também está correcta mas menos legível:
2> errors.txt cat winter.txt > snow.txt
Até isto será percebido na perfeição pela consola.
< winter.txt > snow.txt 2> errors.txt cat
Permissions
1. As normal user, create a directory ~/permissions. Create a file owned by yourself in there.
mkdir ~/permissions ; touch ~/permissions/myfile.txt
2. Copy a file owned by root from /etc/ to your permissions dir, who owns this file now ?
cp /etc/hosts ~/permissions/
The copy is owned by you.
3. As root, create a file in the users ~/permissions directory.
(become root)# touch /home/username/permissions/rootfile
4. As normal user, look at who owns this file created by root.
ls -l ~/permissions
The file created by root is owned by root.
5. Change the ownership of all files in ~/permissions to yourself.
chown user ~/permissions/*
You cannot become owner of the file that belongs to root.
6. Make sure you have all rights to these files, and others can only read.
chmod 644 (on files)
chmod 755 (on directories)
7. With chmod, is 770 the same as rwxrwx--- ?
yes
8. With chmod, is 664 the same as r-xr-xr-- ?
No
9. With chmod, is 400 the same as r-------- ?
yes
10. With chmod, is 734 the same as rwxr-xr-- ?
no
12. Create a file as root, give only read to others. Can a normal user read this file ? Test writing to this
file with vi.
(become root)
# echo hello > /home/username/root.txt
# chmod 744 /home/username/root.txt
(become user)
vi ~/root.txt
13a. Create a file as normal user, give only read to others. Can another normal user read this file ? Test
writing to this file
with vi.
echo hello > file ; chmod 744 file
Yes, others can read this file
13b. Can root read this file ? Can root write to this file with vi ?
Yes, root can read and write to this file. Permissions do not apply to root.
14. Create a directory that belongs to a group, where every member of that group can read and write to
files, and create
files. Make sure that people can only delete their own files.
mkdir /home/project42 ; groupadd project42
chgrp project42 /home/project42 ; chmod 775 /home/project42
Sticky bit
You can set the sticky bit on a directory to prevent users from removing files that they do
not own as a user owner. The sticky bit is displayed at the same location as the x permission
for others. The sticky bit is represented by a t (meaning x is also there) or a T (when there
is no x for others).
root@RHELv4u4:~# mkdir /project55
root@RHELv4u4:~# ls -ld /project55
drwxr-xr-x 2 root root 4096 Feb 7 17:38 /project55
root@RHELv4u4:~# chmod +t /project55/
root@RHELv4u4:~# ls -ld /project55
drwxr-xr-t 2 root root 4096 Feb 7 17:38 /project55
root@RHELv4u4:~#
The sticky bit can also be set with octal permissions, it is binary 1 in the first of four triplets.
root@RHELv4u4:~# chmod 1775 /project55/
root@RHELv4u4:~# ls -ld /project55
drwxrwxr-t 2 root root 4096 Feb 7 17:38 /project55
root@RHELv4u4:~#
2. Criar a pasta
mkdir /home/user/public_html
chmod 711 /home/user
chown user:user /home/user/public_html
chmod 755 /home/unixmenuser/public_html
3. Remover complicações do SElinux
setsebool -P httpd_enable_homedirs true
chcon -R -t httpd_sys_content_t /home/user/public_html
4. Criar uma pagina html qualquer para testar
gedit /home/user/public_html/index.html (write some tags)
5. Test it!
Atraves do ip/~user
<directory /usr/local/docs>
options +Indexes
</directory>
Garantir que o s1pcx.isctem.com esteja a resolver para o computador local seja criando uma
zona dns ou definindo no ficheiro /etc/hosts no 127.0.0.1 adicionar s1pcx.isctem.com