Sie sind auf Seite 1von 13

Conceitos gerais

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>

2. Definição de virtualhosts por IP //dos slides


<VirtualHost 10.254.0.1>
ServerName server1.mpf.com
DocumentRoot /www/docs/
ErrorLog logs/server1-error_
CustomLog logs/server1-access_
</VirtualHost>

<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.

3. Definição de virtualhosts por nome


NameVirtualHost: 10.254.0.1
<VirtualHost 10.254.0.1>
ServerName server1.lgsr.dei.uc.pt
DocumentRoot /www/docs/server1
ErrorLog logs/server1-error_log
CustomLog logs/server1-access_log common
</VirtualHost>

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>

Recomenda-se o uso de endereço IP ao invés de um nome de host na directriz <VirtualHost>


Endereços IP específicos ou portas têm precedência sobre a sua equivalência no formato ”curinga”
É possível configurar o Apache para visualizar os ficheiros num directório, por exemplo para configurar a
listagem de ficheiros para um directório específico:
<Directory /usr/local/apache2/htdocs/listme>
Options +Indexes
</Directory>

É 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.

5. Opções de linha de comando


-d: modo de debug; o output vai para o syslog.
-D: usar como nome de domínio o nome fornecido pelo servidor
-h hostname: inclui o nome especificado nas mensagens enviadas pelo dhcpcd.
-H: usar como nome de host o nome fornecido pelo servidor
-k: matar o daemon dhcpcd.
-l leasetime: especifica o tempo de ‘lease’ pedido pelo cliente (em segundos).
-r: o cliente funciona como cliente BOOTP.
-R: não substituir o ficheiro /etc/resolv.conf pela informação de DNS fornecida pelo servidor de DHCP
Inodes
Um inode é uma estrutura de dados que contém metadados/metainformação de um ficheiro. Quando o
sistema de ficheiros guarda um novo ficheiro no disco
duro, este grava não apenas o conteúdo (dados) do ficheiro, mas também propriedades adicionais como o
nome do ficheiro, data de criação, permissões, dono
do ficheiro e algumas mais. Toda esta informação é guardada no inode do ficheiro.
O comando ls -l irá visualizar alguns dos conteúdos do inode
root@rhel53 ~# ls -ld /home/project42/
drwxr-xr-x 4 root pro42 4.0K Mar 27 14:29 /home/project42/

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

817267 -rw-rw-r-- 1 paul paul 0 Feb 5 15:38 file2


817268 -rw-rw-r-- 1 paul paul 0 Feb 5 15:38 file3

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

Find & Locate


O comando find pode ser muito útil no início de um pipe para encontrar ficheiros. Vejamos alguns
exemplos abaixo. Pode ser que queira adicionar 2>/dev/null às linhas de comando para evitar gerar muita
confusão devido ao excesso de conteúdo caso haja muitas mensagens de erro.
find /etc > etcfiles.txt
find / > allfiles.txt

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 do tipo directório que terminam em .bak:


find /data -type d -name "*.bak"

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

Encontrar ficheiros executáveis:


find /path/to/search -type f -executable/search -type f -executable

Encontrar coisas alteradas nas últimas 24 horas:


find /path/to/search -ctime -1
Encontrar ficheiros com mais de 31 dias e apagá-los:
find /path/to/search -mtime +31 -delete
Remover directórios vazios:
find /path/to/search -type d -exec rmdir --ignore-fail-on-non-empty {} + ;

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 ~]$

Note que a ordem de redireccionamentos é importante. Por exemplo, o comando:


ls > dirlist 2>&1
direcciona o standard output (file descriptor 1) e o standard error (file descriptor 2) para o ficheiro
dirlist, enquanto que o comando:
ls 2>&1 > dirlist
direcciona apenas o standard output para o ficheiro dirlist, porque o standard error fez uma cópia do
standard output antes do mesmo ser redireccionado para
dirlist.
Por omissão não é possível fazer grep ao stderr ao usar pipes na linha de commandos, porque apenas o
stdout é filtrado.
paul@debian7:~$ rm file42 file33 file1201 | grep file42
rm: cannot remove ‘file42’: No such file or directory
rm: cannot remove ‘file33’: No such file or directory
rm: cannot remove ‘file1201’: No such file or directory
com 2>&1 pode-se forçcar o stderr a ir para o stdout. Isto permite que o próximo comando no pipe actue
em ambos os fluxos.
paul@debian7:~$ rm file42 file33 file1201 2>&1 | grep file42
rm: cannot remove ‘file42’: No such file or directory

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:~#

Processo de criação de um virtualhost


1. Criar as pastas html e log
sudo mkdir -p /var/www/example.com/html
sudo mkdir -p /var/www/example.com/log
2. Mudar ownership e permissões das pastas
sudo chown -R $USER:$USER /var/www/example.com/html
sudo chmod -R 755 /var/www
3. Crie um html índex file na pasta html da pasta criada com qualquer coisa
sudo gedit /var/www/example.com/html/index.html
4. Criar directoria sites-available e sites-enabled no /etc/httpd se não existir
sudo mkdir /etc/httpd/sites-available /etc/httpd/sites-enabled
s
5. Fazer apache procurar por configurações de virtualhosts na pasta sites-enabled
Editar o ficheiro /etc/httpd/conf/httpd.conf e adicionar no fim a seguinte linha:
IncludeOptional sites-enabled/*.conf
6. Criar um virtualhost file no sites-available
sudo gedit /etc/httpd/sites-available/example.com.conf
e adicionar conteudo do virtualhost nele
<VirtualHost *:80>
ServerName www.example.com
ServerAlias example.com
DocumentRoot /var/www/example.com/html
ErrorLog /var/www/example.com/log/error.log
CustomLog /var/www/example.com/log/requests.log combined
</VirtualHost>
7. Linkar o ficheiro criado no sites-available para o sites-enabled através de link
symbolic
sudo ln -s /etc/httpd/sites-available/example.com.conf /etc/httpd/sites-
enabled/example.com.conf
8. Comandos adicionais para o SELinux não complicar
sudo setsebool -P httpd_unified 1
sudo semanage fcontext -a -t httpd_log_t "/var/www/example.com/log(/.*)?"
sudo restorecon -R -v /var/www/example.com/log

9. Fazer o restart do httpd


sudo systemctl restart httpd

Para funcionar precisamos adicionar uma zona no dns example.com


Criar pagina pessoal de utilizadores (userdir)
1. Editar o ficheiro /etc/httpd/conf/userdir.conf
Comentar a linha UserDir disabled user

Descomentar a linha UserDir public_html

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)

garantir que tenha as permissões certas


chmod 644 /home/user/public_html/index.html

5. Test it!
Atraves do ip/~user

EXERCICIO : Definir um alias que permita visualizar os documentos de


“/usr/local/docs“ via o URL http://s1pcx.isctem.com/docs.
1. Criar o ficheiro directory.conf no /etc/httpd/conf.d
2. Adicionar o seguinte conteúdo
Alias /docs /usr/local/docs

<directory /usr/local/docs>

options +Indexes

Require all granted

</directory>

/docs é a alias que estamos a criar enquanto que /usr/local/docs é o


directório que estamos a apontar

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

Das könnte Ihnen auch gefallen