This repository has been archived by the owner on Apr 2, 2024. It is now read-only.
-
Notifications
You must be signed in to change notification settings - Fork 79
/
Copy pathscript-01.sh
386 lines (360 loc) · 15.6 KB
/
script-01.sh
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
209
210
211
212
213
214
215
216
217
218
219
220
221
222
223
224
225
226
227
228
229
230
231
232
233
234
235
236
237
238
239
240
241
242
243
244
245
246
247
248
249
250
251
252
253
254
255
256
257
258
259
260
261
262
263
264
265
266
267
268
269
270
271
272
273
274
275
276
277
278
279
280
281
282
283
284
285
286
287
288
289
290
291
292
293
294
295
296
297
298
299
300
301
302
303
304
305
306
307
308
309
310
311
312
313
314
315
316
317
318
319
320
321
322
323
324
325
326
327
328
329
330
331
332
333
334
335
336
337
338
339
340
341
342
343
344
345
346
347
348
349
350
351
352
353
354
355
356
357
358
359
360
361
362
363
364
365
366
367
368
369
370
371
372
373
374
375
376
377
378
379
380
381
382
383
384
385
386
#!/bin/bash
# Autor: Robson Vaamonde
# Site: www.procedimentosemti.com.br
# Facebook: facebook.com/ProcedimentosEmTI
# Facebook: facebook.com/BoraParaPratica
# YouTube: youtube.com/BoraParaPratica
# Data de criação: 31/05/2016
# Data de atualização: 23/07/2020
# Versão: 0.13
# Testado e homologado para a versão do Ubuntu Server 16.04 LTS x64
# Kernel >= 4.4.x
#
# Instalação dos pacotes principais para a segunda etapa, indicado para a distribuição GNU/Linux Ubuntu Server 16.04 LTS x64
#
# NTP (Network Time Protocol) Servidor de Data/Hora
# KRB5 (Kerberos) Protocolo de Autenticação Segura
# NFS (Network File System) Protocolo de Transferência de Arquivos
# ACL (Access Control List) Permissões de Arquivos e Diretórios
# ATTR (Extended Attributes) Atributos Estendidos
#
# Após o reboot fazer as mudanças do arquivo /etc/fstab para suportar os recursos de ACL e XATTR EXT4
# vim /etc/fstab
# defaults,barrier=1
#
# Se tiver utilizando o sistema de arquivos BTRFS, deixar o padrão
# vim /etc/fstab
# defaults,subvol=@
#
# Após o reboot configurar o arquivo /etc/ntp.conf para atualizar data e hora dos servidores do NTP.br
# mv /etc/ntp.conf /etc/ntp.conf.old
# cp ntp.drift /var/lib/ntp/ntp.drift
# cp ntp.conf /etc/
#
# Na instalação fazer a criação do REALM do Kerberos
# REALM: PTI.INTRA
# SERVER: ptispo01dc01.pti.intra
# ADMIN: ptispo01dc01.pti.intra
# debconf-show krb5-config
#
# Configuração do NFS será feita no final do curso
#
# Utilizar o comando: sudo -i para executar o script
#
# Variável do caminho do Log dos Script utilizado nesse curso (VARIÁVEL MELHORADA)
# opções do comando cut: -d (delimiter), -f (fields)
# $0 (variável de ambiente do nome do comando)
LOG="/var/log/$(echo $0 | cut -d'/' -f2)"
#
# Variável da Data Inicial para calcular o tempo de execução do script (VARIÁVEL MELHORADA)
# opção do comando date: +%T (Time)
HORAINICIAL=$(date +%T)
#
# Variáveis para validar o ambiente, verificando se o usuário e "root", versão do ubuntu e kernel (VARIÁVEL MELHORADA)
# opções do comando id: -u (user)
# opções do comando: lsb_release: -r (release), -s (short),
# opões do comando uname: -r (kernel release)
# opções do comando cut: -d (delimiter), -f (fields)
# opção do shell script: piper | = Conecta a saída padrão com a entrada padrão de outro comando
# opção do shell script: acento crase ` ` = Executa comandos numa subshell, retornando o resultado
# opção do shell script: aspas simples ' ' = Protege uma string completamente (nenhum caractere é especial)
# opção do shell script: aspas duplas " " = Protege uma string, mas reconhece $, \ e ` como especiais
USUARIO=$(id -u)
UBUNTU=$(lsb_release -rs)
KERNEL=$(uname -r | cut -d'.' -f1,2)
#
# Verificando se o usuário é Root, Distribuição é >=16.04 e o Kernel é >=4.4 <IF MELHORADO)
# [ ] = teste de expressão, && = operador lógico AND, == comparação de string, exit 1 = A maioria dos erros comuns na execução
clear
if [ "$USUARIO" == "0" ] && [ "$UBUNTU" == "16.04" ] && [ "$KERNEL" == "4.4" ]
then
echo -e "O usuário é Root $USUARIO, continuando com o script..."
echo -e "Distribuição é >= $UBUNTU, continuando com o script..."
echo -e "Kernel é >= $KERNEL, continuando com o script..."
sleep 5
clear
else
echo -e "Usuário não é Root ($USUARIO) ou Distribuição não é >=16.04.x ($UBUNTU) ou Kernel não é >=4.4 ($KERNEL)"
echo -e "Caso você não tenha executado o script com o comando: sudo -i"
echo -e "Execute novamente o script $0 para verificar o ambiente e continuar com a instalação"
exit 1
fi
#
# Variáveis de configuração do Kerberos
REALM="PTI.INTRA"
SERVERS="ptispo01dc01.pti.intra"
ADMIN="ptispo01dc01.pti.intra"
NTP="a.st1.ntp.br"
#
# Exportando a variável do Debian Frontend Noninteractive para não solicitar interação com o usuário
export DEBIAN_FRONTEND="noninteractive"
#
# Script de instalação dos principais pacotes de rede e suporte ao sistema de arquivos (SCRIPT MELHORADO, REMOÇÃO DA TABULAÇÃO)
# opção do comando echo: -e (enable interpretation of backslash escapes), \n (new line)
# opção do comando hostname: -I (all IP address)
# opção do comando date: + (format), %d (day), %m (month), %Y (year 1970), %H (hour 24), %M (minute 60)
# opção do comando: &>> (redireciona a saída padrão, anexando)
echo -e "Início do script $0 em: `date +%d/%m/%Y-"("%H:%M")"`\n" &>> $LOG
#
echo -e "Usuário é `whoami`, continuando a executar o script $0"
echo
echo -e "Instalação dos principais pacotes de rede e suporte ao sistema de arquivos"
echo
echo -e "NTP (Network Time Protocol) Servidor de Data é Hora"
echo -e "KRB5 (Kerberos) Protocolo de Autenticação Segura"
echo -e "NFS (Network File System) Protocolo de Transferência de Arquivos"
echo -e "ACL (Access Control List) Permissões de Arquivos e Diretórios"
echo -e "ATTR (Extended Attributes) Atributos Estendidos"
echo -e "Configuração do FSTAB para suporte a ACL e XATTR"
echo
echo -e "Após o término do script $0 o Servidor será reinicializado"
echo
echo ============================================================ >> $LOG
echo -e "Atualizando as Listas do Apt-Get, aguarde..."
# Atualizando as listas do apt-get
# opção do comando: &>> (redireciona a saída padrão, anexando)
apt-get update &>> $LOG
echo -e "Listas Atualizadas com Sucesso!!!, continuando o script..."
echo
echo ============================================================ >> $LOG
echo -e "Atualizando o Sistema, aguarde..."
# Fazendo a atualização de todos os pacotes instalados no servidor
# opção do comando: &>> (redireciona a saída padrão, anexando)
# opção do comando apt-get: -o (option), -q (quiet), -y (yes)
apt-get -o Dpkg::Options::="--force-confold" upgrade -q -y --force-yes &>> $LOG
echo -e "Sistema Atualizado com Sucesso!!!, continuando o script..."
echo
echo ============================================================ >> $LOG
echo -e "Instalando as Dependências da Parte de Rede, aguarde..."
# Instalando os principais pacotes para o funcionamento correto dos serviços de rede
# opção do comando: &>> (redireciona a saída padrão, anexando)
# opção do comando apt-get: -y (yes), \ (bar left) quebra de linha na opção do apt-get
apt-get -y install ntp ntpdate build-essential libacl1-dev libattr1-dev libblkid-dev libgnutls-dev libreadline-dev \
python-dev libpam0g-dev python-dnspython gdb pkg-config libpopt-dev libldap2-dev dnsutils libbsd-dev docbook-xsl \
libcups2-dev nfs-kernel-server nfs-common acl attr debconf-utils screenfetch figlet sysv-rc-conf &>> $LOG
echo -e "Instalação das Dependências Feita com Sucesso!!!, continuando o script..."
echo
echo ============================================================ >> $LOG
echo -e "Configurando os parâmetros do apt-get para a instalação do Kerberos, aguarde..."
# Configurando o Debconf para a configurações do Kerberos trabalhar com Nointeractive
# Exibindo as configurações do Debconf do Kerberos
# opção do comando: &>> (redireciona a saída padrão, anexando)
# opção do comando: | (piper - conecta a saída padrão com a entrada padrão de outro comando)
echo "krb5-config krb5-config/default_realm string $REALM" | debconf-set-selections
echo "krb5-config krb5-config/kerberos_servers string $SERVERS" | debconf-set-selections
echo "krb5-config krb5-config/admin_server string $ADMIN" | debconf-set-selections
echo "krb5-config krb5-config/add_servers_realm string $REALM" | debconf-set-selections
echo "krb5-config krb5-config/add_servers boolean true" | debconf-set-selections
echo "krb5-config krb5-config/read_config boolean true" | debconf-set-selections
echo >> $LOG
debconf-show krb5-config >> $LOG
echo -e "Parâmetros configurado com sucesso!!!, continuando o script..."
echo
echo ============================================================ >> $LOG
echo -e "Instalando o Kerberos, aguarde..."
# Instalando o Kerberos
# opção do comando: &>> (redireciona a saída padrão, anexando)
# opção do comando apt-get: -y (yes),
apt-get -y install krb5-user krb5-config &>> $LOG
echo -e "Kerberos instalado com Sucesso!!!, continuando o script..."
echo
echo ============================================================ >> $LOG
echo -e "Limpando o Cache do Apt-Get, aguarde..."
# Limpando o diretório de cache do apt-get
# opção do comando: &>> (redireciona a saída padrão, anexando)
apt-get -y autoremove &>> $LOG
apt-get -y autoclean &>> $LOG
apt-get -y clean &>> $LOG
echo -e "Cache Limpo com Sucesso!!!, continuando o script..."
echo
echo ============================================================ >> $LOG
echo -e "Instalação dos principais software de rede feita com sucesso!!!, pressione <Enter> para continuar."
read
sleep 2
clear
echo ============================================================ >> $LOG
echo -e "Configurando o Serviço do Servidor NTPD, Pressione <Enter> para continuar"
echo
read
echo -e "Fazendo o Backup do arquivo ntp.conf, aguarde..."
# Fazendo o backup do arquivos de configuração do NTP Server
# opção do comando: &>> (redireciona a saída padrão, anexando)
# opção do comando mv: -v (verbose)
mv -v /etc/ntp.conf /etc/ntp.conf.old >> $LOG
echo -e "Backup do arquivo ntp.conf feito com sucesso!!!, continuando o script..."
sleep 2
echo
echo -e "Criando o arquivo ntp.drift, aguarde..."
# Copiando o arquivo ntp.drift
# Adicionando o conteúdo de 0.0 dentro do arquivo ntp.drift
# Alterando o dono e grupo de arquivo ntp.drift
# opção do comando: &>> (redireciona a saída padrão, anexando)
# opção do comando: > (redireciona a saída padrão (STDOUT))
# opção do comando cp: -v (verbose)
# opção do comando chown: -v (verbose)
cp -v conf/ntp.drift /var/lib/ntp/ntp.drift >> $LOG
echo 0.0 > /etc/ntp.drift
chown -v ntp.ntp /var/lib/ntp/ntp.drift >> $LOG
echo -e "Arquivo ntp.drift criado com sucesso!!!, continuando o script..."
sleep 2
echo
echo -e "Atualizando o arquivo ntp.conf, aguarde..."
# Copiando o arquivo de configuração do NTP Server
# opção do comando: &>> (redireciona a saída padrão, anexando)
# opção do comando cp: -v (verbose)
cp -v conf/ntp.conf /etc/ntp.conf >> $LOG
echo -e "Arquivo atualizado com sucesso!!!, continuando o script..."
sleep 2
echo
echo -e "Parando o serviço do ntp server, aguarde..."
# Parando o serviço do NTP Server para fazer a sua configuração
sudo service ntp stop
echo -e "Serviço parado com sucesso!!!, continuando o script..."
sleep 5
clear
echo -e "Editando o arquivo /etc/ntp.conf para acrescentar as informações de Servidores NTP"
echo -e "Pressione <Enter> para editar o arquivo"
read
sleep 2
# Editando o arquivo ntp.conf
vim /etc/ntp.conf
echo
echo -e "Arquivo ntp.conf editado com sucesso!!!"
echo -e "Pressione <Enter> para continuar"
read
sleep 2
clear
echo -e "Atualizando Data/Hora do Servidor utilizando ntpdate, aguarde..."
echo
# Atualizando data/hora do servidor NTP.br
# Iniciando o serviço do NTP Server
# opção do comando ntpdate: d (debug), q (query), u (unprivileged), v (verbose)
ntpdate -dquv $NTP
sudo service ntp start
echo
echo -e "Data/Hora atualizada com sucesso!!!, continuando o script..."
sleep 2
echo
echo -e "Verificação dos servidores NTP, aguarde..."
echo
# Verificando as informações de Servidores NTP e seu sincronismo
# opção do comando ntpq: p (print), n (all andress)
ntpq -pn
echo
echo -e "Verificação feita com sucesso!!!, continuando o script..."
sleep 2
echo
echo -e "Data/Hora do Hardware do servidor, aguarde..."
# Atualizando a data/hora do hardware com a data/hora do sistema operacional
# Verificando data/hora de hardware (BIOS)
hwclock --systohc
hwclock
sleep 2
echo
echo -e "Data/Hora do Sistema Operacional do servidor"
# Verificando data/hora de sistema operacional
date
sleep 2
echo
echo -e "NTP.CONF atualizado com sucesso!!!, pressione <Enter> para continuar com o script"
read
sleep 2
clear
echo ============================================================ >> $LOG
echo -e "Editando o arquivo /etc/fstab para acrescentar as informações de ACL e XATTR"
echo
echo -e "Informações de ACL e XATTR na Raiz, Var e no diretório Arquivos"
echo
echo -e "Linhas a serem editadas no arquivo /etc/fstab"
# Listando a linha 8
# opção do comando: | (piper - conecta a saída padrão com a entrada padrão de outro comando)
# opção do comando cat: -n (number)
# opção do comando sed: -n (quiet or silent)
echo -e "`cat -n /etc/fstab | sed -n '8p'`"
echo
# Listando a linha 9
echo -e "`cat -n /etc/fstab | sed -n '9p'`"
echo
# Listando a linha 12
echo -e "`cat -n /etc/fstab | sed -n '12p'`"
echo
echo -e "Informações a serem acrescentadas depois de ext4: defaults,barrier=1"
echo
echo -e "Se estiver utilizando o BTRFS, deixar o padrão"
echo -e "Pressione <Enter> para editar o arquivo"
echo
read
sleep 2
echo -e "Fazendo o backup do arquivo fstab, aguarde..."
# Fazendo o backup do arquivo fstab
# opção do comando: &>> (redireciona a saída padrão, anexando)
# opção do comando cp: -v (verbose)
cp -v /etc/fstab /etc/fstab.old >> $LOG
echo -e "Backup feito com sucesso!!!, continuando o script..."
sleep 2
echo -e "Editando o arquivo fstab, aguarde..."
# Editando o arquivo fstab
vim /etc/fstab
echo
echo -e "FSTAB atualizado com sucesso!!!, pressione <Enter> para continuar com o script"
read
sleep 2
clear
echo ============================================================ >> $LOG
echo -e "Editando o arquivo /etc/krb5.conf para acrescentar as informações SAMBA-4"
echo
echo -e "Linha a ser editada no arquivo /etc/krb5.conf"
echo -e "`cat -n /etc/krb5.conf | head -n2`"
echo
echo -e "Informações a serem acrescentadas depois de default_realm"
echo -e "Pressione <Enter> para editar o arquivo"
echo
read
sleep 2
echo -e "Fazendo o Backup do arquivo krb5.conf, aguarde..."
# Fazendo o backup do arquivo de configuração do Kerberos
# opção do comando: &>> (redireciona a saída padrão, anexando)
# opção do comando mv: -v (verbose)
mv -v /etc/krb5.conf /etc/krb5.conf.old >> $LOG
echo -e "Backup feito com sucesso!!!, continuando o script..."
sleep 2
echo
echo -e "Atualizando o arquivo krb5.conf, aguarde..."
#Atualizando o arquivo de configuração do Kerberos
# opção do comando: &>> (redireciona a saída padrão, anexando)
# opção do comando cp: -v (verbose)
cp -v conf/krb5.conf /etc/krb5.conf >> $LOG
echo -e "Atualizado com sucesso!!!, continuando o script..."
sleep 2
echo
echo -e "Editando o arquivo /etc/krb5.conf para acrescentar as informações de Servidores de Kerberos"
echo -e "Pressione <Enter> para editar o arquivo"
read
# Editando o arquivo de configuração do Kerberos
vim /etc/krb5.conf
echo
echo -e "KRB5.CONF atualizado com sucesso!!!, pressione <Enter> para continuar com o script"
read
sleep 2
clear
echo ============================================================ >> $LOG
echo -e "Fim do script $0 em: `date`" >> $LOG
echo
echo -e "Instalação das Dependências de Rede Feita com Sucesso!!!"
echo
# script para calcular o tempo gasto (SCRIPT MELHORADO, CORRIGIDO FALHA DE HORA:MINUTO:SEGUNDOS)
# opção do comando date: +%T (Time)
HORAFINAL=$(date +%T)
# opção do comando date: -u (utc), -d (date), +%s (second since 1970)
HORAINICIAL01=$(date -u -d "$HORAINICIAL" +"%s")
HORAFINAL01=$(date -u -d "$HORAFINAL" +"%s")
# opção do comando date: -u (utc), -d (date), 0 (string command), sec (force second), +%H (hour), %M (minute), %S (second),
TEMPO=$(date -u -d "0 $HORAFINAL01 sec - $HORAINICIAL01 sec" +"%H:%M:%S")
# $0 (variável de ambiente do nome do comando)
echo -e "Tempo gasto para execução do script $0: $TEMPO"
echo -e "Pressione <Enter> para concluir o processo e reinicializar o Servidor."
# opção do comando date: + (format), %d (day), %m (month), %Y (year 1970), %H (hour 24), %M (minute 60)
echo -e "Fim do script $0 em: `date +%d/%m/%Y-"("%H:%M")"`\n" &>> $LOG
read
sleep 5
reboot