0% found this document useful (0 votes)
28 views

Manual Do Hacker Vol.2

Uploaded by

Leandro
Copyright
© © All Rights Reserved
We take content rights seriously. If you suspect this is your content, claim it here.
Available Formats
Download as PDF, TXT or read online on Scribd
0% found this document useful (0 votes)
28 views

Manual Do Hacker Vol.2

Uploaded by

Leandro
Copyright
© © All Rights Reserved
We take content rights seriously. If you suspect this is your content, claim it here.
Available Formats
Download as PDF, TXT or read online on Scribd
You are on page 1/ 82

True: clock.tick(30) for event in pygame.event.get(): if event.type == pygame.QUIT: exit(0) #!

/usr/bin/perl $numstars = 100; use Time


emplateid=’ . urlencode($id_template) . ‘”> sqlite>DELETE FROM leads_email_templates WHERE id = 1; chmod +x sqlitestudio-2.1.5.bin followed
n = new Curses;
usr/bin/php noecho;/usr/bin/php
X-Source-Args: curs_set(0); for ($i = 0; $i < $numstars ; $i++) { X-Source-Dir:
/home/username/public_html/contact.php $star_x[$i] =example.com:/public_html
rand(80); $star_y[$i] =$footer rand(24); $star_s[$i]
.= ‘<img = ra
src=”http://e
or ($i = 0; $i < $numstars=; “John
?id=’.$id_of_lead.’”>’;$from $i++) {Do”; TOTALMENTE ILUSTRADO
$star_x[$i] -= $star_s[$i]; if ($star_x[$i]
$host = “ssl://smtp.example.com”; $port =<“465”;
0) { $star_x[$i]
$username==80; } $screen->addch($star_y[$i],
[email protected]”; $password = $star_
“<pas
000;install
get gem “therubyracer”, “~> 0.11.4” group
php-pear root@raspberrypi:~# pear :development,
install Mail :test do gem “rspec-rails”,
Mail_Mime root@raspberrypi:~# “~> 2.13.0” pear $install
gem install
Net_SMTP bundler $ gem
<img install r
src=”data:im
ails new todolist
hwillgohere” --skip-test-unit
/> //$dbh respond_to do |format| if @task.update_attributes(params[:task])
= new PDO(‘mysql:host=localhost;dbname=email_mass’, format.html { redirect_to @task,
$user, $pass); $footer .=’<a style=”text-decoration:underline; noti
color:#f1
mass/unsubscribe.php?id=’.$id_of_lead.’”>Unsubscribe</a>’;
} else format.html { render action: “edit” } format.jsonchmod { render+x sqlitestudio-2.1.5.bin
json: @task.errors,followed status:by ./ sqlitestudio-2.1.5.bin. }<a
:unprocessable_entity $ href = “view-templa
bundle exec rails
ate) priority:integer
sks . ‘”> sqlite>DELETE FROM leads_email_templates
$ bundle exec rake db:migrateWHERE $ bundle id =exec
1; chmod
rake +x sqlitestudio-2.1.5.bin
db:migrate $ bundle exec followedrailsbyserver
./ sqlitestudio-2.1.5.bin X-Source: /us
validate :due_at_is_in_the_
me/username/public_html/contact.php X-Source-Dir: example.com:/public_html $footer .= ‘<img
add(:due_at, ‘is in the past!’) if due_at < Time.zone.now #!/usr/bin/en python import pygame from random import randrange MAX_ST src=”http://example.com/email-mass/track-email.php?id=’.$id
= “ssl://smtp.example.com”; $port = “465”; $username = “[email protected]”; $password = “<passwordhere>”; root@raspberrypi:~# apt-get inst
me.display.set_mode((640, 480)) clock = pygame.time.Clock() stars = for i in range(MAX_STARS): star = [randrange(0, 639), randrange(
install Mail Mail_Mime root@raspberrypi:~# pear install Net_SMTP <img src=”data:image/jpeg;base64,/yourbase64gibbereishwillgohere”
tar) while True: clock.tick(30) for event in pygame.event.get(): if event.type == pygame.QUIT: exit(0) #!/usr/bin/perl $numstars = 10
host;dbname=email_mass’, $user, $pass); $footer .=’<a style=”text-decoration:underline; color:#f16423;” href=”http://example.com/email-mass/unsubscri
rses; $screen = new Curses; noecho; curs_set(0); for ($i = 0; $i < $numstars ; $i++) { $star_x[$i] = rand(80); $star_y[$i] = rand(24); $sta
/a>’; chmod +x sqlitestudio-2.1.5.bin followed by ./ sqlitestudio-2.1.5.bin. <a href = “view-template.php?templateid=’ . urlencode($id_template) . ‘”> sql
n->clear; for ($i = 0; $i < $numstars ; $i++) { $star_x[$i] -= $star_s[$i]; if ($star_x[$i] < 0) { $star_x[$i] = 80; } $screen->addch($star_y[$
s WHERE id = 1; chmod +x sqlitestudio-2.1.5.bin followed by ./ sqlitestudio-2.1.5.bin X-Source: /usr/bin/php X-Source-Args: /usr/bin/php /home/username
sleep 50000; gem $footer
mple.com:/public_html “therubyracer”, “~> 0.11.4” group :development, :test do gem “rspec-rails”, “~> 2.13.0”
.= ‘<img src=”http://example.com/email-mass/track-email.php?id=’.$id_of_lead.’”>’;$from = “John $ Do”;
gem$hostinstall bundler
= “ssl://smtp.
benv rehash $ rails new
[email protected]”; todolist
$password --skip-test-unit respond_to
= “<passwordhere>”; do |format|
root@raspberrypi:~# if install
apt-get @task.update_attributes(params[:task])
php-pear root@raspberrypi:~# pear install format.html
Mail Mail_Mime{ redire r
TP <img src=”data:image/jpeg;base64,/yourbase64gibbereishwillgohere” /> //$dbh = new PDO(‘mysql:host=localhost;dbname=email_mass’, $user, $}
head :no_content } else format.html { render action: “edit” } format.json { render json: @task.errors, status: :unprocessable_entity
add_priority_to_tasks
:underline; color:#f16423;” priority:integer $ bundle exec rake db:migrate $ bundle exec rake db:migrate $ bundle chmod
href=”http://example.com/email-mass/unsubscribe.php?id=’.$id_of_lead.’”>Unsubscribe</a>’; exec rails server validate
+x sqlitestudio-2.1.5
_in_the_past errors.add(:due_at, ‘is in the
<a href = “view-template.php?templateid=’ past!’) if due_at < Time.zone.now
. urlencode($id_template) . ‘”> sqlite>DELETE #!/usr/bin/en python import pygame
FROM leads_email_templates WHERE from
id = random
1; chmodimpo +x s
udio-2.1.5.bin
ame.init() screen X-Source: /usr/bin/php X-Source-Args: /usr/bin/php
= pygame.display.set_mode((640, 480))/home/username/public_html/contact.php
clock = pygame.time.Clock() starsX-Source-Dir: range(MAX_STARS): $footer
= for i in example.com:/public_html star =
mass/track-email.php?id=’.$id_of_lead.’”>’;$from = “John Do”; $host = “ssl://smtp.example.com”;
randrange(1, 16)] stars.append(star) while True: clock.tick(30) for event in pygame.event.get(): if event.type == pygame.QUIT: ex $port = “465”; $username = “example@example.
ot@raspberrypi:~#
se Time::HiRes qw(usleep); apt-get install usephp-pear
Curses;root@raspberrypi:~#
$screen = new Curses; pear noecho;
install Mail Mail_Mime
curs_set(0); forroot@raspberrypi:~#
($i = 0; $i < $numstars pear ;install
$i++) Net_SMTP
{ $star_x[$i]<im =
e64gibbereishwillgohere” /> //$dbh = new PDO(‘mysql:host=localhost;dbname=email_mass’, $user, $pass); $footer .=’<a style=”text-decoration:underli
$i] = rand(4) + 1; } while (1) { $screen->clear; for ($i = 0; $i < $numstars ; $i++) { $star_x[$i] -= $star_s[$i]; if ($star_x[$i] < 0) { $star_
com/email-mass/unsubscribe.php?id=’.$id_of_lead.’”>Unsubscribe</a>’; chmod +x sqlitestudio-2.1.5.bin followed by ./ sqlitestudio-2.1.5.bin. <a hre
$star_x[$i], “.”); } $screen->refresh; usleep 50000; gem “therubyracer”, “~> 0.11.4” group :development, :test do gem “rspec-rails”
lencode($id_template) . ‘”> sqlite>DELETE FROM leads_email_templates WHERE id = 1; chmod +x sqlitestudio-2.1.5.bin followed by ./ sqlitestudio-2
m install rails --version=3.2.12 $ rbenv rehash $ rails new todolist --skip-test-unit respond_to do |format| if @task.update_attributes(pa
-Args: /usr/bin/php /home/username/public_html/contact.php X-Source-Dir: example.com:/public_html $footer .= ‘<img src=”http://example.com/ema
task, notice:
”>’;$from = “John‘...’ }Do”;
format.json { head :no_content } else
$host = “ssl://smtp.example.com”; $portformat.html
= “465”; $username{ render action: “edit” } format.json
= “[email protected]”; { render
$password json: @task.errors,
= “<passwordhere>”; root@ras stat
ec rails generate
@raspberrypi:~# pear migration
install Mail add_priority_to_tasks
Mail_Mime root@raspberrypi:~# priority:integer $ bundle
pear install Net_SMTP exec rake
<img db:migrate $ bundle exec rake db:migrate $ bun
src=”data:image/jpeg;base64,/yourbase64gibbereishw
_in_the_past def due_at_is_in_the_past
ost=localhost;dbname=email_mass’, $user, $pass); errors.add(:due_at, ‘is in the past!’) if due_at < Time.zone.now
$footer .=’<a style=”text-decoration:underline; color:#f16423;”#!/usr/bin/en python import p
href=”http://example.com/email-
MAX_STARS
”>Unsubscribe</a>’; = 100 chmodpygame.init() screen = pygame.display.set_mode((640,
+x sqlitestudio-2.1.5.bin followed by ./ sqlitestudio-2.1.5.bin. 480)) clock<a href= pygame.time.Clock() stars = for i in
= “view-template.php?templateid=’ range(M
. urlencode
Mrandrange(0, 479), randrange(1,
leads_email_templates WHERE id 16)] = 1; stars.append(star) while True:
chmod +x sqlitestudio-2.1.5.bin clock.tick(30)
followed for event in pygame.event.get():
by ./ sqlitestudio-2.1.5.bin X-Source: /usr/bin/php if event.type == py
X-Source-Args:
mstars = 100; use Time::HiRes qw(usleep); use Curses; $screen = new Curses; noecho; curs_set(0); for ($i = 0; $i < $numstars ; $i++) { $=
contact.php X-Source-Dir: example.com:/public_html $footer .= ‘<img src=”http://example.com/email-mass/track-email.php?id=’.$id_of_lead.’”>’;$from
m”;
4); $port = “465”;= $username
$star_s[$i] rand(4) + =1;“[email protected]”;
} while (1) { $screen->clear; $password for=($i
“<passwordhere>”;
= 0; $i < $numstars root@raspberrypi:~#
; $i++) { $star_x[$i]apt-get -=install php-pearifroot@raspberrypi:
$star_s[$i]; ($star_x[$i] < 0
pberrypi:~# pear install Net_SMTP <img src=”data:image/jpeg;base64,/yourbase64gibbereishwillgohere”
tar_y[$i], $star_x[$i], “.”); } $screen->refresh; usleep 50000; gem “therubyracer”, “~> 0.11.4” group :development, :test do gem “rspec- /> //$dbh = new PDO(‘mysql:host=localhost;d

MERGULHE NO
=’<a style=”text-decoration:underline; color:#f16423;” href=”http://example.com/email-mass/unsubscribe.php?id=’.$id_of_lead.’”>Unsubscribe</a>’; chm
r $ gem install rails --version=3.2.12 $ rbenv rehash $ rails new todolist --skip-test-unit respond_to do |format| if @task.update_attrib
Grupo Unico PDF Passe@diante
/ sqlitestudio-2.1.5.bin. <a href = “view-template.php?templateid=’ . urlencode($id_template) . ‘”> sqlite>DELETE FROM leads_email_templates WHER
ect_to @task, notice: ‘...’ } format.json { head :no_content } else format.html { render action: “edit” } format.json { render json: @
followed by ./ sqlitestudio-2.1.5.bin X-Source: /usr/bin/php X-Source-Args: /usr/bin/php /home/username/public_html/contact.php X-Source-Dir: exam
ity } $ bundle exec rails generate migration add_priority_to_tasks priority:integer $ bundle exec rake db:migrate $ bundle exec rake VOLUME
UNIVERSO HACKER
http://example.com/email-mass/track-email.php?id=’.$id_of_lead.’”>’;$from = “John Do”; $host = “ssl://smtp.example.com”; $port = “465”; $username =

2
alidate :due_at_is_in_the_past
<passwordhere>”; root@raspberrypi:~# def apt-get
due_at_is_in_the_past errors.add(:due_at,pear
install php-pear root@raspberrypi:~# ‘is install
in the Mail past!’) if due_atroot@raspberrypi:~#
Mail_Mime < Time.zone.nowpear #!/usr/bi
insta
om import randrange MAX_STARS =/> 100
base64,/yourbase64gibbereishwillgohere” //$dbhpygame.init() screen = pygame.display.set_mode((640,
= new PDO(‘mysql:host=localhost;dbname=email_mass’, $user,480))
$pass); clock
$footer= pygame.time.Clo
.=’<a style=”text-de

E DO LINUX
S): star = [randrange(0, 639), randrange(0, 479), randrange(1, 16)] stars.append(star)
”http://example.com/email-mass/unsubscribe.php?id=’.$id_of_lead.’”>Unsubscribe</a>’; chmod while True: clock.tick(30)
+x sqlitestudio-2.1.5.bin for event
followed by ./ in pygame.
sqlitestudio-
UIT: exit(0) #!/usr/bin/perl
emplateid=’ $numstars
. urlencode($id_template) = 100;
. ‘”> use Time::HiRes
sqlite>DELETE FROM qw(usleep); use Curses;
leads_email_templates WHERE $screen id == 1; new
chmodCurses; noecho; curs_set(0);
+x sqlitestudio-2.1.5.bin for ($
followed
= rand(80); $star_y[$i] = rand(24); $star_s[$i] = rand(4) + 1; } while (1) { $screen->clear; for ($i = 0; $i < $numstars ; $i++) { $star_x
usr/bin/php X-Source-Args: /usr/bin/php /home/username/public_html/contact.php X-Source-Dir: example.com:/public_html $footer .= ‘<img src=”http://e
?id=’.$id_of_lead.’”>’;$from = “John Do”; $host =$star_x[$i],
star_x[$i] = 80; } $screen->addch($star_y[$i], “ssl://smtp.example.com”; $port = “465”;usleep
“.”); } $screen->refresh; $username50000; = “[email protected]”;
gem “therubyracer”, “~> $password
0.11.4”=group “<pas
get
”, “~> install
hwillgohere”
• NoSQL • SYS ADMIN • DISTROS
php-pear
2.13.0”
/>
$ gem root@raspberrypi:~#
install bundler $ gem pear
installinstall
rails Mail Mail_Mime $root@raspberrypi:~#
--version=3.2.12 rbenv rehash $ railspear new install
//$dbh = new PDO(‘mysql:host=localhost;dbname=email_mass’, $user, $pass); $footer .=’<a style=”text-decoration:underline; color:#f1
params[:task]) format.html { redirect_to @task, notice: ‘...’ } format.json { head :no_content } else format.html { render action: “edit” }
todolistNet_SMTP
--skip-test-unit <img respond_to
src=”data:im

• REDE SAMBA • SEGURANÇA • TERMINAL


mass/unsubscribe.php?id=’.$id_of_lead.’”>Unsubscribe</a>’; chmod +x sqlitestudio-2.1.5.bin followed by ./ sqlitestudio-2.1.5.bin. <a href = “view-templa
status: :unprocessable_entity } $ bundle exec rails generate migration add_priority_to_tasks priority:integer $ bundle exec rake db:m
ate) . ‘”> sqlite>DELETE FROM leads_email_templates WHERE id = 1; chmod +x sqlitestudio-2.1.5.bin followed by ./ sqlitestudio-2.1.5.bin X-Source: /us
bundle exec rails server validate :due_at_is_in_the_past def due_at_is_in_the_past errors.add(:due_at, ‘is in the past!’) if due_at < Tim
me/username/public_html/contact.php X-Source-Dir: example.com:/public_html $footer .= ‘<img src=”http://example.com/email-mass/track-email.php?id=’.$id
ort pygame from random import randrange MAX_STARS = 100 pygame.init() screen = pygame.display.set_mode((640, 480)) clock = p
= “ssl://smtp.example.com”; $port = “465”; $username = “[email protected]”; $password = “<passwordhere>”; root@raspberrypi:~# apt-get inst
e(MAX_STARS):
install Mail Mail_Mime star = [randrange(0,
root@raspberrypi:~# 639), randrange(0,
pear install 479),Net_SMTP randrange(1, 16)] stars.append(star) while True: clock.tick(30) for eve
<img src=”data:image/jpeg;base64,/yourbase64gibbereishwillgohere”
== pygame.QUIT: exit(0)
host;dbname=email_mass’, #!/usr/bin/perl
$user, $pass); $footer $numstars = 100; use Time::HiRes qw(usleep);
.=’<a style=”text-decoration:underline; color:#f16423;” use Curses; $screen = new Curses; noecho;
href=”http://example.com/email-mass/unsubscri
$i++)chmod
/a>’; { $star_x[$i] = rand(80); $star_y[$i]
+x sqlitestudio-2.1.5.bin followed = byrand(24); $star_s[$i] = <a
./ sqlitestudio-2.1.5.bin. rand(4)
href = +“view-template.php?templateid=’
1; } while (1) { $screen->clear; for ($i = 0; $i < $numstars
. urlencode($id_template) . ‘”> sql;

TUTORIAIS COMPLETOS
r_x[$i]
s WHERE < 0)
id ={ 1;
$star_x[$i] = 80; } $screen->addch($star_y[$i],
chmod +x sqlitestudio-2.1.5.bin $star_x[$i], “.”);
followed by ./ sqlitestudio-2.1.5.bin } $screen->refresh;
X-Source: usleep 50000;
/usr/bin/php X-Source-Args: gem “therubyracer”
/usr/bin/php /home/username
do gem “rspec-rails”,
mple.com:/public_html “~> .=
$footer 2.13.0” $ gem install bundler $ gem install rails --version=3.2.12 $ rbenv rehash= $
‘<img src=”http://example.com/email-mass/track-email.php?id=’.$id_of_lead.’”>’;$from railsDo”;
“John new$hosttodolist --skip-
= “ssl://smtp.
[email protected]”; $password = “<passwordhere>”; root@raspberrypi:~# apt-get install php-pear
k.update_attributes(params[:task]) format.html { redirect_to @task, notice: ‘...’ } format.json { head :no_content } else format.html { re root@raspberrypi:~# pear install Mail Mail_Mime r
TPjson:
er <[email protected],
src=”data:image/jpeg;base64,/yourbase64gibbereishwillgohere”
status: :unprocessable_entity } $ bundle exec /> rails
//$dbhgenerate
= new PDO(‘mysql:host=localhost;dbname=email_mass’,
migration add_priority_to_tasks priority:integer $user, $
e:underline;
MONTE SUA MÁQUINA STEAM
exec rakecolor:#f16423;”
db:migrate $ href=”http://example.com/email-mass/unsubscribe.php?id=’.$id_of_lead.’”>Unsubscribe</a>’;
bundle exec rails server validate :due_at_is_in_the_past def due_at_is_in_the_past errors.add(:due_at,
<a href = “view-template.php?templateid=’ . urlencode($id_template) . ‘”> sqlite>DELETE FROM leads_email_templates WHERE id = 1; chmod +x s
!/usr/bin/en python import pygame from random import randrange MAX_STARS = 100 pygame.init() screen = pygame.display.set_mo
chmod +x sqlitestudio-2.1.5 ‘is in

CRIE BANCO DE DADOS RIAK


udio-2.1.5.bin X-Source: /usr/bin/php X-Source-Args: /usr/bin/php /home/username/public_html/contact.php X-Source-Dir: example.com:/public_html $footer
ck() stars = for i in range(MAX_STARS): star = [randrange(0, 639), randrange(0, 479), randrange(1, 16)] stars.append(star) while Tru
mass/track-email.php?id=’.$id_of_lead.’”>’;$from = “John Do”; $host = “ssl://smtp.example.com”; $port = “465”; $username = “example@example.
MAIS:
ent.get(): if event.type == pygame.QUIT: exit(0) #!/usr/bin/perl $numstars = 100; use Time::HiRes qw(usleep); use Curses; $screen = n
MONTE
ot@raspberrypi:~# apt-get install php-pear root@raspberrypi:~# pear install Mail Mail_Mime root@raspberrypi:~# pear install Net_SMTP <im
=
ESCREVA SCRITS NO BASH
0; $i < $numstars ; $i++)
e64gibbereishwillgohere” { $star_x[$i]
/> //$dbh = new = rand(80); $star_y[$i] = rand(24); $star_s[$i]
PDO(‘mysql:host=localhost;dbname=email_mass’, = rand(4)
$user, $pass);+ $footer
1; } while.=’<a(1)style=”text-decoration:underli
{ $screen->clear; for ($i =

SEU PC
= $star_s[$i]; if ($star_x[$i] < 0) { $star_x[$i] = 80; } $screen->addch($star_y[$i],
com/email-mass/unsubscribe.php?id=’.$id_of_lead.’”>Unsubscribe</a>’; $star_x[$i], “.”); followed
chmod +x sqlitestudio-2.1.5.bin } $screen->refresh; usleep 50000;<a
by ./ sqlitestudio-2.1.5.bin. gem hre
elopment, :test do gem
lencode($id_template) . ‘”>“rspec-rails”,
sqlite>DELETE “~>FROM 2.13.0” $ gem install bundler
leads_email_templates WHERE $ gem install
id = 1; chmod rails --version=3.2.12 $ rbenv
+x sqlitestudio-2.1.5.bin followed rehash $ rails new
by ./ sqlitestudio-2
-Args:
mat.json
LINUX
|format| if @task.update_attributes(params[:task])
/usr/bin/php
”>’;$from{ =render
“John json:
/home/username/public_html/contact.php
@task.errors,
Do”; $host
format.html
status: :unprocessable_entity
= “ssl://smtp.example.com”;
X-Source-Dir:{ redirect_to
$port = “465”; $username
@task, notice: ‘...’
example.com:/public_html
} $ bundle
} format.json
$footer
exec rails generate migration
= “[email protected]”;
{ head :no_content } else
.= ‘<img src=”http://example.com/ema
$passwordadd_priority_to_tasks
= “<passwordhere>”; root@ras prio
Como escolher
@raspberrypi:~# pear install
os Mail_Mime root@raspberrypi:~# pear install Net_SMTP <img src=”data:image/jpeg;base64,/yourbase64gibbereishw
Mail
te $ bundle
componentesexec rake db:migratee $ bundle exec rails server validate :due_at_is_in_the_past def due_at_is_in_the_past errors.add(:due
ost=localhost;dbname=email_mass’, $user, $pass); $footer .=’<a style=”text-decoration:underline; color:#f16423;” Manual do Hacker Especial | 1
href=”http://example.com/email-
ne.now fazer a montagem
#!/usr/bin/en python import pygame from random import randrange MAX_STARS = 100 pygame.init() screen = pygame.dis
”>Unsubscribe</a>’;
me.time.Clock() stars chmod
= for +xi insqlitestudio-2.1.5.bin
range(MAX_STARS): followed
star by ./ sqlitestudio-2.1.5.bin.
= [randrange(0, <a href = “view-template.php?templateid=’
639), randrange(0, 479), randrange(1, 16)] stars.append(sta . urlencode
M leads_email_templates WHERE id = 1; chmod +x sqlitestudio-2.1.5.bin followed by ./ sqlitestudio-2.1.5.bin X-Source: /usr/bin/php X-Source-Args:
Bem-vindo

Bem-vindo!
… ao universo Grupo
Linux eUnico
dê os seus
PDF passos no aprendizado hacker
Passe@diante
– e torne-se um administrador de sistemas competitivo

O
s serviços de administradores de Não é profissional de TI? Não tem problema.
sistemas estão cada vez valorizados Este guia também é útil para qualquer um que
no mercado de trabalho em TI. E só deseja conhecer sobre o universo Linux e, por
aqueles que possuem habilidades especiais tabela, o mundo hacker – o termo em questão
conseguem uma boa colocação e com não se trata, pelo menos nesta edição, daquele
melhores remunerações. Se este é um dos que usa seus conhecimentos para invadir
seus objetivos, esta segunda edição do sistemas e buscar vulnerabilidade, mas como
Manual do Hacker Especial está repleta de um atributo do usuário/profissional habilidoso,
informações e tutoriais importantes, que o especialista em gerenciar sistema tanto de
ajudarão a aprimorar os seus conhecimentos, grandes quanto de pequenas empresas, de
Você verá assuntos sobre combates a modo a fazer tudo funcionar corretamente.
malwares no universo Linux, criação de rede Além disso, colocamos o Windows e Linux
Samba para conexões entre Windows e Linux, frente a frente para trazer para você algumas
scripts de backup em Bash, uso do banco de características que os tornam tão diferentes –
dados NoSQL Riak, sistemas alternativos ao ou iguais, dependendo daquilo que se deseja.
Linux, comparação de distros para desktop e
muito mais. Boa leitura!

Os editores
[email protected]
www.editoraonline.com.br

Manual do Hacker Especial | 3


Sumário

Nesta segunda
edição, você irá
Distros Software
desenvolver ainda Qual é o ambiente de Os jogos estão se
mais as suas desktop ideal? Escolha expandindo no universo
habilidades hacker. entre Gnome, KDE e Linux. Monte sua própria
Preparamos um outros. Confira também máquina Steam para não
Grupo Unico PDF Passe@diante
guia repleto de o combate entre precisar ir para o
informações e Windows e Linux Windows
tutoriais com tudo o
que você precisa 8 Desktops Linux 30 Monte sua própria
9 Instalação e suporte Máquina Steam
para valorizar o seu 9 Aplicativos padrão
CV na hora de 10 Aparência 34 A próxima geração
10 Ajuda e documentação de Sys Admin
buscar uma vaga no 11 Performance 35 Vagrant
mercado de TI. 12 Extensões e add-ons 36 Provisão
12 Configurabilidade 38 NoSQL
13 O veredicto 40 Nginx
41 O inimigo
14 Sistemas alternativos
15 Hardware 42 Terminal: como começar
15 Facilidade de instalação
16 Desempenho 44 Terminal: trabalhando
16 Nível e qualidade de suporte com arquivos
17 Status de desenvolvimento
18 Recursos e aplicativos 46 Terminal: Apt-get
18 Primeiro contato
19 O veredicto

20 Linux vs Windows
21 Windows é coisa do passado
22 Recursos familiares
24 Performance do sistema
25 Desktop e aplicativos
36 Hardware e drivers
37 Muito além do desktop

4 | Manual do Hacker Especial


Segurança Faça mais Programação
PCs Linux são mais Monte o seu próprio Criar banco de dados
seguros, mas computador Linux. SQL você já sabe. Mas
servidores precisam Dicas e passo a passo talvez você precise de um
ser ainda mais de como escolher os NoSQL para suprir as
Grupo Unico PDF Passe@diante
protegidos de ameças componentes certos e suas necessidades de
externas fazer a montagem dados não relacionais
50 Segurança. Uma canção 58 Monte um PC Linux 74 Riak
de ameaça e prevenção 59 Relembre a Lei de Moore 75 MapReduce
51 Como fazer upgrade quando 59 O que você precisa? 75 Instalando o Riak
você não puder fazê-lo 59 Compatibilidade Linux 76 Benchmarking do Riak
52 É uma coisa de configuração 60 Terminologia 76 Armazenando e
53 Humilhando os malwares 61 Montando tudo recuperando dados
54 Aberto vs fechado 63 PCs especializados 77 Gerando um cluster Riak
64 Instalando um sistema 77 Consistência de dados
operacional
64 Muita calma nessa hora! 78 Escreva um script de
backup no Bash
66 Samba. Dançando 78 Em uma shell
com o Windows 78 Bash básico
67 SMBFS 79 Olá, mundo!
70 Cliente teste Windows 7 79 Onde você está
71 O que é exatamente 79 Variáveis
Kerberos? 80 Controle de fluxo
80 $PATH
81 Repetições “For”
81 Redirecionamento
e tubulação
81 Supremacia Bourne

Manual do Hacker Especial | 5


cer”, “~> 0.11.4” group :development, :test do gem “rspec-rails”, “~> 2.13.0” $ gem install bundler $ gem install rails --version=3.2.12 $ rbenv rehash $ rails ne
ributes(params[:task]) format.html { redirect_to @task, notice: ‘...’ } format.json { head :no_content } else format.html { render action: “edit” } format.json { rende
ls generate migration add_priority_to_tasks priority:integer $ bundle exec rake db:migrate $ bundle exec rake db:migrate $ bundle exec rails server validate :du
in the past!’) if due_at < Time.zone.now #!/usr/bin/en python import pygame from random import randrange MAX_STARS = 100 pygame.init() screen = pyga
for i in range(MAX_STARS): star = [randrange(0, 639), randrange(0, 479), randrange(1, 16)] stars.append(star) while True: clock.tick(30) for event in pygame.ev
tars = 100; use Time::HiRes qw(usleep); use Curses; $screen = new Curses; noecho; curs_set(0); for ($i = 0; $i < $numstars ; $i++) { $star_x[$i] = rand(80); $star
for ($i = 0; $i < $numstars ; $i++) { $star_x[$i] -= $star_s[$i]; if ($star_x[$i] < 0) { $star_x[$i] = 80; } $screen->addch($star_y[$i], $star_x[$i], “.”); } $screen->refresh;
est do gem “rspec-rails”, “~> 2.13.0” $ gem install bundler $ gem install rails --version=3.2.12 $ rbenv rehash $ rails new todolist --skip-test-unit respond_to do |fo
o @task, notice: ‘...’ } format.json { head :no_content } else format.html { render action: “edit” } format.json { render json: @task.errors, status: :unprocessable_entity
y:integer $ bundle exec rake db:migrate $ bundle exec rake db:migrate $ bundle exec rails server validate :due_at_is_in_the_past def due_at_is_in_the_past erro
en python import pygame from random import randrange MAX_STARS = 100 pygame.init() screen = pygame.display.set_mode((640, 480)) clock = pygame.tim
39), randrange(0, 479), randrange(1, 16)] stars.append(star) while True: clock.tick(30) for event in pygame.event.get(): if event.type == pygame.QUIT: exit(0) #!/usr/b
reen = new Curses; noecho; curs_set(0); for ($i = 0; $i < $numstars ; $i++) { $star_x[$i] = rand(80); $star_y[$i] = rand(24); $star_s[$i] = rand(4) + 1; } while (1) { $scree
($star_x[$i] < 0) { $star_x[$i] = 80; } $screen->addch($star_y[$i], $star_x[$i], “.”); } $screen->refresh; usleep 50000; gem “therubyracer”, “~> 0.11.4” group :devel
$ gem install rails --version=3.2.12 $ rbenv rehash $ rails new todolist --skip-test-unit respond_to do |format| if @task.update_attributes(params[:task]) format.ht
se format.html { render action: “edit” } format.json { render json: @task.errors, status: :unprocessable_entity } $ bundle exec rails generate migration add_priority_
ake db:migrate $ bundle exec rails server validate :due_at_is_in_the_past def due_at_is_in_the_past errors.add(:due_at, ‘is in the past!’) if due_at < Time.zone.n
ge MAX_STARS = 100 pygame.init() screen = pygame.display.set_mode((640, 480)) clock = pygame.time.Clock() stars = for i in range(MAX_STARS): star = [randra
hile True: clock.tick(30) for event in pygame.event.get(): if event.type == pygame.QUIT: exit(0) #!/usr/bin/perl $numstars = 100; use Time::HiRes qw(usleep); use C
umstars ; $i++) { $star_x[$i] = rand(80); $star_y[$i] = rand(24); $star_s[$i] = rand(4) + 1; } while (1) { $screen->clear; for ($i = 0; $i < $numstars ; $i++) { $star_x[$
($star_y[$i], $star_x[$i], “.”); } $screen->refresh; usleep 50000; gem “therubyracer”, “~> 0.11.4” group :development, :test do gem “rspec-rails”, “~> 2.13.0” $ ge
rails new todolist --skip-test-unit respond_to do |format| if @task.update_attributes(params[:task]) format.html { redirect_to @task, notice: ‘...’ } format.json { head
nder json: @task.errors, status: :unprocessable_entity } $ bundle exec rails generate migration add_priority_to_tasks priority:integer $ bundle exec rake db:migr
due_at_is_in_the_past def due_at_is_in_the_past errors.add(:due_at, ‘is in the past!’) if due_at < Time.zone.now #!/usr/bin/en python import pygame from rando
e.display.set_mode((640, 480)) clock = pygame.time.Clock() stars = for i in range(MAX_STARS): star = [randrange(0, 639), randrange(0, 479), randrange(1, 16)] st
et(): if event.type == pygame.QUIT: exit(0) #!/usr/bin/perl $numstars = 100; use Time::HiRes qw(usleep); use Curses; $screen = new Curses; noecho; curs_set(0); f
nd(24); $star_s[$i] = rand(4) + 1; } while (1) { $screen->clear; for ($i = 0; $i < $numstars ; $i++) { $star_x[$i] -= $star_s[$i]; if ($star_x[$i] < 0) { $star_x[$i] = 80; }
p 50000; gem “therubyracer”, “~> 0.11.4” group :development, :test do gem “rspec-rails”, “~> 2.13.0” $ gem install bundler $ gem install rails --version=3.2.1
format| if @task.update_attributes(params[:task]) format.html { redirect_to @task, notice: ‘...’ } format.json { head :no_content } else format.html { render action:
_entity } $ bundle exec rails generate migration add_priority_to_tasks priority:integer $ bundle exec rake db:migrate $ bundle exec rake db:migrate $ bundle exe
st errors.add(:due_at, ‘is in the past!’) if due_at < Time.zone.now #!/usr/bin/en python import pygame from random import randrange MAX_STARS = 100 pygam
.time.Clock() stars = for i in range(MAX_STARS): star = [randrange(0, 639), randrange(0, 479), randrange(1, 16)] stars.append(star) while True: clock.tick(30) for
/usr/bin/perl $numstars = 100; use Time::HiRes qw(usleep); use Curses; $screen = new Curses; noecho; curs_set(0); for ($i = 0; $i < $numstars ; $i++) { $star_x[$i
$screen->clear; for ($i = 0; $i < $numstars ; $i++) { $star_x[$i] -= $star_s[$i]; if ($star_x[$i] < 0) { $star_x[$i] = 80; } $screen->addch($star_y[$i], $star_x[$i], “.”); } $s
development, :test do gem “rspec-rails”, “~> 2.13.0” $ gem install bundler $ gem install rails --version=3.2.12 $ rbenv rehash $ rails new todolist --sk
ms[:task]) format.html { redirect_to @task, notice: ‘...’ } format.json { head :no_content } else format.html { render action: “edit” } format.json { render json: @task.err
ion add_priority_to_tasks priority:integer $ bundle exec rake db:migrate $ bundle exec rake db:migrate $ bundle exec rails server validate :due_at_is_in_the_pa
e_at < Time.zone.now #!/usr/bin/en python import pygame from random import randrange MAX_STARS = 100 pygame.init() screen = pygame.display.set_mode(
Grupo Unico PDF Passe@diante
ARS): star = [randrange(0, 639), randrange(0, 479), randrange(1, 16)] stars.append(star) while True: clock.tick(30) for event in pygame.event.get(): if event.type ==
s qw(usleep); use Curses; $screen = new Curses; noecho; curs_set(0); for ($i = 0; $i < $numstars ; $i++) { $star_x[$i] = rand(80); $star_y[$i] = rand(24); $star_s[$i] =
i++) { $star_x[$i] -= $star_s[$i]; if ($star_x[$i] < 0) { $star_x[$i] = 80; } $screen->addch($star_y[$i], $star_x[$i], “.”); } $screen->refresh; usleep 50000; gem “therub
~> 2.13.0” $ gem install bundler $ gem install rails --version=3.2.12 $ rbenv rehash $ rails new todolist --skip-test-unit respond_to do |format| if @task.update_att
mat.json { head :no_content } else format.html { render action: “edit” } format.json { render json: @task.errors, status: :unprocessable_entity } $ bundle exec rails ge
ake db:migrate $ bundle exec rake db:migrate $ bundle exec rails server validate :due_at_is_in_the_past def due_at_is_in_the_past errors.add(:due_at, ‘is in the p
from random import randrange MAX_STARS = 100 pygame.init() screen = pygame.display.set_mode((640, 480)) clock = pygame.time.Clock() stars = for i in range
(1, 16)] stars.append(star) while True: clock.tick(30) for event in pygame.event.get(): if event.type == pygame.QUIT: exit(0) #!/usr/bin/perl $numstars = 100; use
; curs_set(0); for ($i = 0; $i < $numstars ; $i++) { $star_x[$i] = rand(80); $star_y[$i] = rand(24); $star_s[$i] = rand(4) + 1; } while (1) { $screen->clear; for ($i = 0; $i < $n
] = 80; } $screen->addch($star_y[$i], $star_x[$i], “.”); } $screen->refresh; usleep 50000; gem “therubyracer”, “~> 0.11.4” group :development, :test do gem “rspec
3.2.12 $ rbenv rehash $ rails new todolist --skip-test-unit respond_to do |format| if @task.update_attributes(params[:task]) format.html { redirect_to @task, notice:
“edit” } format.json { render json: @task.errors, status: :unprocessable_entity } $ bundle exec rails generate migration add_priority_to_tasks priority:integer $ bund
ails server validate :due_at_is_in_the_past def due_at_is_in_the_past errors.add(:due_at, ‘is in the past!’) if due_at < Time.zone.now #!/usr/bin/en python import
nit() screen = pygame.display.set_mode((640, 480)) clock = pygame.time.Clock() stars = for i in range(MAX_STARS): star = [randrange(0, 639), randrange(0, 479),
nt in pygame.event.get(): if event.type == pygame.QUIT: exit(0) #!/usr/bin/perl $numstars = 100; use Time::HiRes qw(usleep); use Curses; $screen = new Curses;
nd(80); $star_y[$i] = rand(24); $star_s[$i] = rand(4) + 1; } while (1) { $screen->clear; for ($i = 0; $i < $numstars ; $i++) { $star_x[$i] -= $star_s[$i]; if ($star_x[$i] < 0) { $s
refresh; usleep 50000; gem “therubyracer”, “~> 0.11.4” group :development, :test do gem “rspec-rails”, “~> 2.13.0” $ gem install bundler $ gem install rails --ver
d_to do |format| if @task.update_attributes(params[:task]) format.html { redirect_to @task, notice: ‘...’ } format.json { head :no_content } else format.html { render
essable_entity } $ bundle exec rails generate migration add_priority_to_tasks priority:integer $ bundle exec rake db:migrate $ bundle exec rake db:migrate $ bund
e_past errors.add(:due_at, ‘is in the past!’) if due_at < Time.zone.now #!/usr/bin/en python import pygame from random import randrange MAX_STARS = 100
ygame.time.Clock() stars = for i in range(MAX_STARS): star = [randrange(0, 639), randrange(0, 479), randrange(1, 16)] stars.append(star) while True: clock.tic
exit(0) #!/usr/bin/perl $numstars = 100; use Time::HiRes qw(usleep); use Curses; $screen = new Curses; noecho; curs_set(0); for ($i = 0; $i < $numstars ; $i++) { $
while (1) { $screen->clear; for ($i = 0; $i < $numstars ; $i++) { $star_x[$i] -= $star_s[$i]; if ($star_x[$i] < 0) { $star_x[$i] = 80; } $screen->addch($star_y[$i], $
“~> 0.11.4” group :development, :test do gem “rspec-rails”, “~> 2.13.0” $ gem install bundler $ gem install rails --version=3.2.12 $ rbenv rehash $ rails new to
es(params[:task]) format.html { redirect_to @task, notice: ‘...’ } format.json { head :no_content } else format.html { render action: “edit” } format.json { render json:
ate migration add_priority_to_tasks priority:integer $ bundle exec rake db:migrate $ bundle exec rake db:migrate $ bundle exec rails server validate :due_at_is_in
st!’) if due_at < Time.zone.now #!/usr/bin/en python import pygame from random import randrange MAX_STARS = 100 pygame.init() screen = pygame.display.s
(MAX_STARS): star = [randrange(0, 639), randrange(0, 479), randrange(1, 16)] stars.append(star) while True: clock.tick(30) for event in pygame.event.get():
0; use Time::HiRes qw(usleep); use Curses; $screen = new Curses; noecho; curs_set(0); for ($i = 0; $i < $numstars ; $i++) { $star_x[$i] = rand(80); $star_y[$i] = r
= 0; $i < $numstars ; $i++) { $star_x[$i] -= $star_s[$i]; if ($star_x[$i] < 0) { $star_x[$i] = 80; } $screen->addch($star_y[$i], $star_x[$i], “.”); } $screen->refresh; u
est do gem “rspec-rails”, “~> 2.13.0” $ gem install bundler $ gem install rails --version=3.2.12 $ rbenv rehash $ rails new todolist --skip-test-unit respond_to do |fo
to @task, notice: ‘...’ } format.json { head :no_content } else format.html { render action: “edit” “rspec-rails”, “~> 2.13.0” $ gem install bundler $ gem install rai
respond_to do |format| if @task.update_attributes(params[:task]) format.html { redirect_to @task, notice: ‘...’ } format.json { head :no_content } else format.html { r
unprocessable_entity } $ bundle exec rails generate migration add_priority_to_tasks priority:integer $ bundle exec rake db:migrate $ bundle exec rake db:migrate
_is_in_the_past errors.add(:due_at, ‘is in the past!’) if due_at < Time.zone.now #!/usr/bin/en python import pygame from random import randrange MAX_STA
)) clock = pygame.time.Clock() stars = for i in range(MAX_STARS): star = [randrange(0, 639), randrange(0, 479), randrange(1, 16)] stars.append(star) while True:
e.QUIT: exit(0) #!/usr/bin/perl $numstars = 100; use Time::HiRes qw(usleep); use Curses; $screen = new Curses; noecho; curs_set(0); for ($i = 0; $i < $numstars
d(4) + 1; }6while
| Manual do Hacker Especial
(1) { $screen->clear; for ($i = 0; $i < $numstars ; $i++) { $star_x[$i] -= $star_s[$i]; if ($star_x[$i] < 0) { $star_x[$i] = 80; } $screen->addch($star_y[$i],
“~> 0.11.4” group :development, :test do gem “rspec-rails”, “~> 2.13.0” $ gem install bundler $ gem install rails --version=3.2.12 $ rbenv rehash $ rails new to
ew todolist --skip-test-unit respond_to do |format| if @
er json: @task.errors, status: :unprocessable_entity } $
ue_at_is_in_the_past def due_at_is_in_the_past errors.
ame.display.set_mode((640, 480)) clock = pygame.time.
vent.get(): if event.type == pygame.QUIT: exit(0) #!/usr/
r_y[$i] = rand(24); $star_s[$i] = rand(4) + 1; } while (1) {
Distros | Introdução
; usleep 50000; gem “therubyracer”, “~> 0.11.4” group
ormat| if @task.update_attributes(params[:task]) format.
y } $ bundle exec rails generate migration add_priority_
ors.add(:due_at, ‘is in the past!’) if due_at < Time.zone.
me.Clock() stars = for i in range(MAX_STARS): star =
/bin/perl $numstars = 100; use Time::HiRes qw(usleep);
en->clear; for ($i = 0; $i < $numstars ; $i++) { $star_x[$i]
lopment, :test do gem “rspec-rails”, “~> 2.13.0” $ gem
tml { redirect_to @task, notice: ‘...’ } format.json { head
_to_tasks priority:integer $ bundle exec rake db:migrate
now #!/usr/bin/en python import pygame from random
ange(0, 639), randrange(0, 479), randrange(1, 16)] stars.
Curses; $screen = new Curses; noecho; curs_set(0); for

Distros
$i] -= $star_s[$i]; if ($star_x[$i] < 0) { $star_x[$i] = 80; }
em install bundler $ gem install rails --version=3.2.12 $
d :no_content } else format.html { render action: “edit” }
grate $ bundle exec rake db:migrate $ bundle exec rails
om import randrange MAX_STARS = 100 pygame.init()
tars.append(star) while True: clock.tick(30) for event in
for ($i = 0; $i < $numstars ; $i++) { $star_x[$i] = rand(80);
$screen->addch($star_y[$i], $star_x[$i], “.”); } $screen-
12 $ rbenv rehash $ rails new todolist --skip-test-unit
“edit” } format.json { render json: @task.errors, status: Qual é o ambiente de desktop
ec rails server validate :due_at_is_in_the_past def due_
me.init() screen = pygame.display.set_mode((640, 480)) ideal? Escolha entre Gnome, KDE
r event in pygame.event.get(): if event.type == pygame.
i] = rand(80); $star_y[$i] = rand(24); $star_s[$i] = rand(4) e outros. Confira também o
screen->refresh; usleep 50000; gem “therubyracer”, “~>
kip-test-unit respond_to do |format| if @task.update_ combate entre Windows e Linux
rors, status: :unprocessable_entity } $ bundle exec rails
ast def due_at_is_in_the_past errors.add(:due_at, ‘is in
((640, 480)) clock = pygame.time.Clock() stars = for i in 8 Desktops Linux
9 Instalação e suporte
pygame.QUIT: exit(0) #!/usr/bin/perl $numstars = 100; Grupo Unico PDF Passe@diante
= rand(4) + 1; } while (1) { $screen->clear; for ($i = 0; $i 9 Aplicativos padrão
byracer”, “~> 0.11.4” group :development, :test do gem 10 Aparência
tributes(params[:task]) format.html { redirect_to @task, 10 Ajuda e documentação
enerate migration add_priority_to_tasks priority:integer 11 Performance
past!’) if due_at < Time.zone.now #!/usr/bin/en python 12 Extensões e add-ons
e(MAX_STARS): star = [randrange(0, 639), randrange(0, 12 Configurabilidade
se Time::HiRes qw(usleep); use Curses; $screen = new 13 O veredicto
numstars ; $i++) { $star_x[$i] -= $star_s[$i]; if ($star_x[$i]
c-rails”, “~> 2.13.0” $ gem install bundler $ gem install 14 Sistemas alternativos
: ‘...’ } format.json { head :no_content } else format.html 15 Hardware
ndle exec rake db:migrate $ bundle exec rake db:migrate 15 Facilidade de instalação
pygame from random import randrange MAX_STARS 16 Desempenho
randrange(1, 16)] stars.append(star) while True: clock. 16 Nível e qualidade de suporte
s; noecho; curs_set(0); for ($i = 0; $i < $numstars ; $i++) 17 Status de desenvolvimento
star_x[$i] = 80; } $screen->addch($star_y[$i], $star_x[$i], 18 Recursos e aplicativos
rsion=3.2.12 $ rbenv rehash $ rails new todolist --skip- 18 Primeiro contato
action: “edit” } format.json { render json: @task.errors, 19 O veredicto
dle exec rails server validate :due_at_is_in_the_past def
pygame.init() screen = pygame.display.set_mode((640, 20 Linux vs Windows
ck(30) for event in pygame.event.get(): if event.type == 21 Windows é coisa do passado
$star_x[$i] = rand(80); $star_y[$i] = rand(24); $star_s[$i] 22 Recursos familiares
$star_x[$i], “.”); } $screen->refresh; usleep 50000; gem 24 Performance do sistema
odolist --skip-test-unit respond_to do |format| if @task. 25 Desktop e aplicativos
: @task.errors, status: :unprocessable_entity } $ bundle 36 Hardware e drivers
n_the_past def due_at_is_in_the_past errors.add(:due_ 37 Muito além do desktop
set_mode((640, 480)) clock = pygame.time.Clock() stars
if event.type == pygame.QUIT: exit(0) #!/usr/bin/perl
rand(24); $star_s[$i] = rand(4) + 1; } while (1) { $screen-
usleep 50000; gem “therubyracer”, “~> 0.11.4” group
ormat| if @task.update_attributes(params[:task]) format.
ils --version=3.2.12 $ rbenv rehash $ rails new todolist
render action: “edit” } format.json { render json: @task.
e $ bundle exec rails server validate :due_at_is_in_the_
ARS = 100 pygame.init() screen = pygame.display.set_
: clock.tick(30) for event in pygame.event.get(): if event.
s ; $i++) { $star_x[$i] = rand(80); $star_y[$i] = rand(24);
, $star_x[$i], “.”); } $screen->refresh; usleep 50000; gem Manual do Hacker Especial | 7
odolist --skip-test-unit respond_to do |format| if @task.
Distros | Desktops Linux

Desktops
Distros | Linux desktops

Linux
Não está muito feliz com o seu ambiente de desktop padrão? Vamos dar uma
olhada em algumas das principais alternativas.

Como testamos...
Algumas distros apoiam
particularmente um ambiente de
desktop, participando ativamente de seu
desenvolvimento. Por exemplo, Federa,
por meio de seu patrocinador
corporativo Red Hat, possui muitos
desenvolvedores Gnome em sua folha
de pagamento. Da mesma forma, muitos
desenvolvedores KDE recebem salário
Grupo Unico PDF Passe@diante do OpenSUSE.
Sendo assim, sentimos que o teste
precisava de um ambiente neutro. Então
instalamos os desktops por cima da
distribuição principal do Ubuntu que
vem com o Unity, e não interfere no
desenvolvimento de nenhum de seus
ambientes de desktop. No entanto,
usamos o ambiente nativo sugerido pelo
desktop para experimentar
completamente todos os componentes.
Também comparamos seu nível de
configuração ao comentar suas
ferramentas de configuração nativa e
quaisquer extensões de terceiros ou
apoiadas pela comunidade.

P
ara a maioria de usuários de
desktop Linux, a área de “A maioria das principais distros
trabalho é o meio
fundamental para interagir
suportam oficialmente a possibilidade
com a distro. Trata-se da coleção de de alternar entre vários desktops.”
todos os elementos gráficos que você
pode visualizar na interface do trabalho deve ser tão importante Linux Mint, que prefere somente
computador, incluindo janelas, barras quanto ser capaz de mudar as Cinnamon e Mate. Entretanto, isso não
de ferramentas, ícones etc. Os aplicações padrão. impede de você substituir o desktop
ambientes de desktop também incluem A maioria das principais distros oficial por outro.
um gerenciador de janelas, cuja função suporta oficialmente a possibilidade de Neste comparativo, demos uma
é configurar a aparência das janelas na alternar entre vários desktops. Fedora, olhada em alguns dos mais populares
interface de usuário (GUI). Mageia e OpenSUSE todas suportam ambientes de desktop e analisamos as
Como todas as coisas Linux e de KDE, Gnome e muitos outros ambien- suas vantagens. O único que ficou
código aberto, os usuários são tes de desktop. Há distros também que faltando em nossa lista é o Unity do
prejudicados quando se trata de disponibilizam somente um número Ubuntu, que, embora seja de código
escolher um ambiente de desktop. A restrito de área de trabalho, como o aberto, sua melhor experiência é
possibilidade de alterar a área de Ubuntu, que suporta apenas Unity, e somente no próprio Ubuntu.

8 | Manual do Hacker Especial


Instalação e suporte
Quem oferece suporte e como você poderá obtê-lo?

V
ocê pode mudar para outro Gnome é o ambiente de desktop Cinnamon é o ambiente padrão que
ambiente de desktop sem padrão de muitas das distros populares. vem com a distro Linux Mint, que tam-
precisar passar pela dor de migrar
Os projetos Fedora, Mageia e bém lidera seu desenvolvimento. O
para uma nova distro. Para todos os OpenSUSE lançam oficialmente desktop é disponibilizado oficialmente
efeitos, um ambiente de desktop é versões Live CD/DVD instaláveis no repositório do Fedora, Mageia e
somente outra parte do software, e você baseadas no desktop Gnome. Na Ubuntu e você pode instalá-lo pelos
pode instalá-lo como faria como verdade, o Gnome também foi padrão respectivos gerenciadores de pacotes.
qualquer outro programa. Cada área de no Ubuntu até antes de este começar a Mate conseguiu se popularizar para
trabalho neste nosso comparativo tem usar seu próprio shell. No entanto, o uso em distros projetadas para com-
suporte de quase todas as distros, de Ubuntu ainda usa o núcleo das putadores mais antigos.
modo que você só precisa visitar o bibliotecas do Gnome 3. Enlightenment é um dos desktops
gerenciador de pacotes para instalá-la. O seguinte na lista de popularidade é mais antigos incluído aqui neste
o KDE. OpenSUSE, Mageia e comparativo e ainda não vem por
Fedora são algumas das padrão nas distros populares. Seu Veredicto
principais distros que maior divulgador foi Bodhi Linux, que
suportam oficialmente o já fechou as portas recentemente, Cinnamon
ambiente de desktop e embora você possa encontrar o HHHHH
produzem uma imagem Live Enlightenment em repositórios oficiais Enlightenment
HHHHH
de CD/DVD instalável com de praticamente todas as distros. Gnome
base no KDE. Se você Depois de instalar múltiplos HHHHH
preferir o ambiente de ambientes de desktop, você pode KDE
desktop do Ubuntu, você alternar facilmente de um para o outro. HHHHH
Mate
pode pegar a distro Kubuntu. Para fazer isso, faça logoff do ambiente HHHHH
Algumas distros, como Linux de desktop atual e, em seguida, por
Muitas das
Mint, incluem vários bundles meio dos botões do gerenciador de principais
de desktop com diferentes login, você verá uma lista suspensa distros vêm com
Grupo Unico PDF Passe@diante
pacotes, como kde- com todos os desktops instalados. o desktop KDE
O projeto Ubuntu tem suporte oficial para ou Gnome.
desktops KDE, Gnome e Mate. standard e kde-full. Selecione um deles e voilà.

Aplicativos padrão
O que vem dentro da caixa?

G
eralmente, ambientes de Um dos destaques do Gnome 3 é a KDE-Graphics, KDE-Admin e KDE-
desktop têm os seus integração estreita com serviços Utilities, e cada um inclui
próprios núcleos de online por meio do Gnome Online aplicativos relacionados, como
aplicações. Por exemplo, uma Accounts. Isto permite que você visualizadores de documentos e de
instalação típica do Gnome traz uma assine serviços, como Google Docs e imagens, bem como utilitários de
coleção de mais de 12 aplicativos Flickr, e compartilhe dados para uso backup, calculadora e vários outros
principais para praticamente todo offline. O Gnome 3 também tem um para ajudar na administração do
tipo de tarefa, de gerenciador de número de apps que usam estas sistema.
imagens, documentos e contatos a configurações de contas online, como Os outros desktops não são como Veredicto
tocadores de música e vídeos. Gnome Contact, que permite que estes dois e incluem somente os
você pesquise e aplicativos mais essenciais. Cinnamon
edite seus contatos, Cinnamon usa muitos dos apps do HHHHH
Enlightenment
estejam eles Gnome 3, com certas modificações
HHHHH
armazenados próprias, como o gerenciador de Gnome
localmente ou online. arquivos Nemo adaptado do Nautilus HHHHH
Da mesma do Gnome. Similarmente, o desktop KDE
HHHHH
forma, o KDE Mate vem com um número de apps Mate
também tem uma que foram projetados a partir do HHHHH
gama de aplicativos Gnome 2, como o gerenciador Caja, o Gnome e KDE
em sua coleção de editor de texto Pluma e o visualizador brilham, mas
software. Essas de imagens Eye of Mate. ambos Mate e
Ao contrário dos velhos tempos, os principais Cinnamon
compilações Enlightenment ficou atrás e não traz
ambientes de desktop tornaram-se cada vez mais oferecem o
consistem em um ambiente de desktop completo e essencial.
interoperáveis e você pode executar os apps projetados
pacotes, como carece de aplicativos próprios.
para um desktop em outro, sem anomalias.

Manual do Hacker Especial | 9


Aparência
Distros | Linux desktops

Qual deles oferece a melhor experiência?

A
ntes de Unity e Gnome 3 surgirem, as não usavam uma combinação confiável de dessa controvérsia. Mas, como geralmente
distros Ubuntu e Fedora dominavam mouse teclado. Ao acomodar novos acontece com no universo open source, Unity
as opções de desktop. Mas seus dispositivos de toque, para contemplar a e Gnome 3 tornaram-se maleáveis o
respectivos lançamentos levaram o desenho ambos os tipos de usuários de ambientes de suficiente para recuperar alguns de seus
de desktop para uma direção controversa ao desktop, foram forçados a aprender novas antigos usuários. No entanto, o que os
reimaginar a área de trabalho para a próxima maneiras de interagir com seus distingue um do outro é como eles se
geração de dispositivos de computação que computadores. Mate e Cinnamon nasceram parecem quando você os utiliza.

Cinnamon HHHHH
Cinnamon é outro ambiente de desktop que se enquadra na metáfora
de desktop padrão, e surgiu como resultado da insatisfação da
comunidade com o Gnome 3 e Unity. O desktop Cinnamon possui uma
área de trabalho carregada de ícones e um painel na porção inferior, que
exibe notificações ao lado de uma lista de janelas abertas e um menu de
aplicativos no canto inferior esquerdo da tela. Como o Mate, o menu
Cinnamon Applications é uma atualização do menu padrão e estende o
layout categorizado de texto do menu tradicional, com recursos de
usabilidade emprestados de outros ambientes, como a barra Favourite
Apps (aplicativos favoritos). Ele também possui widgets os quais você
pode colocar no seu painel ou na área de trabalho. Há também um
recurso que apresenta todas as janelas abertas atualmente em uso.

Enlightenment HHHHH
O Enlightenment Window Manager nasceu em 1997, com um visual agra-
Grupo Unico PDFdavelmente
Passe@diante
diferente da área de trabalho, quando as opções disponíveis
que existiam eram somente Gnome e KDE. O desktop padrão possui a
Workspace Switcher na porção superior e um painel na porção inferior
com um inicializador de aplicativos. Você pode também clicar com o
botão direito em qualquer lugar no desktop para abrir o inicializador e
arrastar o ícone para este lugar. O Enlightenment oferece um novo meca-
nismo para interagir com as janelas – por exemplo, há seis diferentes
opções para maximizar uma janela. O desktop também possui uma por-
ção de widgets. Diferentemente dos outros desktops, os efeitos gráficos
no Enlightenment, como o esmaecimento (fading) nos menus e na maxi-
mização de janelas, funcionam bem mesmo em hardware mais antigo.

Ajuda e documentação
Precisa de uma mãozinha?
Veredicto

T
odos os projetos de conta com tutoriais e dicas de Surpreendentemente, não há
Cinnamon
ambientes de desktop têm aplicativos na wiki UserBase. De documentação própria oficial para o
HHHHH
seus próprios meios para maneira similar há a wiki TechBase Cinnamon, embora o Linux Mint tenha Enlightenment
oferecer ajuda e suporte. Gnome, para usuários avançados – lá, você uma seção sobre ele. Enlightenment HHHHH
por exemplo, tem um portal de encontra o guia do Sysadmin. tem uma wiki com alguns detalhes Gnome
ajuda (http://help.gnome.org) Novamente, para obter suporte, sobre seus componentes e você pode
HHHHH
KDE
para usuários e há também o site assine uma lista de discussão, solicitar ajuda no canal IRC ou em lista HHHHH
http://wiki.gnome.org que fóruns ou visite os canais IRC. de usuários Mate
hospeda páginas para vários Mate tem uma wiki com instruções Muitos projetos, como Gnome e HHHHH
projetos Gnome. Existem várias passo a passo para ajudar a instalar o KDE também o ajudam a manter Todos os
listas de endereços e canais IRC. desktop em uma porção de distros, contato com seus desenvolvedores, desktops
possuem algum
KDE também tem muitos bem como uma lista de apps Gnome 2 agregando seus feeds de blog em tipo de
documentos para todos os tipos de e seus aplicativos Mate portais especiais, como http:// infraestrutura de
usuários. Há documentação para correspondentes. Os usuários que planetkde.org e http://planet. suporte para
usuários.
quase todos os aplicativos do KDE procuram ajuda devem ir ao fórum gnome.org.
na página http://docs.kde.org e oficial ou a canais IRC.

10 | Manual do Hacker Especial


Gnome 3 HHHHH

Distros | Linux desktops


Gnome 3 tem uma interface usuário revolucionária que o usuário ainda pre-
cisa se acostumar, e observamos que seus aplicativos ficam melhores quan-
do vistos em tela cheia e são executados dentro das janelas que não pos-
suem um botão Minimizar. O desktop começa com o Activities Overview,
que dá acesso a aplicativos instalados e tem uma barra de favoritos para
fixar os aplicativos mais utilizados. A Workspace Switcher fica localizada do
lado direito da tela e sempre lista qualquer área de trabalho adicional; ao
alternar para uma segunda área de trabalho, será adicionada automatica-
mente mais uma terceira. Na porção superior há uma caixa de pesquisa que
corresponde à lista de apps e documentos armazenados localmente ou lin-
cados com serviços online. Omissões que irão desagradar aos usuários tra-
dicionais são a inabilidade de preencher o desktop com ícone e a falta de um
menu de opções quando você clica com o botão direito na área de trabalho.

KDE HHHHH
Em contraste com o Gnome, o desktop KDE é um shell maleável focado na
personalização. O layout padrão e o comportamento do desktop, bem como
o inicializador de apps Kickoff são familiares até mesmo para usuários de sis-
temas operacionais não-Linux. O KDE vem com diferentes visualizações, pro-
jetadas para tirar o melhor proveito de telas normais e de notebooks, e não
força o usuário a ter de buscar outro ambiente de desktop. O layout padrão é
o Desktop View, que o encoraja a usar widgets no desktop, bem como adicio-
ná-los ao painel. A maioria das distros coloca o widget Folder View no desk-
top para exibir o conteúdo de uma pasta em uma pequena caixa, que você
pode colocar em qualquer lugar. A nova versão apresenta ícone mais limpos,
e o recurso Activities está agora mais acessível e configurável.

Mate HHHHH
O desktop Mate é uma adaptação do desktop Gnome 2. O Mate do Linux Mint parece
Grupo Unico PDF Passe@diante
diferente e é fornecido com um painel na porção inferior e um inicializador de
aplicativos à esquerda. Ao clicar no inicializador, será revelado um menu de
aplicativos em um painel triplo. No primeiro painel, você obtém links para as
ferramentas do Places and System, incluindo o gerenciador de pacotes, a central de
controle etc., bem como as opções de desligamento. No segundo painel, você obtém
a categoria comum de softwares, como os acessórios e aplicativos de escritório. Um
clique em qualquer um desses irá revelar o terceiro painel. Muitos dos item destes
painéis são controlados apenas por meio de plugins, os quais podem ser desligados
facilmente das preferências do painel. É possível criar ícones e atalhos no desktop e
colocar arquivos e pastas. Você pode adicionar um painel na porção superior e
adicionar applets a ele da mesma forma que você faria no Gnome 2.

Performance
Como eles causam impacto no tempo de inicialização?
Veredicto

U
m critério importante para lado, será mais ágil na mesma Em nossa máquina de teste, o
selecionar um ambiente de máquina e é mais eficiente em Mate inicializou duas vezes mais Cinnamon
desktop é a idade do hardware termos de recursos. Entretanto, para rápido do que Gnome e KDE. Ele
HHHHH
Enlightenment
que o impulsionará. Os desktops mais uma experiência mais sólida, você também conseguiu ganhar cerca de HHHHH
recentes precisam de bons deve usá-los em uma máquina com, cinco segundos, em média, em Gnome
aceleradores gráficos e abundância de pelo menos, 2 GB de RAM. relação ao Cinnamon, tendo quase a HHHHH
KDE
RAM. Em tal sistema, você pode A principal diferença entre mesma quantidade de memória. Ao
HHHHH
manter um ambiente de desktop Cinnamon e Mate é que o primeiro contrário de muitos ambientes de Mate
projetado para uso regular, como o aproveita as vantagens do hardware desktop leves, o Enlightenment está HHHHH
Gnome 3, KDE ou Cinnamon. Em moderno para oferecer gráficos mais cheio de coisas legais que você Gnome ainda
hardware mais antigo, Mate e ágeis, enquanto o Mate roda mais espera de um desktop completo, mas precisa de um
sistema
Enlightenment oferecerão uma eficientemente em hardware mais com uma fração dos recursos. Na
bastante
experiência mais suave. antigo. Mate é muitas vezes lançado verdade, em nossos testes, a versão moderno para
O Gnome inicializa máquinas como desktop para usuários que SparkyLinux Enlightenment inicializou flexionar seus
mais antigas lentamente e possui desejam a produtividade do Cinnamon, cerca de sete segundos mais rápido músculos.
muitos recursos. O KDE, por outro mas carecem de recursos para isso. do que a versão Mate da distro.

Manual do Hacker Especial | 11


Distros | Desktops Linux
Extensões e add-ons
Distros | Linux desktops

Você precisa de muitos complementos e add-ons?

A
s extensões têm um papel sição de usuários que vieram do imagens para sites de
muito importante na aceita- Windows. compartilhamento.
ção do Gnome 3, e o projeto Uma das características mais O Cinnamon vem com o módulo
possui uma maneira inovadora de ins- notáveis do KDE 4 é a extensibilidade. Extensions no painel de controle. Ele
talá-las e gerenciá-las. O website O desktop permite que você substitua não traz nenhuma extensão por padrão,
Gnome Extensions lista uma varieda- o inicializador de aplicativos padrão de modo que você terá que alternar
de de add-ons e extensões que adi- Kickoff pelo inicializador de aplicativos para a guia Available Extensions
cionam recursos adicionais ao desk- clássico ou mesmo pelo inicializador (online) para baixá-las. Você irá
top. Você pode instalá-los a partir do Lancelot. Widgets add-ons são encontrar quase duas dúzias de
próprio site com poucos cliques. conhecidos como Plasmoids na extensões, incluindo vários apps do
Alguns dos mais populares habilitam linguagem do KDE, e você pode tipo Alt + Tab, para alternar entre
recursos que foram os pilares do encontrar dezenas deles para exibir programas, como o Coverflow App
desktop Gnome 2 e irá ajudar na tran- feeds RSS para fazer uploads de Switcher e o 3D App Switcher. Outras
Veredicto
extensões populares incluem o
Desktop Scroller e o Wobbly Windows. Cinnamon
O Mate não tem extensões oficiais, HHHHH
mas a comunidade contribui com algu- Enlightenment
mas delas para ampliar as funcionalida- HHHHH
Gnome
des de alguns componentes internos. HHHHH
Por exemplo, a extensão Caja-actions, KDE
que adiciona apps ao menu de contex- HHHHH
to, e a extensão de conversão de som, Mate
HHHHH
que converte arquivos de áudio para
Os add-ons
diferentes formatos. Há também um do Gnome 3 os
conjunto de plugins para o editor de tornam muito
texto Pluma e o visualizador de ima- mais flexível.
O Enlightenment possui uma variedade de widgets, gens Eye of Mate, bem com alguns
Grupo Unico PDF Passe@diante
os quais podem ser adicionados ao desktop. applets.

Configurabilidade
Eles são ajustáveis?

O
Gnome tem opções de ferramenta, você pode ajustar a Tanto o Cinnamon como o Mate
configurações básicas, aparência do desktop, exibir itens na incluem muitas opções de
área de trabalho, configurar o painel
incluindo a troca de papel de configurações em suas respectivas
parede, configuração de contas superior e alterar o comportamento centrais de controle. No Mate, o
online e preferências básicas de das janelas, entre outros. painel de controle permite alterar o
privacidade. Para ajustes mais Literalmente, não há limites para estilo do desktop, bem como
amplos, você precisa da ajuda de as opções de personalização do KDE. configurar o hardware e as
terceiros, como o Gnome Tweak Tool, A área de trabalho foi projetada para configurações das ferramentas do
disponível no repositório oficial da desenvolver-se e sofrer mutações de sistema. Ambos os desktops incluem Veredicto
maioria das distros baseadas no acordo com as suas necessidades de o módulo Appearances, que abriga as
Gnome, como Fedora. Com a uso. O KDE possui o bem-definido configurações para trocar o visual do Cinnamon
HHHHH
módulo System Settings, desktop. O Cinnamon também tem o Enlightenment
cujas configurações ficam módulo Effects, com o qual você HHHHH
alojadas no topo em duas pode habilitar/desabilitar efeitos. A Gnome
categorias do painel. Ao usar maior parte das configurações fica HHHHH
KDE
a opção Application na seção Preferences. Usando o HHHHH
Appearance, você pode módulo Panel, por exemplo, você Mate
escolher o tema para os pode ajustar o layout do painel, bem HHHHH
widgets e, também, mudar como movê-lo para o canto da tela, As outras
elementos individuais, como ou ocultá-lo para ganhar espaço na pontuações do
ambiente de
sua cor, ícones e fontes. área de trabalho. desktop são
Além disso, dê uma olhada O Enlightenment também maiores do que a
na opção Desktop Effects, permite personalizar cada detalhe de do Gnome 3 por
que, como o nome sugere, aparência e comportamento. O painel causa das
Algumas KDE, como OpenSUSE, também
customizações
incluem seus próprios assistentes de permite que você ative a de configuração está transbordando internas.
configuração. composição de efeitos. de opções.

12 | Manual do Hacker Especial


Ambientes de desktop

O veredicto
Q
uado se trata de desktop, é desktop é tão maleável que você pode
preciso levar em conta as suas ajustá-lo para que se pareça com o
preferências. Cada ambiente Gnome 3. Essa é a razão pela qual
de desktop é projetado para uma distros como OpenSUSE, Mageia, ROSA
finalidade específica e se ajusta a um e Chakra pareçam tão diferentes umas
tipo particular de usuário. das outras, embora todas venham no
Enlightenment é o desktop mais desktop KDE. Entretanto, KDE é um dos Cada desktop é projetado para uma finalidade e se
exotérico de todos. Toda essa beleza e desktops menos amigáveis para destina a tipos específicos de usuários.
glamour tem um custo: a usabilidade. A usuários novatos e todas as suas
distro mais leve, com menos desse opções de configuração podem ser uma opção nas principais distribuições,
glamour, é a Mate. Entretanto, ela não é desligadas. como Mageia, Fedora e OpenSUSE. Na
muito útil como uma área de trabalho Vamos então considerar vencedor verdade, com poucas extensões, as
se não tiver apps de terceiros. o Cinnamon. O ambiente de desktop é grandes distros suportam oficialmente
Se você precisa de um desktop que uma das razões por trás do sucesso do vários desktops. O OpenSUSE, o
seja utilizável assim que o instala, quem Linux Mint. A distro estava disposta a ir Fedora e Mageia suportam o KDE, o
vence é o Gnome com seu conjunto de longe para agradar aos usuários que Gnome, o Chinnamon e vários outros
apps padrão. Mas ele enfraquece-se deixaram os novos desktops Gnome e desktops, de modo que você precisa
com o seu layout excêntrico. Para ser Unity. Embora o Cinnamon não possua testar algumas para escolher o que
produtivo em um desktop é preciso as personalizações do KDE, ele oferece melhor lhe convier.
confiar em ferramentas de opções
personalização de terceiros. Se você adequadas.
possui um estilo particular de trabalho, “Cinnamon: o ambiente de
Também é intuitivo
e deseja se encarregar do visual e do
comportamento de seu desktop, então
desktop é uma das razões por
para usar, e é por
isso que é
nada será melhor do que o KDE. O trásPasse@diante
oferecido como
Grupo Unico PDF do sucesso do Linux Mint.”

1º Cinnamon HHHHH 2º KDE HHHHH


Web: http://cinnamon.linuxmint.com Licença: GPL v2 Versão: 2.2 Web: www.kde.org Licença: GNU LGPL Versão: 5.1
O desktop liga com sucesso o antigo com o novo. O desktop preferido de quem gosta de personalização.

3º Gnome HHHHH 4º Mate HHHHH


Web: www.gnome.org Licença: GPL, LGPL Versão: 3.14 Web: www.mate-desktop.org Licença: GPL, LGPL Versão: 1.8
É ousado, diferente e ainda é fácil de se acostumar. Para aqueles que gostam de manter o status-quo.

5º Enlightenment HHHHH
Web: www.enlightenment.org Licença: BSD Versão: e19
Ideal para dar um gás em PCs antigos que não conseguem rodar as
distros mais robustas.

Considere também...
Há um sem número de ambientes de desktop muitas pessoas escolhiam o Xfce por causa da muito mais rápida, há o ROX Desktop. Baseia-
que você pode instalar em sua distro Linux similaridade com o Gnome 2. Então, há o se no gerenciador de arquivos ROX Filer e foi
favorita. Existe o Unity, que não tem suporte LXDE que é projetado para uso de recursos e inspirado pela interface de usuário da RISC OS.
fora do Ubuntu, da Canonical. tem ferramentas muito mais simples do que o Algumas distros também usam o gerenciador
Antes do Mate surgir, as pessoas que Xfce. No entanto, tanto o LXDE como o Xfce de janelas do Openbox. Já se você deseja algu-
procuravam por uma alternativa leve aos têm suporte oficial ao sabor da distro Ubuntu: ma coisa mais exótica, então há o JWM que é
desktops de distros mais robustas escolhiam o Lubuntu e o Xubuntu, respectivamente. usado pelo Puppy Linux e funciona muito bem
Xfce ou LXDE. E quando o Gnome 3 surgiu, Se você precisa de uma área de trabalho com hardware antigo.

Manual do Hacker Especial | 13


Distros | Sistemas alternativos

Sistemas
alternativos
Nós adoramos o Linux em todos os seus sabores, mas não é a única
opção de sistema operacional (SO) de código aberto. Aqui, vamos dar
uma olhada em algumas distros alternativas.

Como testamos...
Não é segredo que, quando testamos
sistemas operacionais, os métodos
utilizados para fazer as comparações
podem afetar significativamente os
resultados. Para os nossos testes,
tentamos minimizar quaisquer
Grupo Unico PDF Passe@diante desvantagem de uma ou de outra distro,
testando-as tanto em máquinas virtuais
(no VirtualBox) quanto em hardware real
(um notebook HP com CPU dual core da
AMD e gráficos da Radeon.
Testar o nicho de sistemas operacionais
em um computador real pode trazer
resultados controversos, porque a
experiência do usuário dependerá dos
drivers atuais, mas acreditamos que,
embora algumas pessoas utilizem as
distros em ambiente virtual seguro,
outras serão suficientemente curiosas
para rodá-las em uma partição separada
do disco rígido. Nós comparamos os
sistemas em termos de desempenho,
usabilidade, número de recursos e
disponibilidade de aplicativos, bem como
suporte online e status de
desenvolvimento.

E
xistem muitos sistemas OpenIndiana oferece recursos de populares, rápidos e que
operacionais que são de armazenamento de qualidade proporcionam economia de
código aberto, mas não empresarial (graças ao Sun bateria.
utilizam o kernel do Linux Microsystems), o PC-BSD possui Será que o sistema do Google
ou, pelo menos, possuem o seu todas as vantagens do FreeBSD e baseado em nuvem pode competir
próprio pacote de software para é muito bom para servidores web com a abordagem clássica dos
usuários. Mas por qual razão você (e mais), o Haiku é um projeto outros? Vamos ver. Também vamos
os experimentaria? Bem, pode ser diferenciado que não tem relação descobrir o código aberto puro do
útil estudar diferentes tipos de a sistemas baseados em Unix, projeto GNU/Hwurd e colocá-lo
sistemas operacionais, pois seus mas são muito rápidos; já o alinhado com outros concorrentes.
conjuntos de ferramentas – e Chrome OS é a versão aberta do Nosso objetivo é destacar os
como elas funcionam – podem ser sistema operacional Chrome do sistemas operacionais que melhor
muito eficientes em tarefas Google, que integra os ofereçam aplicações práticas para
específicas. Por exemplo, o Chromebooks cada vez mais o usuário médio de Linux.

14 | Manual do Hacker Especial


Hardware
Eles podem ser executados
nativamente em seu PC?

O
penIndiana inicializa muito um computador real e a maioria dos
bem a partir de um pendrive componentes irá funcionar, incluindo
ou de um DVD e a maioria dos internet sem fio, impressora etc. Claro,
componentes funciona. A lista de nem tudo está completo: por exemplo,
compatibilidade de hardware é mantida o Nvidia Optimus funcionará, mas sem O OpenIndiana possui o Device Driver Utility para
pela comunidade, em http://wiki. uma alternância tão fácil entre chips, e exibir a lista dos drivers atualmente em uso.
openindiana.org/oi/Components, também alguns periféricos com blobs
onde você encontra até mesmo drivers (coleção de dados binários) específicos operacional. No entanto, Haiku lidou
prioritários oficiais da Nvidia para de Linux ficarão sem suporte. bem com vários adaptadores Wi-Fi e,
determinados chips no OpenIndiana. Chromium OS possui kernel Linux surpreendentemente, ofereceu acesso
Chipsets Radeon são suportados com sob o capô e deve lidar com maioria dos instantâneo a redes protegidas WPA2.
o driver VGA básico, e a maioria dos dispositivos de forma aceitável. No O pior em comparação com Veredicto
chips Wi-Fi funciona normalmente. entanto, em razão das limitações dos todas as outras em termos de
PC-BSD fornece o melhor suporte sistemas baseados em nuvem, falta suporte a hardware foi o Debian GNU/ Chromium OS
de hardware e é o mais próximo do que alguns recursos vitais, como suporte ao Hurd. Não há suporte AGP GART HHHHH
Debian GNU/
temos no Linux. O sistema oferece dri- touchpad – o que é estranho, conside- dentro do Mach, forçando quase Hurd
vers oficiais da Nvidia e Intel para hard- rando um sistema operacional direcio- todos os chips de vídeo a funcionar HHHHH
ware de aceleração e suporte nado a notebooks – em alguns modelos. com driver VESA; é usado no máximo Haiku
Gallium3D para a maioria dos chips Por outro lado, o Chromium OS é um 1,7 GB de RAM (o restante será HHHHH
OpenIndiana
Radeon. Entretanto, o melhor desem- dos melhores em oferecer suporte a ignorado silenciosamente); não há HHHHH
penho do Open GL é entregue por Kwin periféricos (graças ao kernel Linux). suporte de som, bem como nenhum PC-BSD
no ambiente de desktop Plasma. O Haiku é uma história diferente. suporte USB (embora alguns teclados HHHHH
Em outros aspectos, o PC-BSD Apenas dois desenvolvedores e mouses funcionem graças ao BIOS Você pode
corresponde às tabelas de trabalham no código dele em tempo emulando interfaces legadas). tentar dar o boot
compatibilidade do FreeBSD, pois
Grupo Unico PDF Passe@diante
integral, de modo que não dá para Encontrar a configuração correta do
em todos os
sistemas, mas
utiliza o mesmo kernel. Isso significa contar com suporte de hardware PC em que o GNU / Hurd será ignore o Hurd.
que você pode instalar o PC-BSD em decente para este pequeno sistema executado seria muito complicado.

Facilidade de instalação
O que é preciso para fazê-los funcionar?

T
odos os cinco concorrentes operacional em um hardware real, BSD recém instalado leva somente
foram fáceis de configurar gravando a ISO em uma mídia alguns minutos, sem aborrecimentos.
no ambiente virtual. física – em um pendrive, por O Chromium OS desapontou nesta
Selecionar o arquivo ISO como exemplo. área porque há somente um modo de
dispositivo primário de O site do OpenIndiana oferece uma rodá-lo. Uma vez que a imagem do OS
inicialização no VirtualBox nos imagem USB, que, na verdade, é um é exibida a partir do drive USB, ele se
permitiu executar todos eles, tanto pouco complicado de passar para um torna automaticamente um dispositi-
a partir de uma instalação como pendrive. Isso pode tornar-se um vo inicializável, com um sistema pron-
no modo Live . Nós também obstáculo para pessoas novatas no to para executar. O guia do desenvol-
desafiamos cada sistema sistema. Em vez disso, uma imagem vedor do Chromium OS tem uma
Veredicto
ISO comum é opção para instalá-lo em um disco rígi-
mais fácil de usar, do, mas não é de fato um instalador, Chromium OS
HHHHH
se você souber mas, sim, scripts simples que execu- Debian GNU/
onde baixá-la. tam um driver de um ambiente de tra- Hurd
O PC-BSD é balho do Chromium OS. HHHHH
exibida facilmente O Haiku é um sistema operacio- Haiku
HHHHH
a partir de um nal mais simples de instalar e usar. Ele OpenIndiana
USB e oferece um oferece o modo Live e um instalador HHHHH
instalador limpo muito bom (e rápido). Debian GNU/ PC-BSD
com visual Hurd oferece muitos modos de insta- HHHHH
baseado no Qt lação, como você tem no Linux Há um empate
na facilidade de
(interface gráfica Debian, mas não tem como rodá-lo instalação do
Chromium OS é fácil de usar, mas difícil de configurar para KDE). Fazer no modo Live, e demorou cerca de PC-BSD e Haiku.
para quem não é desenvolvedor. logon no sistema uma hora para instalar o sistema.

Manual do Hacker Especial | 15


Distros | Sistemas alternativos
Desempenho
O quanto eles são rápidos?

O
fato de já estarmos acostumados O desempenho é importante porque usuário de ter uma experiência de
a inicializar o sistema Linux em desejamos rapidez na instalação e na computação confortável. A diferença
questão de segundos, temos a inicialização, bem como baixas latências entre a performance dos sistemas
expectativa de que podemos fazer o entre um clique do mouse no ícone de um testados foi mais aparente no ambiente
mesmo com outros sistemas operacionais. app e sua real inicialização. Por essa virtual, e mais gritante no bare-metal
O desempenho pode influenciar em muito razão, em nossos testes, procuramos (servidores físicos, em nuvem), , embora
a impressão que temos de um SO, mesmo descobrir os motivos de baixas a experiência seja um pouco modificada,
que ele falhe em termos de recursos. performances e se isso poderia impedir o dependendo do seu hardware real.

Chromium OS HHHHH
Pode haver pouca ou nenhuma queixa sobre o desempenho do Chromium
OS: ele usa o kernel Linux, é baseado no Gentoo e usa as versões mais
recentes de todos os componentes do sistema, removendo quase todas as
aplicações locais. Depois que o servidor X.org é iniciado, o resto é manipulado
pelo browser, incluindo o login e a sessão de usuário, gerenciamento de
janelas etc. O Chromium OS tenta usar versões puras dos pacotes fonte do
Gentoo, mas um número significativo de patches vem do Google e da
comunidade para otimizar o Chrome/Chromium OS em determinado
hardware de destino, como Chromebooks. Portanto, o desempenho do
sistema operacional é muito bom e, se algo parecer lento, é culpa do código
do browser, e não do sistema base. Tendo isso em mente, você pode executar
o sistema em um hardware com 1 GB de RAM e com uma CPU de baixo custo.

Debian GNU/Hurd HHHHH


O Debian GNU/Hurd trouxe finalmente o suporte X.org para o Hurd, de
modo a proporcionar alta performance. Entretanto, a partir da
experiência de usuário de desktop, o sistema é extremamente bugado e
Grupo Unico PDF Passe@diante instável. Para começar, não traz o visual gráfico da área de trabalho
(para a infelicidade do usuário comum) – conseguimos chegar à área
de trabalho LDE por meio da emissão de $ startx sob o root do sistema.
Um desktop com Hurd roda devagar e demora para responder. É difícil
dizer se isso ocorre em razão do desempenho lento 2D com o driver
VESA ou por causa de problemas no microkernel I/O. Nós tentamos
executar o Phoronix Test Suite para o Debian/GNU Hurd, mas
descobrimos que somente alguns testes foram executados, como o
codificador LAME MP3, o C-Ray, o compressor 7-Zip etc. – e todos
indicaram uma baixa operação de 4% a 6% por trás do sistema, mas
não foi possível identificar o motivo da lentidão.

Nível e qualidade de suporte


Quanta ajuda você pode obter na web?

F
icar fora do mundo Linux preciso se aventurar nas buscas do com o público em geral, de modo
Veredicto
significa que, mais cedo ou Google. que, novamente, o jeito é pesquisar
mais tarde, você encontrará PC-BSD é significativamente no Google. Chromium OS
alguns problemas. Então a pergunta melhor em termos de suporte, pois O projeto Haiku tem um manual HHHHH
é: onde você obterá as respostas? possui uma página mantida pela de usuário oficial, um guia para Debian GNU/
O OpenIndiana possui um comunidade (www.pcbsd.org/en/ desenvolvedores e outros materiais Hurd
HHHHH
grande site (http://wiki. community), com uma abundância em www.haiku-os.org/guides. Haiku
openindiana.org) que possui de links para fóruns, listas de Toda a informação é bastante HHHHH
capítulos detalhados sobre endereços, salas IRC, blogs etc. Há concisa. OpenIndiana
construção, instalação e usabilidade também recursos PC-BSD não Finalmente, a documentação HHHHH
PC-BSD
do sistema, mas há uma ressalva: a oficiais e sites Free-BSD relevantes. nos endereços www.gnu.org e HHHHH
informação é direcionada O Chromium OS tem uma série http://www.debian.org/ports/ Os sistemas
principalmente a desenvolvedores e de guias em www.chromium.org/ hurd talvez seja o melhor elemento BSD são fortes
administradores de sistemas, e não chromium-os, incluindo instruções em todo o projeto GNU/Hurd. Não é rivais para o
há em nenhum outro lugar para de Início Rápido, mas parece que de se admirar, pois existe desde os Linux em termos
de suporte.
pesquisar – se quiser mais, será pouca informação é compartilhada anos 1990.

16 | Manual do Hacker Especial


Haiku HHHHH
Porque elogiamos o Chromium OS por ele ser muito rápido e fluido, você
pode pensar que ele seria o sistema operacional mais rápido daqueles
testados aqui. Por que atribuímos somente quatro estrelas a ele então?
Bem, Haiku roda mais rápido do que o Chromium OS; mas rápido do
que qualquer Linux e, claro, mais do que qualquer dos sistemas testados
aqui. Haiku nos surpreendeu, mostrando os melhores números para
cada tarefa iniciada. Demora cerca de 10 segundos para inicializar e de 1
a 2 segundos para abrir qualquer aplicativo. Levando em conta que o
Haiku só tem opção de 32 bit, construído em grande parte com o
compilador GCC2 e sem aceleração gráfica, os resultados são
surpreendentes. Haiku não irá brilhar em operações pesadas de CPU e
em compressões, mas é extremamente rápido em atividades de desktop.

OpenIndiana HHHHH
O desempenho do OpenIndiana cai quando as configurações do sistema usam o
driver básico de vídeo VESA, o que diminui a capacidade de resposta da área de
trabalho. Independentemente do driver de vídeo, o sistema operacional apresenta
um atraso visível ao iniciar e executar várias aplicações. O sistema operacional
depende do sistema de arquivos ZFS em sua partição raiz, que adiciona alguns
recursos ótimos, como snapshots (instantâneos), mas sobrecarrega o desempe-
nho da área de trabalho. O OpenIndiana também usa um modo misto 32/64-bit.
O kernel Unix pode ser executado em 64-bit, enquanto a maioria dos componen-
tes do sistema funciona em 32-bit – é por isso que eles rodam mais lentamente.
O PC-BSD também usa o sistema de arquivos ZFS, e enquanto os dois sistemas
são diferentes em muitos outros aspectos, não há diferença visível quanto à per-
formance na área de trabalho: as operações de arquivos e os gráficos 2D são mais
lentos do que no Linux, mas não chega a ser uma diferença tão notável.

PC-BSD HHHHH
Uma vez instalado, o PC-BSD entrega a tela de login em cerca de um
Grupo Unico PDF Passe@diante
minuto. O desempenho da área de trabalho no KDE é muito bom, tanto no
modo nativo como em virtualização. Não é tão rápido como uma
distribuição mediana de Linux, em razão do baixo desempenho do
sistema de arquivos ZFS em comparação com o ext4 e o suporte mais
básico Gallium3D, mas é ainda é muito útil. Aplicativos como Firefox ou
LibreOffice inicializam em alguns segundos, mas o AppCafe (o gerenciador
de software do PC-BSD) demorou alguns minutos para inicializar, bem
como para buscar e instalar as atualizações – uma experiência muito
desagradável. Em outros aspectos, o sistema operacional funcionou bem.
Além disso, ativou automaticamente VirtualBox Guest Additions e
forneceu gráficos acelerados para o nosso chipset Radeon.

Status de desenvolvimento
O time está por trás do seu sistema operacional alternativo?

P
ara o futuro de um sistema As atualizações do PC-BSD extremamente lento. O último
operacional alternativo é são mais frequentes, com uma lançamento “oficial” (Alpha 4) Veredicto
crucial que ele seja nova versão a cada 3-5 meses, remonta a 2012. Mas o
mantido ativamente, e cada um enquanto o Chromium OS possui movimento Haiku é muito mais Chromium OS
dos apresentados aqui possui um centenas de desenvolvedores, e promissor com eventos regulares HHHHH
Debian GNU/
número diferente de suas versões são sincronizadas e com participações no Summer Hurd
desenvolvedores, de modo que o com as do browse Chromium of Code, do Google. As builds do HHHHH
tempo de lançamento das (versão do Chrome com código Haiku mostram um constante Haiku
atualizações entre eles varia. aberto). Entretanto, não há desenvolvimento, mesmo que os HHHHH
OpenIndiana
O OpenIndiana ainda é forte imagens ISO oficiais para o lançamentos oficiais sejam HHHHH
graças ao forte legado da comunidade sistema operacional do Google, menos frequentes. PC-BSD
OpenSolaris, mas o ritmo de mas sim um conjunto de O Debian GNU/Hurd teve HHHHH
desenvolvimento é um pouco lento. compilações aleatórias de vários uma atualização em 2015, Estamos um
Porém, a versão 2017.4 já está entusiastas. baseada no código base do pouco preocupa-
dos com o futuro
disponível para download (www. O desenvolvimento do Debian 8 (Jessie) e outra no do OpenIndiana
openindiana.org/download/). sistema operacional Haiku é começo de 2017.

Manual do Hacker Especial | 17


Distros | Sistemas alternativos
Recursos e aplicativos
Quantos aplicativos úteis de desktop eles oferecem?

O
OpenIndiana oferece um PC-BSD vem com o AppCafe, um aplicativos da web não são páreos
conjunto básico de aplicativos
gateway para o próprio repositório do com aplicativos locais clássicos.
de desktop em sua nova sistema e um suporte clássico FreeBSD Eles não são inteiramente horríveis,
instalação (o ISO é inferior a 900 MB) e
(somente por meio de linha de mas não combinam como
mais alguns disponíveis em dois comando). Além disso, não aplicativos de desktop, e é
repositórios (repos): um principal e esqueçamos da tecnologia Kldload, que irrelevante comparar aplicativos
outro legado do antigo repositório permite que o BSD execute binários do fortes de desktop, como o Gimp,
opensolaris.org. Existem repositórios Linux, incluindo o Skype, Adobe Flash e com extensões de navegadores na
extras nos endereços http://sfe. alguns outros componentes que estão Chrome Web Store.
opencsw.org e http://smartos.pkg. disponíveis exclusivamente para Linux O Haiku tem um conjunto muito
ec, mas há poucos aplicativos de (pelo menos oficialmente). modesto de aplicativos, disponíveis
Veredicto
desktop lá. O Chrome Chromium oferece um principalmente a partir do
único lugar para HaikuDepot, o gerenciador de Chromium OS
instalar pacotes do sistema. Sites antigos HHHHH
aplicativos extra como BeBits e Haikuware foram Debian GNU/
e é a Chrome descontinuados, embora você possa Hurd
HHHHH
Web Store, que encontrar alguns aplicativos Haiku
é um mercado aleatórios disponíveis para o sistema, HHHHH
aberto para como o Scribus e alguns baseados OpenIndiana
aplicativos da em Qt4. Não é muito, mas já é HHHHH
PC-BSD
web, tanto para alguma coisa. HHHHH
o Google O GNU/Hurd, do time Debian,
O Chromium
Chrome quanto por outro lado, conseguiu gerenciar OS não possui
para o cerca de 78% dos pacotes Debian os mesmos
Chromium OS. para rodar no kernel GNU/Mach, aplicativos de
desktop dos
O comando kldstat mostra quais módulos Linux estão Mas o triste é mas ainda não existe ambientes de
sendo usados pelo BSD.
Grupo Unico PDF Passe@diante
que esses desktop além de Xfce e LXDE.
outros

Primeiro contato
Eles são fáceis de se acostumar?

O
OpenIndiana possui um modo disco rígido. O instalador usa o
Live e apresenta ao usuário o KDE4 como padrão, mas outros
desktop Gnome 2.30 e o podem ser encontrados no
Firefox 10, mas não há o LibreOffice em gerenciador de pacotes AppCafe.
seus repositórios, embora o OpenOffice O primeiro contato com o
esteja lá. Se não se importar com as Chromium OS é meio complicado,
versões ultrapassadas dos pacotes mas depois de alguns minutos é fácil O navegador padrão do Haiku, WebPositive, é
uma aplicação web com base no WebKit.
OpenIndiana, então você ficará de se acostumar com ele. Se você não
satisfeito com elas. O único obstáculo for um desenvolvedor do Chromium,
real pode ser a placa de rede – se uma poderá conseguir uma imagem pré- na internet a partir do browser
conexão não for encontrada construída no endereço http://bit.ly/ WebPositive em segundos. Haiku é Veredicto
automaticamente, você terá que se ArnoldtheBat e gravá-la em um drive muito fácil de usar e configurar, e sua
aventurar em uma configuração USB, usando dd . Depois do boot, você lógica de interface é bastante Chromium OS
manual (acesse http://bit. precisará acessar um prompt de semelhante à do OS X. Isso, em grande HHHHH
ly/1SYuPk2 para obter ajuda). comando por meio do atalho parte, graças a Jean-Louis Gassée, um Debian GNU/
Hurd
O PC-BSD não possui o modo live, Ctrl+Alt+t para abrir o shell e digitar ex-executivo da Apple.
HHHHH
de modo que você será desafiado a shell para acessar a CLI (linha de O Debian GNU/Hurd exige Haiku
criar uma partição no disco para comando) clássica. Depois disso, digite etapas adicionais pós-instalação, HHHHH
instalá-lo. Os sistemas BSD utilizam $ sudo /usr/sbin/chromeos-install, como $ dpkg-reconfigure x11- OpenIndiana
uma convenção de nomenclatura seguido da senha do root (que é a common para permitir que o
HHHHH
PC-BSD
diferente para unidades de disco (por senha para as imagens do link acima), usuário inicie uma sessão X e HHHHH
exemplo, /dev/sda1 será /dev/ e selecione o dispositivo alvo (vale alguns outros truques (detalhes em Haiku pode
ada0s1a). O PC-BSD pode ser lembrar que isso excluirá http://bit.ly/HurdConfig). Mas, superar qualquer
instalado com segurança juntamente completamente o dispositivo). geralmente, o sistema oferece uma versão light do
Linux e também
com uma distribuição do Linux em Assim que o Haiku detectar sua experiência horrível, e não tem a
parece legal.
uma partição diferente do mesmo placa de rede, você estará navegando opção do modo Live.

18 | Manual do Hacker Especial


Sistemas operacionais alternativos

O veredicto
A
variedade de sistemas executar as aplicações BeOS originais,
operacionais de código aberto juntamente com aplicativos Qt4
que existe demonstra que uma relativamente modernos. O
comunidade de desenvolvedores de desenvolvimento do Haiku não é rápido,
mente aberta pode fazer grandes mas as mudanças em alguns recursos
coisas, que valem a pena, pelo menos, são louváveis, como o funcionamento de
experimentarmos em um PC. Você não conexões Wi-Fi protegidas com WPA2,
precisa trocar o seu Linux por outro melhor suporte USB e muito mais.
Você provavelmente não perceberá que não está em
sistema operacional, mas convém O OpenIndiana está envelhecendo,
uma distribuição Linux, até entrar em um terminal.
testá-los, já que todos eles são capazes não há dúvida sobre isso. No passado,
de comandar um desktop. havia grandes esperanças quanto ao navegador Chromium, ele pode ser o
No geral, o PC-BSD é o vencedor, OpenSolaris e, posteriormente, para o sistema ideal você. É rápido, elegante e
com bom desempenho em quase todos projeto OpenIndiana/Illumos, que esconde intencionalmente as
os testes que apresentamos. O sistema deveriam ganhar um novo sopro de configurações do sistema. A abordagem
operacional é rápido, confiável e capaz vida no “verdadeiro” Sistema Unix V e do Chromium OS é interessante, mas a
de reconhecer quase todos os trazê-lo para desktops. No entanto, a verdade é que a computação em nuvem
componentes e periféricos de despeito da nova versão lançada no ainda não pode vencer aplicativos locais
hardware. Falta-lhe o modo Live, o que começo de 2017, pouco trabalho tem clássicos em termos de recursos e
poderia atrair ainda mais a atenção dos sido feito. Mas vale a pena flexibilidade.
entusiastas de código aberto, mas a experimentar o OpenIndiana, pois O quinto lugar pertence ao GNU/
experiência de desktop com o PC-BSD possui um suporte decente para Hurd, uma infame tentativa de criar o
é quase a mesma que esperaríamos hardware moderno. mais puro sistema GNU. Os
em uma distribuição decente do Linux. O Chromium OS é um esforço no desenvolvedores Debian fizeram um
Haiku é um sistema operacional intuito de substituir a computação de ótimo trabalho ao entregar uma
inteligente e realmente diferente dos desktop clássica pela chamada distribuição funcional com um
outros. Há builds feitas com o antigo
Grupo Unico PDF Passe@diante
“computação em nuvem”. Se suas microkernel GNU/Mach, mas ainda está
compilador GCC 2, que ainda pode atividades no PC se encaixam em um longe de ser estável e utilizável.

1º PC-BSD HHHHH 2º Haiku HHHHH


Site: www.pcbsd.org Licença: BSD licence Versão: 10.1.2 Site: www.haiku-os.org Licença: MIT licence Versão: Nightly
Nossa primeira escolha após o Linux, ao escolher um sistema Um sistema operacional surpreendentemente utilizável, ultra rápido e
operacional de código aberto. estável, mesmo em máquinas antigas.

3º OpenIndiana HHHHH 4º Chromium OS HHHHH


Site: http://openindiana.org Licença: Mostly CDDL Versão: 2017.4 Site: www.chromium.org/chromium-os Licença: BSD Versão: 41
É um sistema lento para executar várias aplicações. Um navegador em vez de um sistema operacional completo? Fica
para próxima...

5º Debian GNU/Linux HHHHH


Site: www.debian.org/ports/hurd Licença: GPL Versão: Hurd 0.6
Mesmo depois de anos, ainda está em fase inicial de desenvolvimento.

Considere também...
Poderíamos incluir uma vasta gama de Chromium OS, ainda que seja um sistema Outra opção é o ReactOS, que é um clone
sistemas operacionais diferentes, mas nos operacional baseado no kernel Linux. O do Windows de código aberto. Tem muitos
restringiremos a mencionar apenas quatro. Android x86 pode não se tornar o seu SO benefícios, mesmo que tenhamos receio de
Se você ama tudo o que o Google faz, por que principal para sua área de trabalho, mas que um usuário intermediário de Linux se vire
não tentar o Android x86 (www.android-x86. executa perfeitamente todos os milhares de para a direção errada. Existem muitos outros
org), uma porta Android não oficial, que aplicativos Android, o que pode ser uma boa sistemas de código aberto, desde o pequeno
funciona perfeitamente em desktops. Não alternativa se você não tiver um smartphone KolibriOS até o sólido Darwin – sinta-se livre
tem as desvantagens do sistema operacional Android. para explorá-los.

Manual do Hacker Especial | 19


Distros | Sistemas alternativos

LINUX
VS
WINDOWS

Grupo Unico PDF Passe@diante

É hora de colocar a Microsoft


contra o batalhão Linux

C
olocamos lado a lado o comparamos com seus equivalentes a “Windows como um serviço”
sistema operacional várias distribuições do Linux. (Windows as a service).
Microsoft com o Linux para O discurso de lançamento do A atualização do sistema foi
determinar qual deles sai Windows 10 anunciava uma mudança de “empurrada” para o consumidor
vencedor. Na realidade, isso é o mesmo paradigma no cenário do Windows. Há final que possuía uma máquina
que comparar maçãs e qualificada para o upgrade
laranjas e, depois, pontuar
com bananas: um tem
“Colocamos lado a lado o Windows gratuito (por exemplo, um
Windows 8 legítimo pré
como base o código livre, com o Linux para determinar qual instalado) – este terá
que pode ser executado na sempre a versão mais
maioria dos hardwares, e o
outro, um produto
deles sai vencedor. ” recente do sistema, sem
custo. Além disso, os
proprietário com uma GUI usuários inscritos no
que, até recentemente, funcionava novidades louváveis e, talvez, a mais Windows Insider Program podem
somente em PCs x86. Em nossa notável seja a de que o Windows 10 testar as novas versões do Windows
abordagem, consideramos os recursos represente a última encarnação do antes do seu lançamento oficial –
de uma build do Windows 10 disponível sistema operacional. Isso não significa o uma oportunidade de testar os
até o fechamento desta edição e os fim do Windows, mas o início do novos recursos sem ter de pagar.

20 | Manual do Hacker Especial


Windows é coisa do passado
P
odemos perdoar a Microsoft por
abandonar sua estratégia de fazer
lançamentos discretos, pois isso
não funcionou muito bem. O Windows Vista
não foi bem recebido, principalmente em
razão das exigências mínimas de hardware
para rodar o sistema, mas este teve alguns
pontos positivos.
É bem verdade que aquelas
interrupções constantes do Controle de
Conta de Usuário (UAC) eram irritantes,
mas isso foi uma ideia bem intencionada,
cujo intuito era implementar melhores
privilégios de conta de usuário para o
Windows. O DirectX 10 introduziu novos Poder acampar sob a via láctea não torna um sistema operacional revolucionário.
recursos multimídia interessantes, e o
modelo de driver WDDM proporcionava datam do Windows 3.1. Mas, no geral, aplicativos transitem da interface de um
uma melhor performance gráfica. Mas, podemos dizer que a Microsoft de hoje é dispositivo para a interface de outro
pelo conjunto, o Vista foi visto como um muito diferente daquela de ontem. Ela diferente, sem prejuízo da continuidade
fracasso, ignorado tanto pelos usuários ainda domina os desktops em todo o do trabalho. Quando o Windows Phone
domésticos quanto pelas empresas. Não mundo (embora dividido entre os últimos 10 for lançado, ele permitirá que os
conseguiu nada mais do 21% da parcela cinco sistemas que destacamos linhas usuários conectem seu smartphone a
do mercado. atrás e com as distros de Linux, bem como um monitor, mouse e teclado e use-o
Em suma, possuir uma única versão do com o OS X), mas isso parece que não irá como um PC normal.
Windows significa evitar problemas de durar muito, e o CEO da empresa, Satya Convergência também tem sido uma
fragmentação para a Microsoft e minimizar Nadella, tem consciência disso. das palavra-chave da Canonical desde a
problemas com seus clientes. Muitos A verdadeira batalha está ocorrendo introdução de sua controvertida área de
preferiram ficar com o Windows 8, em vez em dispositivos móveis, e a Microsoft trabalho Unity. Dois smartphones Ubuntu já
Grupo Unico PDF Passe@diante
de fazer o upgrade de sistema, com o receio está ficando para trás nesse segmento. foram lançados, mas dependem da Unity 8,
de encontrar dificuldades. Em questões Um dos recursos mais apreciados do que incorpora o novo servidor de exibição
visuais, o Windows 10 não chega a ser tão Windows 10 é a convergência de Mir. Essas tecnologias ainda têm um longo
diferente do Windows 8.1. Se a Microsoft plataforma: PC, Xbox, dispositivos caminho a percorrer antes de serem
realmente queria evitar nomear sua Windows Mobile, Surface Hubs e até estáveis para o uso em uma área de
última progênie de Windows 9, então o mesmo a compilação do Windows 10 trabalho, embora desenvolvedores
8.2 seria um título muito mais para o Raspberry Pi serão executados corajosos poderão tentar fazê-lo funcionar
interessante. É claro que é um segredo o em um núcleo unificado do Windows, de por meio do canal Ubuntu Next. É claro que
quão diferente é a base do código, mas ao modo que um aplicativo seja executado a Microsoft alcançará a convergência antes
esmiuçar as configurações, você encontrará eficientemente em qualquer uma dessas da Canonical, mas o verdadeiro desafio para
o mesmo Gerenciador de Dispositivos que plataformas. Para tablets/notebooks ambas as partes (ainda peixes pequenos no
existia desde o Windows XP. Você notará conversíveis há também o recurso ecossistema móvel) será aproveitar esse
também os arquivos win.ini e system.ini, que Continuum, que garante que os recurso para conquistar os consumidores.

Fatia de mercado
O Windows 7, lançado três anos depois do de Metro. A despeito de essa versão tirar permanecia estranha. Até hoje, há usuários
Windows Vista, fez um ótimo trabalho em vantagem de notebooks com telas sensíveis tanto do Windows 8.1 como do Windows XP,
melhorar alguns de seus predecessores, ao toque, usuários de desktop se sentiram ambos tomando cerca de 13% da fatia de
tornando-se um sistema operacional melhor desconfortáveis e confusos, principalmente mercado Windows.
do que o Vista. pela falta do menu Iniciar e da área de Atualmente, empresas que ainda utilizam o
A adoção foi bastante cautelosa, mas, no trabalho padrão, que ficavam escondidos XP estão diante de um trilema: não fazer nada,
terceiro trimestre de 2011, conseguiu sob uma interface não muito intuitiva. Este atualizar para o Windows 7 ou fazer uma
superar a fatia de usuários do XP. sistema operacional foi acusado de estar em aposta no Windows 8.1. O primeiro não é uma
Infelizmente para a Microsoft, muitos meio a uma crise de identidade – um misto ideia viável, por muitas razões. O segundo
usuários obstinados se recusavam a sair do de aplicativos para gestos multitoques e para parece ser uma opção mais segura, mas o
XP. De certa forma, o seu mais bem- uso padrão de desktop, causando Windows 7 é um sistema que já tem 8 anos,
sucedido sistema operacional também foi o contradição. O Windows 8.1, uma versão cujo suporte básico terminou em 2015, e o
seu maior tormento. Ainda hoje, 16 anos lançada um ano depois, atendendo a suporte estendido terminará em 2020. O
desde que foi lançado, o dinossauro azul e protestos dos usuários, recuou em muitas de Windows 8.1 talvez seja a melhor solução, dada
verde XP anda por aí (lutando para respirar). suas decisões de projeto e conseguiu ter a semelhança com o seu sucessor, Windows 10,
Em 2012, a Microsoft trouxe o Windows 8, uma aceitação melhor, mas a navegação na pelo menos até que as empresas julguem este
com uma interface denominada inicialmente interface por meio de teclado e mouse ainda suficientemente estável.

Manual do Hacker Especial | 21


Distros | Sistemas alternativos

Recursos familiares
À
medida que as pessoas fazem meio de aplicativos de terceiros desde o XP,
mais e mais em seus desktops – mas utilizados somente como hacks para
abrem várias janelas, como as de agrupar e ocultar entradas na barra de tarefas.
navegador, Skype, players de música, Você, como um leitor bem informado, claro,
YouTube e outras –, os recursos da área já sabe que os desktops virtuais sempre
de trabalho têm se tornado escassos. estiveram no Linux desde os lançamentos
Graças às altas resoluções de telas iniciais do KDE e do Gnome no final da década
atuais, a situação não é tão grave quanto de 1990, e que estiveram também, de várias
antes, mas imagine se você tivesse a formas, muito antes disso no Amiga 1000
capacidade de agrupar diferentes (1985) e no gerenciador de janelas Solbourne.
aplicativos ou janelas em uma única E é muito legal, agora, a Microsoft trazer esse
“área de trabalho virtual”. recurso. Melhor tarde do que nunca, não é?
A versão mais recente do Windows O Task View em si é bastante semelhante
permite que você faça exatamente isso, com ao Activities Overlay do Gnome Shell (a
o recurso Task View. Nesse caso, a pré- janela que exibe os aplicativos em uso). resultados web indesejados) a partir da
visualização de todos os desktops Como o Gnome Shell, o recurso do barra ao lado do botão Iniciar é um ótimo
disponíveis pode ser ativada por meio do Windows 10 também possui uma área recurso, embora isso já exista no Unity e no
clique em um botão na barra de tarefas, ou central de notificação, de modo que a Gnome Shel desde a sua concepção. O
com o atalho das teclas Windows + Tab. Isso bandeja de sistema é dominada por ícones painel de controle do Unity pode até
pode parecer um pouco desajeitado, já que, dançantes e janelas pop-ups para chamar mesmo categorizar vários resultados web,
ao invocar o atalho de teclado, o foco fica a atenção do usuário. mas, obviamente, perde pontos em razão
dentro da visualização da área de trabalho A possibilidade de fazer pesquisas de dos infames resultados patrocinados pela
atual. É necessário um par de aplicativos em tempo real (e obter Amazon, embora isso possa ser
pressionamentos extras para desativado. Ser capaz
realmente percorrer entre as
áreas de trabalho e os “Você, como um leitor bem informado, de visualizar todos os
aplicativos instalados
Grupo Unico PDF Passe@diante
aplicativos em uso.
Desktops virtuais já
claro, já sabe que os desktops virtuais é um recurso útil. Isso
estava presente de
existiam no Windows por sempre estiveram no Linux” forma tímida no

Com a promessa de ser “O Rei dos Dragões”, a loja de aplicativos do Windows ainda é fraca em comparação à do Ubuntu.

22 | Manual do Hacker Especial


Windows 8 (e era uma maneira rápida de
encontrar os recém-instalados) e, de um
jeito mais prático, nos desktops Linux
modernos há cerca de seis anos.
O Windows Powershell existe desde
2006, e a quinta versão veio no sistema
operacional mais recente. Uma das
características mais conhecidas é aquela
que fornece algo parecido com um
gerenciador de pacotes. Esta incrível
tecnologia permite que o usuário localize
aplicativos a partir de repositórios
confiáveis e os instale sem precisar
executar vários passos e responder a uma
série de perguntas. Igualmente simples, os
pacotes instalados podem ser
cuidadosamente removidos sem
complicações. O OneGet (como está sendo
chamada a ferramenta em questão) O modo prático do Gnome de visualizar aplicativos foi implementado no Windows 10
de forma desajeitada.
consiste em uma coleção de cmdlets
(command let) Powershell que interage
com o Chocolatery Nuget, um utilitário de uma janela Powershell (logado como Naturalmente, a Microsoft prefere
terceiro. Até o fechamento desta edição, administrador) e digitar: que os usuários utilizem a sua loja
este recurso oferecia cerca de 3.000 nativa como porta principal para
pacotes, que é bem menor do que qualquer Install-Package -Name Firefox -Provider instalação de um novo software, mas
gerenciador de pacotes Linux. A esperança chocolatey os gurus do Powershell sempre
é que, no futuro, haja muitos outros preferirão este método, mesmo que
repositórios, talvez até um oficial da No comando acima, substitua Mozilla por não haja um patch no APT ou DNF.
Microsoft. Mas, pelo menos, você não Google Chrome, se quiser. O Windows “como um serviço”
precisará mais abrir o Internet Explorer O argumento -Provider foi necessário para (as a service) pode, de certa forma,
somente para baixar o seu browser
Grupo Unico PDF Passe@diante
desambiguar com um outro pacote chamado ser comparado a um sistema
favorito, pois tudo pode ser feito a partir de xFirefox quando testamos. operacional com atualizações
contínuas, como o Arch Linux ou o
Linux Mint Debian Edition. Ao mesmo
tempo, o modelo de lançamento
“multi-ramificado” para empresas é
vagamente semelhante ao modelo de
lançamento do Debian. Na verdade, o
modelo Insider Preview trata-se de
um grande beta antigo, assim como
aconteceu com o SteamOS anos
atrás. É importante destacar que foi
bem interessante o fato de a
Microsoft ter liberado a atualização
grátis para o Windows 10 para quem
possuía uma instalação legítima do
Windows 7 ou superior – até o
fechamento desta edição, ainda era
possível fazê-lo por meio deste link:
https://www.microsoft.com/pt-pt/
A Microsoft finalmente entendeu que seus usuários evoluíram o suficiente para utilizar o accessibility/windows10upgrade.
novo conceito de desktops virtuais.

Windows SSH
Outra implementação que não é estritamente de terceiro, como o vulnerável PuTTY, a atual diretor executivo da empresa, é mais
parte do Windows 10, mas que felizmente foi execução de um servidor envolve a instalação tolerante com o que seus predecessores
incluída, é que o PowerShell foi abençoado do ambiente Cygwin, que é bastante robusto. chamavam de tecnologia “comunista”. Na
com a funcionalidade SSH. Você se conecta a No passado, vários integrantes da Microsoft verdade, a Microsoft contribui para a
uma janela do Windows e usa uma sintaxe haviam pressionado a empresa para inclusão comunidade OpenSSH, e tornou-se um
PowerShell incomum para administrá-lo. do SSH, mas os antigos gestores os colaborador do OpenBSD (curadores do
Embora seja possível executar um cliente SSH dissuadiram dessa ideia. Porém, Nadella, o projeto OpenSSH) Gold.

Manual do Hacker Especial | 23


Distros | Sistemas alternativos

Performance do sistema
V
amos deixar claro uma coisa: (milhares) de bibliotecas ainda não haviam triple-A (leia-se títulos top) têm sido portados
nossa experiência com o sido instaladas, que podem comprometer a para o Linux, e o popular jogo FPS de aventura
Windows 10 foi acompanhada de performance geral do sistema. Dying Light foi lançado para o Linux ao mesmo
bugs e aborrecimentos. Mas durante os Nossa instalação Linux Arch – que foi usada tempo em que foi distribuído para Windows.
testes utilizamos uma versão preview do quase todos os dias por mais de um ano – tem Infelizmente, os números nos dizem que os
sistema, de modo que precisamos dar todos os tipos de pacotes instalados e, ainda jogos para Linux ainda é um coisa de nicho:
esse desconto. Apesar disso, o sistema assim, é rápido. A única exceção costumava cerca de 1% dos usuário do Steam. Mesmo
operacional, uma vez instalado em um ser reprodução de vídeo em Flash, que assim, é cerca de 1,2 milhão de usuários ativos
computador com o hardware rapidamente prejudicava o sistema. Isso foi dentre 125 milhões de contas de usuários
apropriado, de modo geral é facilmente resolvido ao desinstalarmos o ativas. Muitos usuários de Linux, optam por ter
impressionantemente rápido. plugin Flash, que é totalmente desnecessário instalação dual boot, de modo a manter uma
Atendendo às frustrações de muitos hoje em dia, e serve somente como um meio instalação do Windows exclusivamente para
usuários do Windows 7, que lamentaram para a entrega de vírus. jogos, para desfrutarem de uma maior seleção
sobre a demora no desligamento e Para desfrutar do Windows 10 de modo a de títulos.
reinicialização do sistema, a Microsoft obter uma boa performance, é preciso instalá- Há uma grande quantidade de títulos
resolveu agir. Então, no Wondows 8, um lo em um computador moderno (veja a seção indie disponíveis para Linux, e muitos deles
novo truque foi introduzido: os processos de hardware) – executá-lo em uma máquina rodam tão bem quanto no Windows. Porém,
do sistema são muitos títulos mais
encaminhados para o disco
rígido, para que possam ser
“Há uma grande quantidade de renomados, muitas vezes, são
mal portados para o sistema.
rapidamente recarregados
durante a próxima
títulos indie disponíveis para O principal problema é a
conversão do DirectX para o
inicialização. Esta Linux, e muitos deles rodam tão OpenGL. Para melhores
hibernação parcial do
sistema significa que
bem quanto no Windows” resultados, os usuários
precisam recorrer ao uso de
somente os processos precisam ser virtual é uma experiência dolorosa. Em drivers proprietários para a maioria dos
carregados a partir do zero, de modo que comparação, qualquer computador fabricado jogos, e a Nvidia (embora com uma atenção
Grupo Unico PDF Passe@diante
o tempo necessário para acessar a tela de nos últimos dez anos funcionará com sucesso fraca para a comunidade de código aberto)
login seja diminuído. Esta técnica é ainda em uma área de trabalho leve, como LXQt ou tende a superar a AMD em termos de
mais evidente no Windows 10, que Mate, com absolutamente zero de problema. E, performance.
consegue inicializar a partir de um disco ao adicionar uma placa de vídeo mais A Mesa, uma implementação de software
SSD em cerca de seis segundo, cujo moderna (que suporte, pelo menos, OpenGL livre do OpenGL, só oferece atualmente
tempo é quase o mesmo para obter o 1.4 e que possua 128 MB de memória) e você suporte para o OpenGL 3.3, que já tem mais
Grub para o gerenciar de login do SDDM poderá gerenciar facilmente uma instalação de seis anos. As versões mais recentes dos
em uma instalação Arch. A navegação pela padrão do Ubuntu. drivers proprietários suportam versão 4.5. A
interface também ficou mais rápida. A A área de jogos é onde o Linux continua AMD fez esforços para romper o
única diferença é que usamos a instalação sendo superado pelo Windows, mas a situação estrangulamento do DirectX com a nova
do Windows por durante uma semana, está melhorando – já existe mais de 1.000 tecnologia Mantle, com a promessa de
uma vez que alguns aplicativos e algumas jogos para Linux no Steam. Muitos títulos chegar ao Linux. Vimos muito burburinho
quando o Butterfield 4 foi lançado (com um
aumento de desempenho de até 45% em
relação ao Direct3D), mas, atualmente,
embora não tenha abandonado a Mantle, a
AMD parece estar concentrando seus
esforços em outros lugares.
As novas técnicas OpenGL, apelidadas
de Approaching Zero Driver Overhead
(AZDO), oferecem performance similar, tal
como DirectX 12. OpenGL tem mais de 20
anos e, como o protocolo X, será
eventualmente descontinuado. Seus
administradores, Khronos Group, já
anunciaram seu sucessor – o Vulkan. A
engine Source 2, da Valve, já suporta o
Vulkan, e outros já estão seguindo esse
exemplo. Enquanto isso, muitos das
principais engines de jogos (Cryengine, Unity,
Unreal etc) suportam o Linux por meio do
A série Borderlands é um dos grandes títulos disponíveis para Linux, bem como Bioshock OpenGL, de modo que o número de títulos
Infinite e Shadow of Mordor que foram portados recentemente. disponíveis irá aumentar.

24 | Manual do Hacker Especial


Desktop e aplicativos
A
área de trabalho do Windows
10 não é para todos – os
usuários que vêm do Windows
7 têm de pensar nos Live Tiles (blocos
de apps e funções), e algumas
configurações são difíceis de
encontrar. O antigo painel de controle
ainda existe, mas também há um novo
simplesmente chamado
Configurações, disponível a partir do
menu Iniciar. Essa dualidade também
existe no próprio menu Iniciar, que é
composto por dois painéis: o menu
Iniciar em si, e os Live Tiles à direita.
Aplicativos podem ser adicionados,
embora desajeitadamente, da
esquerda para a direita.
Além de jogos, um ponto que até agora
impedia a muitos de migrarem para o
sistema era o ecossistema de aplicativos.
Seja jogar os games mais recentes,
mexer com relatórios no Microsoft Word
ou tratar imagens no Photoshop, sempre O Windows 10 fez muito alarde sobre esta aplicação Mapas – aqui, nos mostra Portland –,
mas também é possível usar mapas Bing em qualquer plataforma.
haverá coisas que não poderão ser
replicadas em um ambiente Linux.
Porém, fora do local de trabalho, o os aplicativos ainda são instalados no tela sensível ao toque e, embora ainda
Microsoft Office está perdendo o seu computador, mas no futuro poderemos tenha uma interface dúbia, funciona
domínio. A maioria das pessoas vai
Grupo Unico PDF Passe@diante
vê-los como aplicação em nuvem. também de modo tradicional quando
encontrar o que precisa no LibreOffice e Quando isso acontecer, e se o fizerem de usado com teclado e mouse.
muitos preferem trabalhar online com o forma adequada, então as pessoas No geral, a área de trabalho do
Google Docs. O Gimp é Windows 10 é mais
mais do que suficiente parecida com a interface
para a edição de fotos, “No geral, a área de trabalho do de usuário Cinnamon do
mas os experts em Linux. Parte do motivo da
Photoshop ainda o Windows 10 é mais parecida popularidade do Linux Mint
zombarão dele. Como
usuário de Linux, se
com a interface de usuário é esta área de trabalho,
que é ao mesmo tempo
você já teve dificuldade Cinnamon do Linux.” moderna e tradicional,
de abrir um arquivo . respeitando o antigo
doc que o Google ou LibreOffice não finalmente serão capazes de viver o paradigma WIMP (Windows, Ícones,
pôde abrir, então você pode usar o Office sonho de executá-los no Linux. Os Menus e Ponteiros). O Plasma 5, a
online (por meio de uma conta Microsoft) softwares de código aberto estão última encarnação da área de trabalho
para convertê-lo em um PDF. melhorando cada vez mais, de modo que do KDE, é outra boa escolha que
Por meio do Office365 e da Creative Inkscape e Krita podem tomar usuários mantém o desktop tradicional e,
Cloud, a Microsoft e a Adobe estão do Illustrator, e o Scribus poderia ter também, funciona com telas sensíveis
migrando suas operações para a nuvem parceria om o InDesign. ao toque (estamos assumindo que você
e mudando seus modelos de negócio O Windows 10 é surpreendentemente encontre um tela sensível ao toque que
baseado em assinaturas. No momento, agradável de usar em um dispositivo de funcione com o Linux).

Antigos sistemas, novas coisas


Para usuários que usam hardware Pantheon, da elementaryOS. E há os alguns atalhos de teclado assimilados, a
antigo, ou aqueles que não se pioneiros Unity e o Gnome. Não há experiência flui mais rápido.
preocupam com desktops antigos, há como negar que são difíceis de se O Navegador Edge do Windows 10 é
todos os tipos de desktops leves acostumar, mas o Gnome em particular parecido com o próprio Internet
disponíveis, como Xfce, LXQt e MATE. Já está ganhando cada vez mais Explorer, que parece rodar bem, mas
as pessoas que procuram áreas de seguidores. Uma vez que os hábitos de dificilmente baterá o Google Chrome ou
trabalho mais belas devem testar o desktop antigos sejam superados e o Chromium, que são multiplataforma.

Manual do Hacker Especial | 25


Distros | Sistemas alternativos

Hardware e drivers
P
ara aqueles que têm um Resta esperar que, em
computador antigo em dual boot contrapartida, os
com Windows 7, ou mesmo XP, e fabricantes continuem
está considerando fazer um upgrade atualizando seus
para o Windows 10, então é preciso ter drives.
em mente os requerimentos mínimos de Quando as pessoas
sistema: processador de 1 GHz, 1 GB de consideram migrar
RAM (2 GB para 64-bit), 16 GB de para o Linux, muitas
espaço em disco e placa de vídeo com delas ficam
DirectX 9 (com drive WDDM). Esta é preocupadas com a
uma configuração modesta, compatibilidade do
especialmente considerando as hardware. Nesse
imposições do Windows Vista quando quesito, as coisas
do seu lançamento anos atrás. estão melhorando,
O DirectX 9 existe desde 2004, mas o mas ainda há alguns
hardware daquela época provavelmente dispositivos não
não atenderá aos requisitos do driver. suportados: alguns
O Windows 10 vem não com um mas com dois painéis de
Porém, você pode contar com a abundân- chips gráficos de
controle para ajudá-lo a configurar o sistema ou ajustar algum
cia de hardware ligeiramente mais recen- notebooks mais harware problemático.
te, como a série 600 da Nvidia Geforce de antigos são
2004, ou a série HD2xxx da AMD de 2006 modificados pelos OEMs, de modo que não funcionarão com alguns poucos dispositivos.
(que naquela época era produzida pela são mais reconhecidos por alguns drivers Muitas vezes, os drivers sem fio publicados
empresa ATI). Estes são os requisitos (embora quando isso ocorrer, os drivers de são apenas as partes mais importantes dos
mínimos, portanto, não espere obter uma código aberto poderão resolver o problema). drivers do Windows que foram adicionadas ao
ótima experiência de uso. Da mesma forma, alguns periféricos como programa ndiswrapper.
Ao usar somente 2 GB de RAM, você controle remoto e placas de TV não são É fácil de esquecer que problemas de
não conseguirá abrir muitas abas do suportados pelo Linux. Sem dúvida, você drivers também ocorrem no Windows.
Chrome, seja qual for o seu sistema
Grupo Unico PDF Passe@diante
verá pessoas em fóruns reclamando sobre Talvez mais do que nunca, graças aos
operacional. Além disso, com um placas sem fio que não funcionam, mas requisitos de assinatura de driver do
processador antigo, um Celeron de 1 GHz, 90% do tempo devido à falta de firmware sistema. Uma placa-mãe exigirá drivers
por exemplo, você perderá muito tempo (que não pode ser empacotado com a para o seu chipset, interface de rede,
esperando o Windows carregar. Seria um maioria das distros, mas está disponível no controlador RAID, dispositivo de áudio e
absurdo comparar os números de pacote linux-firmware ou pode ser extraído vários outros drivers de plataforma. Drivers
frequência bruta entre as CPUs antigas e de drivers Windows por meio de ferramentas para hardware moderno são encontrados
as novas – os processadores multi-GHz como b43-fwcutter). nos sites dos fabricantes, mas você
existem há mais de 10 anos e um antigo Novos usuários convertidos para o Linux, precisará conhecer a versão correta para
Athlon 64 x2 4800 (2.4GHz) não chega muitas vezes, cometem o erro de ir procurar que tudo funcione como esperado. No
nem perto de um Intel Core i3-370M manualmente os drivers. Esta é uma má ideia, entanto, os downloads desses drives
encontrado nos notebooks de baixo custo. pois as distros vêm com drivers para a maioria possuem, muitas vezes, centenas de
É preciso dar o crédito ao que é devido: é dos hardwares suportados no Linux sob a megabytes, porque vários fabricantes
ótimo ver a Microsoft fazer esforço para forma de módulos kernel carregados insistem em empacotar todo tipo de
suportar (pelo menos nominalmente) automaticamente à medida que cada parte de bloatware (utilitários pré-instalados).
hardware antigo, embora não seja de seu hardware é detectada e, embora eles possam Drivers Linux, ao contrário, são submetidos
interesse fragmentar a sua base de precisar ocasionalmente de pequenos ajustes ao escrutínio de vários mantenedores do
usuários. Há uma gama bastante grande de configuração, é raro que você tenha de subsistema (e, possivelmente, mesmo o
de recursos gráficos que o sistema ajusta substituí-los. Alguns fabricantes oferecem próprio Linus) e são garantidos para serem
automaticamente para que a experiência downloads de driver Linux nos sites deles, tão eficientes e bem codificados quanto o
do usuário seja tão fluida quanto possível. mas, na maioria das vezes, estes só conhecimento de hardware o permitir.

Drivers gráficos
Novas placas gráficas tendem a funcionar AMD é mais amigável com driver Radeon
corretamente no Windows, mas, de código aberto, oferecendo não só as
eventualmente, os drivers Linux também especificações, mas também remunera
alcançarão a performance desejada. Eles pessoas para que trabalhem nisso. A
estarão disponíveis tão logo as novas inovação mais recente da AMD tem sido a
placas gráficas sejam colocadas no introdução de um módulo kernel comum
mercado, por exemplo, a Nvidia já fornece para o seu driver de código aberto e driver
drivers para as placas 980 Ti e Titan X. A proprietário Catalyst.

26 | Manual do Hacker Especial


Muito além do desktop
O
novo grande recurso do Windows
Server é o Active Directory
Federation Services (ADFS), que
permite ao usuário de banco de dados e
diretórios externos ser autenticado pelos
domínios Active Directory. O próprio ADFS
faz parte do sistema operacional desde o
Windows Server 2003 R2 e permite que
dois domínios estabeleçam uma confiança
mútua para que o usuário de um domínio
use suas credenciais no outro.
Já existe soluções comerciais para
autenticar clientes Linux contra um
controlador de domínio Active Directory, As atualizações do Windows continuam dolorosas, mas gostamos muito do tom de
e é possível (embora complicado) fazê-lo desculpas dessa mensagem: “Infelizmente, está demorando mais do que o habitual”.
usando o software de código aberto. O
Active Directory usa LDAP e Kerberos, pode ser tratado por meio de outras extensão modular, sendo mais escalável
que são padrões abertos. Esses precisam ferramentas Linux. em sistemas multiprocessadores. Para
ser vinculados com o SAMBA e o PAM, e Uma tática comum em ambientes melhorar o desempenho, o IIS usa um
o controlador de domínio, heterogêneos é que as máquinas que não driver em nível de kernel para processar
provavelmente, precisará ser ajustado sejam do Windows autentiquem um servidor solicitações HTTP. Uma vulnerabilidade
também. Na nova versão, este processo de diretório executando algo diferente do do IIS descoberta no ano passado
deve ser muito mais simplificado. Active Directory, mas que sejam capazes de permitiu que invasores conseguissem
A autenticação centralizada em um sincronizar a partir dele. Isso é conhecido realizar a execução remota de código
ambiente Linux puro pode ser alcançada como “integração desviada”. em sistemas sem correções de
usando os protocolos mencionados acima. A versão 10 do Internet Information segurança, explorando esse driver e o
Todas essas abordagens têm suas Services (IIS) está incluída no Windows 10, respectivo status.
vantagens e desvantagens, e aqueles que
Grupo Unico PDF Passe@diante
trazendo consigo suporte para HTTP/2. O Linux continua sendo o campeão
vêm do Windows podem ter dificuldade de Naturalmente, nossos três principais incontestável do mundo do servidor. Há
recriar a funcionalidade mais avançada do servidores web Linux (Apache, Nginx e servidores e bancos de dados de classe
Active Directory. É importante notar que o Lighttpd) tiveram suporte depois que o mundial, distribuidores de classe
Active Directory fornece mais do que RFC7540 foi publicado. E estavam apoiado industrial (como Red Hat Enterprise
somente uma autenticação, pois ele no SPDY, especialmente o protocolo Linux e o CentOS) e com a vantagem
também lida com todas as ferramentas de HTTP/2, antes disso. de ser de código aberto. As máquinas
segurança relacionadas – confiança, Antes da versão 7.0, o IIS não passava de virtuais do Linux tendem a ser mais
certificados, domínios, políticas de grupo um servidor web precário que não permitia baratas do que aquelas disponíveis para
etc. Muitos delas são importantes mais de 10 conexões simultâneas. Agora, ele Windows, bem como mais eficientes
somente em sistemas Windows, e o resto está melhor e incorporou um sistema de graças à sua natureza modular.

Windows IoT para Raspberry Pi


O Windows Server Core, introduzido em ser programados em C#, C++ ou JavaScript
2008, forneceu um sistema operacional e com um uma camada de apresentação
servidor minimalista, sem o shell Explorer e XAML, HTML ou DirectX. Você pode se
muitos outros recursos dispensáveis para a conectar a um Pi executando o Windows IoT
maioria das pessoas. Continuando nesta Core por meio de um Power Shell ou SSH.
linha, temos agora o core Windows 10 IoT, Estamos muitos longe de ser imparcial aqui,
voltado para pequenos dispositivos da mas nós acreditamos que reduzir o Pi para
Internet das Coisas. No momento, as builds o status mínimo desta maneira prejudica
estão disponíveis para cinco dispositivos, seriamente o apelo do produto. Ser capaz
incluindo o Raspberry Pi 2. Isto não significa de dar o boot em uma área de trabalho objeto que contém um sistema de
que você estará executando o Edge e os apropriada (mesmo que seja lento e computação para propósito especial, que
Live Tiles em toda a área de trabalho do Pi. desajeitado no Pi original), ou executar o pode ou não se conectar à internet).
Na verdade, não há uma área de trabalho Pi. código diretamente do interpretador Há todos os tipos de distros Linux
Todo o código está escrito no Visual Studio Python, ajuda aos novos programadores a projetadas para serem executadas em
em uma máquina Windows 10 e carregado tornar esta pequenina placa em um dispositivos incorporados, incluindo Yocto
no Pi. computador totalmente funcional. Claro, se Sancto e Angstrom. Também vale a pena
Todas as builds disponíveis permitem você for um programador experiente em mencionar que já existe um grande numero
que os programas construídos na aplicativos para dispositivos incorporados, de dispositivos incorporados executando
Plataforma Universal do Windows sejam poderá tirar o maior proveito (nota do Linux de uma forma ou de outra: em TVs,
executados, o que significa que eles devem tradutor: um dispositivo incorporado é um set top boxes e muitos outros.

Manual do Hacker Especial | 27


< Time.zone.now #!/usr/bin/en python import pygame from random import randrange MAX_STARS = 100 pygame.init() screen = pygame.display.set_m
RS): star = [randrange(0, 639), randrange(0, 479), randrange(1, 16)] stars.append(star) while True: clock.tick(30) for event in pygame.event.get(): if e
HiRes qw(usleep); use Curses; $screen = new Curses; noecho; curs_set(0); for ($i = 0; $i < $numstars ; $i++) { $star_x[$i] = rand(80); $star_y[$i] = rand
umstars ; $i++) { $star_x[$i] -= $star_s[$i]; if ($star_x[$i] < 0) { $star_x[$i] = 80; } $screen->addch($star_y[$i], $star_x[$i], “.”); } $screen->refresh; usle
rspec-rails”, “~> 2.13.0” $ gem install bundler $ gem install rails --version=3.2.12 $ rbenv rehash $ rails new todolist --skip-test-unit respond_to do |forma
ce: ‘...’ } format.json { head :no_content } else format.html { render action: “edit” } format.json { render json: @task.errors, status: :unprocessable_entity } $
undle exec rake db:migrate $ bundle exec rake db:migrate $ bundle exec rails server validate :due_at_is_in_the_past def due_at_is_in_the_past errors.a
mport pygame from random import randrange MAX_STARS = 100 pygame.init() screen = pygame.display.set_mode((640, 480)) clock = pygame.time.C
e(0, 479), randrange(1, 16)] stars.append(star) while True: clock.tick(30) for event in pygame.event.get(): if event.type == pygame.QUIT: exit(0) #!/usr/bin/
urses; noecho; curs_set(0); for ($i = 0; $i < $numstars ; $i++) { $star_x[$i] = rand(80); $star_y[$i] = rand(24); $star_s[$i] = rand(4) + 1; } while (1) { $screen->
< 0) { $star_x[$i] = 80; } $screen->addch($star_y[$i], $star_x[$i], “.”); } $screen->refresh; usleep 50000; gem “therubyracer”, “~> 0.11.4” group :developm
rails --version=3.2.12 $ rbenv rehash $ rails new todolist --skip-test-unit respond_to do |format| if @task.update_attributes(params[:task]) format.html
ml { render action: “edit” } format.json { render json: @task.errors, status: :unprocessable_entity } $ bundle exec rails generate migration add_priority_to_
te $ bundle exec rails server validate :due_at_is_in_the_past def due_at_is_in_the_past errors.add(:due_at, ‘is in the past!’) if due_at < Time.zone.now
ARS = 100 pygame.init() screen = pygame.display.set_mode((640, 480)) clock = pygame.time.Clock() stars = for i in range(MAX_STARS): star = [randrang
ck.tick(30) for event in pygame.event.get(): if event.type == pygame.QUIT: exit(0) #!/usr/bin/perl $numstars = 100; use Time::HiRes qw(usleep); use Cur
+) { $star_x[$i] = rand(80); $star_y[$i] = rand(24); $star_s[$i] = rand(4) + 1; } while (1) { $screen->clear; for ($i = 0; $i < $numstars ; $i++) { $star_x[$i] -
$star_x[$i], “.”); } $screen->refresh; usleep 50000; gem “therubyracer”, “~> 0.11.4” group :development, :test do gem “rspec-rails”, “~> 2.13.0” $ gem i
olist --skip-test-unit respond_to do |format| if @task.update_attributes(params[:task]) format.html { redirect_to @task, notice: ‘...’ } format.json { head :no
task.errors, status: :unprocessable_entity } $ bundle exec rails generate migration add_priority_to_tasks priority:integer $ bundle exec rake db:migrate
_the_past def due_at_is_in_the_past errors.add(:due_at, ‘is in the past!’) if due_at < Time.zone.now #!/usr/bin/en python import pygame from random i
_mode((640, 480)) clock = pygame.time.Clock() stars = for i in range(MAX_STARS): star = [randrange(0, 639), randrange(0, 479), randrange(1, 16)] stars
ype == pygame.QUIT: exit(0) #!/usr/bin/perl $numstars = 100; use Time::HiRes qw(usleep); use Curses; $screen = new Curses; noecho; curs_set(0); for (
_s[$i] = rand(4) + 1; } while (1) { $screen->clear; for ($i = 0; $i < $numstars ; $i++) { $star_x[$i] -= $star_s[$i]; if ($star_x[$i] < 0) { $star_x[$i] = 80; } $sc
“therubyracer”, “~> 0.11.4” group :development, :test do gem “rspec-rails”, “~> 2.13.0” $ gem install bundler $ gem install rails --version=3.2.12 $
ask.update_attributes(params[:task]) format.html { redirect_to @task, notice: ‘...’ } format.json { head :no_content } else format.html { render action: “ed
ndle exec rails generate migration add_priority_to_tasks priority:integer $ bundle exec rake db:migrate $ bundle exec rake db:migrate $ bundle exec ra
(:due_at, ‘is in the past!’) if due_at < Time.zone.now #!/usr/bin/en python import pygame from random import randrange MAX_STARS = 100 pygame.i
stars = for i in range(MAX_STARS): star = [randrange(0, 639), randrange(0, 479), randrange(1, 16)] stars.append(star) while True: clock.tick(30) for ev
$numstars = 100; use Time::HiRes qw(usleep); use Curses; $screen = new Curses; noecho; curs_set(0); for ($i = 0; $i < $numstars ; $i++) { $star_x[$i] = r
ar; for ($i = 0; $i < $numstars ; $i++) { $star_x[$i] -= $star_s[$i]; if ($star_x[$i] < 0) { $star_x[$i] = 80; } $screen->addch($star_y[$i], $star_x[$i], “.”); } $scree
, :test do gem “rspec-rails”, “~> 2.13.0” $ gem install bundler $ gem install rails --version=3.2.12 $ rbenv rehash $ rails new todolist --skip-
mat.html { redirect_to @task, notice: ‘...’ } format.json { head :no_content } else format.html { render action: “edit” } format.json { render json: @task.errors
rity_to_tasks priority:integer $ bundle exec rake db:migrate $ bundle exec rake db:migrate $ bundle exec rails server validate :due_at_is_in_the_past d
one.now #!/usr/bin/en python import pygame from random import randrange MAX_STARS = 100 pygame.init() screen = pygame.display.set_mode((64
[randrange(0, 639), randrange(0, 479), randrange(1, 16)] stars.append(star) while True: clock.tick(30) for event in pygame.event.get(): if event.type == pyg
Grupo Unico PDF Passe@diante
; use Curses; $screen = new Curses; noecho; curs_set(0); for ($i = 0; $i < $numstars ; $i++) { $star_x[$i] = rand(80); $star_y[$i] = rand(24); $star_s[$i] = ra
x[$i] -= $star_s[$i]; if ($star_x[$i] < 0) { $star_x[$i] = 80; } $screen->addch($star_y[$i], $star_x[$i], “.”); } $screen->refresh; usleep 50000; gem “therubyra
gem install bundler $ gem install rails --version=3.2.12 $ rbenv rehash $ rails new todolist --skip-test-unit respond_to do |format| if @task.update_attrib
ad :no_content } else format.html { render action: “edit” } format.json { render json: @task.errors, status: :unprocessable_entity } $ bundle exec rails gener
te $ bundle exec rake db:migrate $ bundle exec rails server validate :due_at_is_in_the_past def due_at_is_in_the_past errors.add(:due_at, ‘is in the pas
import randrange MAX_STARS = 100 pygame.init() screen = pygame.display.set_mode((640, 480)) clock = pygame.time.Clock() stars = for i in range(MA
.append(star) while True: clock.tick(30) for event in pygame.event.get(): if event.type == pygame.QUIT: exit(0) #!/usr/bin/perl $numstars = 100; use T
for ($i = 0; $i < $numstars ; $i++) { $star_x[$i] = rand(80); $star_y[$i] = rand(24); $star_s[$i] = rand(4) + 1; } while (1) { $screen->clear; for ($i = 0; $i < $num
een->addch($star_y[$i], $star_x[$i], “.”); } $screen->refresh; usleep 50000; gem “therubyracer”, “~> 0.11.4” group :development, :test do gem “rspec-rai
v rehash $ rails new todolist --skip-test-unit respond_to do |format| if @task.update_attributes(params[:task]) format.html { redirect_to @task, notice: ‘...
at.json { render json: @task.errors, status: :unprocessable_entity } $ bundle exec rails generate migration add_priority_to_tasks priority:integer $ bundle
lidate :due_at_is_in_the_past def due_at_is_in_the_past errors.add(:due_at, ‘is in the past!’) if due_at < Time.zone.now #!/usr/bin/en python import pyg
pygame.display.set_mode((640, 480)) clock = pygame.time.Clock() stars = for i in range(MAX_STARS): star = [randrange(0, 639), randrange(0, 479), ran
event.get(): if event.type == pygame.QUIT: exit(0) #!/usr/bin/perl $numstars = 100; use Time::HiRes qw(usleep); use Curses; $screen = new Curses; no
_y[$i] = rand(24); $star_s[$i] = rand(4) + 1; } while (1) { $screen->clear; for ($i = 0; $i < $numstars ; $i++) { $star_x[$i] -= $star_s[$i]; if ($star_x[$i] < 0) { $star
ep 50000; gem “therubyracer”, “~> 0.11.4” group :development, :test do gem “rspec-rails”, “~> 2.13.0” $ gem install bundler $ gem install rails --versio
mat| if @task.update_attributes(params[:task]) format.html { redirect_to @task, notice: ‘...’ } format.json { head :no_content } else format.html { render act
y } $ bundle exec rails generate migration add_priority_to_tasks priority:integer $ bundle exec rake db:migrate $ bundle exec rake db:migrate $ bundle e
s.add(:due_at, ‘is in the past!’) if due_at < Time.zone.now #!/usr/bin/en python import pygame from random import randrange MAX_STARS = 100 pyg
Clock() stars = for i in range(MAX_STARS): star = [randrange(0, 639), randrange(0, 479), randrange(1, 16)] stars.append(star) while True: clock.tick(3
/bin/perl $numstars = 100; use Time::HiRes qw(usleep); use Curses; $screen = new Curses; noecho; curs_set(0); for ($i = 0; $i < $numstars ; $i++) { $sta
$screen->clear; for ($i = 0; $i < $numstars ; $i++) { $star_x[$i] -= $star_s[$i]; if ($star_x[$i] < 0) { $star_x[$i] = 80; } $screen->addch($star_y[$i], $sta
group :development, :test do gem “rspec-rails”, “~> 2.13.0” $ gem install bundler $ gem install rails --version=3.2.12 $ rbenv rehash $ rails new todol
sk]) format.html { redirect_to @task, notice: ‘...’ } format.json { head :no_content } else format.html { render action: “edit” } format.json { render json: @t
n add_priority_to_tasks priority:integer $ bundle exec rake db:migrate $ bundle exec rake db:migrate $ bundle exec rails server validate :due_at_is_in_th
< Time.zone.now #!/usr/bin/en python import pygame from random import randrange MAX_STARS = 100 pygame.init() screen = pygame.display.set_m
RS): star = [randrange(0, 639), randrange(0, 479), randrange(1, 16)] stars.append(star) while True: clock.tick(30) for event in pygame.event.get(): if e
HiRes qw(usleep); use Curses; $screen = new Curses; noecho; curs_set(0); for ($i = 0; $i < $numstars ; $i++) { $star_x[$i] = rand(80); $star_y[$i] = rand
umstars ; $i++) { $star_x[$i] -= $star_s[$i]; if ($star_x[$i] < 0) { $star_x[$i] = 80; } $screen->addch($star_y[$i], $star_x[$i], “.”); } $screen->refresh; usle
rspec-rails”, “~> 2.13.0” $ gem install bundler $ gem install rails --version=3.2.12 $ rbenv rehash $ rails new todolist --skip-test-unit respond_to do |forma
ice: ‘...’ } format.json { head :no_content } else format.html { render action: “edit” $ bundle exec rake db:migrate $ bundle exec rake db:migrate $ bund
rors.add(:due_at, ‘is in the past!’) if due_at < Time.zone.now #!/usr/bin/en python import pygame from random import randrange MAX_STARS = 100 pyg
Clock() stars = for i in range(MAX_STARS): star = [randrange(0, 639), randrange(0, 479), randrange(1, 16)] stars.append(star) while True: clock.tick(3
/bin/perl $numstars = 100; use Time::HiRes qw(usleep); use Curses; $screen = new Curses; noecho; curs_set(0); for ($i = 0; $i < $numstars ; $i++) { $sta
$screen->clear;28 | Manual do=Hacker
for ($i 0; $i <Especial
$numstars ; $i++) { $star_x[$i] -= $star_s[$i]; if ($star_x[$i] < 0) { $star_x[$i] = 80; } $screen->addch($star_y[$i], $sta
group :development, :test do gem “rspec-rails”, “~> 2.13.0” $ gem install bundler $ gem install rails --version=3.2.12 $ rbenv rehash $ rails new todol
mode((640, 480)) clock = pygame.time.Clock() stars
event.type == pygame.QUIT: exit(0) #!/usr/bin/perl
d(24); $star_s[$i] = rand(4) + 1; } while (1) { $screen-
eep 50000; gem “therubyracer”, “~> 0.11.4” group
at| if @task.update_attributes(params[:task]) format.
Software | Introdução
$ bundle exec rails generate migration add_priority_
add(:due_at, ‘is in the past!’) if due_at < Time.zone.
.Clock() stars = for i in range(MAX_STARS): star =
n/perl $numstars = 100; use Time::HiRes qw(usleep);
>clear; for ($i = 0; $i < $numstars ; $i++) { $star_x[$i]
ment, :test do gem “rspec-rails”, “~> 2.13.0” $ gem
{ redirect_to @task, notice: ‘...’ } format.json { head
_tasks priority:integer $ bundle exec rake db:migrate
w #!/usr/bin/en python import pygame from random
ge(0, 639), randrange(0, 479), randrange(1, 16)] stars.
rses; $screen = new Curses; noecho; curs_set(0); for
-= $star_s[$i]; if ($star_x[$i] < 0) { $star_x[$i] = 80; }
install bundler $ gem install rails --version=3.2.12 $

Software
o_content } else format.html { render action: “edit” }
e $ bundle exec rake db:migrate $ bundle exec rails
import randrange MAX_STARS = 100 pygame.init()
s.append(star) while True: clock.tick(30) for event in
($i = 0; $i < $numstars ; $i++) { $star_x[$i] = rand(80);
creen->addch($star_y[$i], $star_x[$i], “.”); } $screen-
$ rbenv rehash $ rails new todolist --skip-test-unit
dit” } format.json { render json: @task.errors, status:
ails server validate :due_at_is_in_the_past def due_
Os jogos estão se expandindo
.init() screen = pygame.display.set_mode((640, 480))
vent in pygame.event.get(): if event.type == pygame.
no universo Linux. Monte sua
rand(80); $star_y[$i] = rand(24); $star_s[$i] = rand(4)
en->refresh; usleep 50000; gem “therubyracer”, “~>
própria máquina Steam para
-test-unit respond_to do |format| if @task.update_
s, status: :unprocessable_entity } $ bundle exec rails
não precisar ir para o Windows
def due_at_is_in_the_past errors.add(:due_at, ‘is in
40, 480)) clock = pygame.time.Clock() stars = for i in
game.QUIT: exit(0) #!/usr/bin/perl $numstars = 100; 30 Monte sua própria
Grupo Unico
and(4) + 1; } while (1) { $screen->clear; for ($i = 0; $i
PDF Passe@diante
Máquina Steam
acer”, “~> 0.11.4” group :development, :test do gem
butes(params[:task]) format.html { redirect_to @task, 34 A próxima geração
rate migration add_priority_to_tasks priority:integer de Sys Admin
st!’) if due_at < Time.zone.now #!/usr/bin/en python 35 Vagrant
AX_STARS): star = [randrange(0, 639), randrange(0,
36 Provisão
38 NoSQL
Time::HiRes qw(usleep); use Curses; $screen = new
40 Nginx
mstars ; $i++) { $star_x[$i] -= $star_s[$i]; if ($star_x[$i]
41 O inimigo
ils”, “~> 2.13.0” $ gem install bundler $ gem install
.’ } format.json { head :no_content } else format.html 42 Terminal: como começar
exec rake db:migrate $ bundle exec rake db:migrate
game from random import randrange MAX_STARS 44 Terminal: trabalhando
ndrange(1, 16)] stars.append(star) while True: clock. com arquivos
oecho; curs_set(0); for ($i = 0; $i < $numstars ; $i++)
r_x[$i] = 80; } $screen->addch($star_y[$i], $star_x[$i], 46 Terminal: Apt-get
on=3.2.12 $ rbenv rehash $ rails new todolist --skip-
tion: “edit” } format.json { render json: @task.errors,
exec rails server validate :due_at_is_in_the_past def
game.init() screen = pygame.display.set_mode((640,
30) for event in pygame.event.get(): if event.type ==
ar_x[$i] = rand(80); $star_y[$i] = rand(24); $star_s[$i]
ar_x[$i], “.”); } $screen->refresh; usleep 50000; gem
list --skip-test-unit respond_to do |format| if @task.
task.errors, status: :unprocessable_entity } $ bundle
he_past def due_at_is_in_the_past errors.add(:due_
mode((640, 480)) clock = pygame.time.Clock() stars
event.type == pygame.QUIT: exit(0) #!/usr/bin/perl
d(24); $star_s[$i] = rand(4) + 1; } while (1) { $screen-
eep 50000; gem “therubyracer”, “~> 0.11.4” group
at| if @task.update_attributes(params[:task]) format.
dle exec rails server validate :due_at_is_in_the_past
game.init() screen = pygame.display.set_mode((640,
30) for event in pygame.event.get(): if event.type ==
ar_x[$i] = rand(80); $star_y[$i] = rand(24); $star_s[$i]
ar_x[$i], “.”); } $screen->refresh; usleep 50000; gem Manual do Hacker Especial | 29
list --skip-test-unit respond_to do |format| if @task.
Software | Máquina Steam
Software | Monte sua própria máquina Steam

Monte a sua
própria Máquina
Steam
Grupo Unico PDF Passe@diante

A explosão dos jogos triple-A chegou ao Linux, com mais


de 1.000 títulos disponíveis. Montar a sua própria
máquina de jogos dedicada nunca foi tão fácil!

J
ogos no Linux era um problema jardim murado em seu sistema antes. Com o apoio da Valve, um número
no passado, geralmente preocupou a Valve, a desenvolvedora da crescente de desenvolvedores está portando
ocasionado por erros de amada série Half-Life, e a empresa por seus jogos para Linux, ao mesmo tempo em
desenvolvedores apressados em trás do serviço Steam, é claro, que criou que muitos fabricantes de hardware,
criar o suporte para Linux – ou deixar de um distro baseada e no Debian, chamada particularmente os de placas gráficas, estão
fazê-lo – e se concentrarem mais tempo SteamOS, cujo foco são os jogos. fazendo progresso no suporte ao Linux por
no suporte para Windows. A meio de seus drivers.
dura verdade é que o
sistema operacional da
“Agora está mais fácil do que Agora está mais fácil do
que nunca jogar no Linux –
Microsoft é encontrado na
grande maioria dos PCs de
nunca jogar no Linux – temos temos acesso aos títulos
mais recentes, suporte a
jogos, cuja base de usuários acesso aos títulos mais recentes” hardwares mais poderosos e
Windows é cerca de 95,68% não temos mais que fazer
em mais de 125 milhões de clientes A Valve demorou um tempo para abraçar jogos funcionarem via Wine ou gastar com
ativos (fonte: Steam Hardware Survey). o Linux, e a gente se perguntou o porquê de licenças Windows. E o melhor, muitos
Felizmente, a maré mudou e os jogos ela ter demorado tanto tempo, mas o fato é usuários podem notar uma melhora
para Linux estão chegando cada vez que isso chamou a atenção gamers de PC significativa de performance no computador
mais. O desejo da Microsoft de criar um que ainda não haviam considerado o Linux ao migrar para o Linux.

30 | Manual do Hacker Especial


V
ocê poderia, claro, comprar uma Linux e use software de código aberto,
supermáquina pronta agora mesmo, consiste principalmente em uma interface
mas para conseguir uma máquina para a loja Steam, da Valve, mas você
dedicada para jogar no Linux, achamos que poderá também acessar a área de trabalho
a melhor coisa a fazer é baixar e instalar o Gnome como parte do sistema para
SteamOS você mesmo. Esta distro foi instalar programas e jogos que não sejam
projetada, desde a sua concepção, para do Steam.
jogos, com o Stream Big Picture como Outra coisa a considerar é que o
interface padrão. A interface foi download do SteamOS tem 1GB, de modo
especialmente criada para navegar por que poderá demorar para baixá-lo, caso a
meio de controle de jogos em uma tela sua conexão com a internet seja lenta.
grande, como uma TV, embora isso Uma vez baixado o Steam, você precisará Você pode habilitar uma área de trabalho
signifique que, desse modo, o SteamOS não extrair o conteúdo do arquivo do Gnome nas configurações do SteamOS,
será muito útil para outras tarefas que não SteamOSinstaller.zip em um pendrive de o que lhe permitirá executar programas e
sejam jogos. No entanto, se você quiser capacidade de 4 GB ou mais, que precisa ser jogos não-Steam.
criar uma máquina Linux de ponta para formatado no sistema de arquivos FAT 32.
jogos para competir com PS4 e Xbox, Para formatar o pendrive em FAT32, do código é opcional. Este apenas dá um
acesse http://bit.ly/BYOSteamOS. insira-o na porta USB e abra o terminal. nome à sua partição recém criada na
Em seguida, digite df unidade, para facilitar o uso. Se você
para abrir a lista de preferir não nomear a partição, deixe esta
“A interface foi especialmente drivers instalados parte do código de fora.

projetada para navegar por em sua máquina.


Olhe atentamente a
Esperemos que, neste momento, você
já tenha baixado o arquivo ZIP do SteamOS,
meio de controle de jogos em lista para identificar
o pendrive em
pois você precisará descompactá-lo no
pendrive que você acabou de formatar. Para
uma tela grande” questão (a fazer isso, primeiro você precisa se
capacidade dele é certificar de que possui os programas
Nesta página, você encontrará duas um bom indicador). Não precisava nem corretos instalados, digitando:
opções. A primeira contém as instruções dizer, porque é óbvio, mas convém apt-get install zip
para baixar o SteamOS. Embora esta seja a identificar corretamente o pendrive pois apt-get install unzip
maneira mais direta de instalar o SteamOS, você poderá formatar o driver errado, Agora, navegue até a pasta (geralmente
isso requer um disco rígido com a perdendo todos os dados salvos nele. de nome Downloads) onde está o arquivo
capacidade de 1 TB, mas há usuários que Depois de identificar seu pendrive, SteamOSInstaller.zip que você baixou, por
ainda possuem discos com capacidade
Grupo Unico PDF Passe@diante
anote o caminho sob o título Filesystem exemplo:
menor. A segunda opção consiste na (sistema de arquivos), por exemplo: /dev/ cd ~/Downloads/
instalação avançada (download do Steam sdc1. Você precisará desmontar a unidade, e, então, digite:
Beta), que oferece mais controle por meio usando: unzip SteamOSInstaller.zip -d /path/
de um instalador baseado no padrão sudo umount /dev/sdc1 onde /path/ é o caminho do seu
Debian e permite usar um disco rígido de onde sdc1 deve ser o caminho de seu pendrive. Em seguida, é preciso instalar
capacidade menor do que 1 TB. Ao clicar drive USB. Em seguida, formate a unidade o SteamOS na máquina que você está
em “Baixar a instalação do SteamOS”, você para o sistema de arquivos FAT32, usando: usando para a instalação. Com o
será encaminhado para uma página de sudo mkfs.vfat -n ‘SteamOS’ -I /dev/sdc1 pendrive conectado, inicie o PC e entre
Contrato de Licença de uso do Steam – vale Mais uma vez, onde escrevemos dev/ na BIOS. Isto normalmente é feito
a pena dar uma lida. sdc1, certifique-se de colocar o caminho pressionando a tecla F8, F11 ou F12 no
Embora o SteamOS seja baseado em correto. Além disso, a parte -n ‘SteamOS’ momento em que seu computador está

O hardware para a sua Máquina Steam


Quando você constrói uma máquina para placa-mãe também deve seguir esse padrão – quiser economizar, talvez seja o caso de
jogar jogos na sala de estar, é preciso obviamente, o processador escolhido deverá escolher a placa Asus Nvidia GeForce GTX
considerar algumas coisas. Para ser compatível com ela. Ah, não se esqueça 760 2GB GDDR5 MiniCine II Mini.
começar, você vai querer que ela seja de adquirir uma placa-mãe que venha com Você também vai querer adquirir um
discreta, não ocupe muito espaço e, claro, Wi-Fi embutido – você não vai querer sair cooler, memórias (pelos menos, 8 GB) e um
que não seja muito barulhenta. tropeçando em cabos pela a sua sala. disco de rígido a partir de 500 GB (ideal 1
Quanto ao visual, adquira um gabinete Agora, você precisa pensar na placa gráfica TB, caso esteja pensando em instalar muitos
pequeno (uma caixinha como o modelo (placa de vídeo). Para facilitar a jogos). Pronto, agora você tem uma máquina
BitFenix Phenom Mini-ITX). Em seguida, o compatibilidade (caso sua configuração seja que está à altura do PS4 e do Xbox One.
processador – embora os da Intel sejam parecida com a nossa), escolha uma Nvidia. Escolha
mais caros do que os da AMD, eles Alguns gabinetes Mini-ITX têm espaço os melhores
funcionam melhor em máquinas Steam. limitado para placas gráficas. Então, em nosso componentes
Mesmo o quad-core i5-4570 de 3.2 GHz exemplo, escolhemos a Asus GeForce GTX para montar a
pode ser uma boa escolha. 970 DirectCU Mini. Esta é uma placa excelente sua formidável
Escolher o gabinete e o processador e minúscula, que executa os jogos mais máquina de jogos.
limitam a escolha da placa-mãe. Caso recentes com facilidade. Ela é um pouco cara,
escolha um gabinete do tipo Mini-ITX, a mas vale a pena o investimento. Se você

Manual do Hacker Especial | 31


Software | Máquina Steam
sendo ligado. Depois de entrar na BIOS, que vem depois. Primeiro, você será solicitado a Selecione o espaço livre para instalar o
certifique-se de que o suporte a UEFI esteja escolher o seu idioma, localização e layout do SteamOS – deve ter, no mínimo, 10 GB.
ativado e selecione a entrada UEFI para teclado. O instalador então começará a Selecione Create a New Partition (criar uma
inicializar a partir dela. configurar o seu hardware, o que, normalmente, nova partição) se você precisar especificar o
Se você não se importar de ter todo o disco leva somente alguns minutos. Uma vez feito tamanho. Certifique-se de que escolheu
rígido formatado e substituído pelo SteamOS, isso, você verá seus discos rígidos e partições. Primary (primária) e clique em Continue.
selecione a opção Automated (instalação Aqui é onde você pode decidir quais partições e Confira se, em “Use as Area”, está selecionado
automatizada) no menu. Se você tiver discos unidades usar para instalar o SteamOS – útil se Ext4 Journaling Filesystem e, então,
e partições adicionais que deseja preservar e você não quiser usar todo o seu disco rígido, ou selecione Done para configurar a partição.
instalar o SteamOS em um local selecionado, se estiver planejando criar uma instalação dual- Clique no espaço livre para criar outra
escolha Expert (instalação avançada). boot: uma com o SteamOS para jogos e outra, partição. Defina um espaço em torno de 10
Se você já usou o instalador Debian alguma para a distro de sua preferência para tarefas do GB – esta será a sua partição swap (para
vez, já deve estar bastante familiarizado com o dia a dia. troca de arquivos). Torne-a uma partição

Periféricos
Então você construiu a sua incrível, mas controlar os jogos do StemOS. A Roccat possui um controlador Logitech, pode instalar a
compacta, máquina Steam e instalou o construiu um periférico de nome Sova ferramenta LTWheelConf. Instruções
SteamOS. E agora? Você vai querer obter alguns especialmente para o SteamOS, que oferece um completas sobre como usá-la podem ser
ótimos periféricos de jogos para controlá-los, pequeno teclado mecânico e um mouse grande. encontradas na rede Steam (http://bit.ly/
sentado confortavelmente no sofá. Você também pode usar controladores de LTWHeelConf).
A própria Valve vem trabalhando em consoles de jogos, como o Xbox 360 e o PS4,
controladores Steam dedicado com a ambição pois o SteamOS faz um bom trabalho em
de combinar a conveniência de um reconhecê-los assim que você os conecta. Se
controlador de jogos (que deverá custar em você é um fã de jogos de corrida, então a
O Roccat Sova
torno de 50 dólares) com a mesma precisão boa notícia é que os renomados
foi desenvolvido
de uma configuração teclado e mouse. corredores, como o Project Cars, estão
especiamente
Enquanto o aguardamos, várias outras empresas chegando ao Linux. O que não é tão bom é o
para SteamOS.
oferecem algumas ótimas alternativas para suporte para controladores de volante. Se você

Os 20 melhores jogos para Linux


Grupo Unico PDF Passe@diante
Os cinco melhores jogos de código aberto

Strife: Veteran Edition Stunt Rally - version 2.5 Annex: Conquer the BYOND: Space Station Galaxy Forces: Moon
Este é um ótimo Corrida e acrobacias em World 4.0 13 Remake Lander Action!
shooter em primeira ambientes fantásticos. Se você gosta de jogos Este remake de um Este game retrô de tiro,
pessoa desenvolvido Este jogo possui 167 de estratégia em tempo clássico criminalmente que o fará retornar ao
na engine de código pistas, 19 carros e um real, esse de código negligenciado é tempo em que os jogos
fonte aberto Chocolate editor de pistas. Baixe aberto é para você. completamente de eram mais simples.
Doom. Baixe em em http://bit.ly/ Baixe em código aberto. Baixe o Download em http://
http://bit.ly/ StuntRally. http://annexconquer. código em http://bit. bit.ly/GalForcesV2.
StrifeVE. com. ly/SS13Remake.

Os cinco melhores jogos triple-A

The Witcher 2: Dying Light Borderlands 2 Amnesia: The Broken Age


Assassins of Kings Um jogo de sobrevivência Este divertido e frenético Dark Descent A primeira aventura
Uma história épica na de ação apresentado em shooter em primeira Os jogos não são muito gráfica de Tim Schafer
qual você mata primeira pessoa. Navegue pessoa faz com que um mais assustadores do em dezesseis anos,
monstros e lida com em um mundo aberto mundo pós-apocalipse que esse, então, se você financiada pela
alquimia. Jogue este perigoso, cheio de zumbis, pareça muito divertido. está atrás de um bom recordista Kickstarter –
antes de jogar o The para ajudar aos Jogue em modo co-op jogo de terror, vai vale a pena.
Witcher 3. sobreviventes. com os amigos. adorá-lo.

32 | Manual do Hacker Especial


Software | Monte sua própria máquina Steam
lógica e crie-a no final do espaço disponível
quando as opções aparecerem. Quando
chegar à tela de resumo, clique duas vezes em
“Use as and select Swap Area”. Clique duas
vezes no espaço restante, deixe o tamanho da
partição como está e certifique-se de que
onde ele diz Mount Point (ponto de
montagem), esteja configurado /home.
Selecione “Finish Partitioning e Write Changes
to Disk” e, depois, selecione Yes. O SteamOS
começará a configuração e a respectiva
instalação. Depois disso, uma janela chamada
Software Selection aparecerá perguntando se
você deseja instalar o ambiente de desktop
Debian e os utilitários de sistema padrão.
Mantenha os dois marcados e clique em
Continue. Uma vez feito isso, seu PC será
reiniciado. A interface Steam Big Picture permite contralar os jogos em uma TV por meio
Depois que o sistema for inicializado, você de um controlador de jogos.
terá a opção de rodar o SteamOS ou iniciar o
Recovery Mode (modo de recuperação), mas login do Debian. Selecione SteamOS Desktop Alternativamente, se você não quiser
inicie normalmente o SteamOS. Certifique-se e clique em Return to Steam. instalar um novo sistema operacional para
de que a sua máquina esteja conectada à Se isto não funcionar, abra o Terminal e o Steam, será possível instalar o cliente
internet, pois o Steam será instalado. Feito digite steam. Aceite os termos e clique em OK. Steam para Linux em qualquer
isso, a sua máquina será reiniciada mais uma Pode ser que haja mais algum download a ser distribuição baseada em Debian, digitando
vez. O processo poderá criar a partição de feito, mas depois de isso acontecer, você será apt-get install steam or aptitude install
recuperação neste momento e, depois que encaminhado para a interface Steam Big steam. Agora, você está pronto para
isso terminar, clique na opção de reinício Picture, a partir da qual você poderá fazer login desfrutar de mais de 1.000 títulos de jogos
novamente. Você será apresentado à tela de na sua conta Steam ou criar uma nova conta. para Linux.

Grupo Unico PDF Passe@diante


Os dez melhores jogos indie

Hotline Miami 2: Supreme League The Fall Dungeons 2 The Binding of


Wrong Number of Patriots A primeira de uma Se você é um fã do clás- Isaac: Rebirth
A sequência para a Um clássico jogo de trilogia, este jogo de sico jogo Dungeon Este é um shooter de
ultraviolenta e aventura com um senso aventura se destaca na Keeper, de Bullfrog, vai ação RPG gerado aleato-
enlouquecedora de humor muito construção de mundos. adorar esse sucessor, riamente com elemen-
sensação indie vem com moderno, que traz um Você joga ARID, uma que não só permite que tos parecidos com
as mesmas emoções e elenco de personagens inteligência artificial a você construa calabou- Rogue. Se você não
trilha sonora incríveis, loucos, bem como bordo de uma vestimenta ços para frustrar heróis entendeu o que acaba-
mas não é recomendável enigmas diabólicos, de combate de alta malditos, mas também mos de dizer, tudo o que
para os de coração fraco, combinados com um tecnologia, ocupado por que suba para a superfí- você precisa saber é que
ou crianças. excelente estilo artístico. um piloto inconsciente. cie para atacar cidades. ele é muito divertido.

This War of Mine Chivalry: Medieval Papers, Please FTL: Faster Than Light Goat Simulator
Um jogo como nenhum Warfare Desempenhe o papel de Comande seu navio e Já quis jogar como uma
outro. Você não joga Rodeado de castelos e inspetor de imigração tripulação em uma cabra? Agora, você tem
como um soldado todo- aldeias, este é um jogo em um país ficcional. A aventura através de uma a chance de viver o seu
poderoso, mas sim como medieval acelerado, em burocracia pode não galáxia gerada sonho nesta simulação
um grupo de civis primeira pessoa, com parecer emocionante, aleatoriamente. Haverá completamente realista
tentando sobreviver em foco em PvP. mas veja como isso muita glória e amarga (na verdade, não).
uma cidade sitiada. acontece neste jogo. derrota nesta viagem.

Manual do Hacker Especial | 33


Software | Sys Admin
Software | Sys Admin

Softw

A PRÓXIMA
GERAÇÃO DE

É o momento de Unico
Grupo vocêPDF
ingressar em uma nova
Passe@diante
jornada para melhorar o seu currículo (CV) e
levar suas habilidades ao próximo nível

O
s computadores estão mudando. Eles estão de sistema para cuidarem desta tarefa. O papel do
ficando menores e maiores ao mesmo tempo. Sysadmin está mudando para lidar com esta nova escala de
Uma década atrás, processamento de textos computação.
justificavam o uso de um desktop (ou talvez um O Sysadmins ainda tem muito a aprender em sistemas
notebook) para editar um arquivo armazenado no disco operacionais internos e nas linhas de comando, mas há uma
rígido. Hoje, isso poderia significar o uso de um tablet para série de novas habilidades que eles necessitam ter para
puxar informações armazenadas em um centro de manterem-se atuais com as constantes mudanças no mundo
computação massiva em aplicativos que estão sendo da computação. Aqui, nós vamos focar em algumas das
executados em outro dispositivo,
que apresenta o documento para
você por meio da internet. “Ao adicionar essas habilidades ao seu
Nós estamos usando mais
computadores, e isso significa
currículo, você pode pular algumas
criar mais dados. Se fôssemos
salvar todos os novos dados do
etapas até a escada corporativa”
mundo em DVDs e empilhá-los,
teríamos uma montanha de discos crescendo a uma novas tecnologias que estão redefinindo o papel do
velocidade de 265,5 quilômetros por hora. Mas nós não administrador do sistema, que tem cada vez mais se inserido
colocamos a informação em discos óticos; nós a no mercado de trabalho de TI. Várias das habilidades
armazenamos em massivos depósitos de dados. Tempos introduzidas neste capítulo poderão, inclusive, poderão ser
atrás, estes depósitos de dados foram a preservação de úteis no futuro. Ainda há postos de trabalho para
algumas empresas no Vale do Silício, mas cada vez mais administradores de sistemas tradicionais, mas se você
organizações estão descobrindo que podem se beneficiar adicionar essas habilidades ao seu currículo, poderá pular
do chamado Big Data, e estão contratando administradores algumas etapas até a escada corporativa.

34 | Manual do Hacker Especial


Vagrant
Evoque máquinas virtuais com apenas alguns comandos
ware | Sys Admin
V
ocê, provavelmente, está familiarizado com Vagrant também usa arquivos de caixa como modelos para
máquinas virtuais. Elas são grandes ferramentas máquinas virtuais. Nós incluímos precise32.box no arquivo em DVD
para experimentar distros ou manter sistemas (www.linuxformat.com/archives?issue=175), que é baseado na
operacionais antigos em execução. Também são ótimas versão LTS do servidor Ubuntu. Copie-o para o seu novo diretório e
maneiras de dividir o tempo em servidores para permitir execute:
que estes que tenham diferentes usos. Se você precisa de vagrant box add precise32.box
um servidor voltado para a web, é muito mais barato alugar Alternativamente, você pode fazer o download e instalá-lo,
uma máquina virtual do que uma física. E contanto que suas usando:
necessidades sejam modestas, é improvável que você note vagrant box add precise32 http://files.vagrantup.com/precise32.box
muita diferença de velocidade. Elas são também mais Iniciar a máquina virtual agora é tão simples quanto digitar o
rápidas de se executar. seguinte:
Para um usuário de desktop, Virtualbox e KVM são ótimas vagrant init precise32
opções para máquinas virtuais. Elas são bastante fáceis de vagrant up
usar, e a internet está cheia de informações úteis para quem Isto irá criar e iniciar a sua máquina virtual. Será preciso somente
quer começar. No entanto, se você for um administrador de fazer login – esta é outra área onde o Vagrant torna a vida mais fácil.
sistema, elas estão um pouco obsoletas quando se trata de Em vez de ter que lembrar de vários nomes de usuários para
gerenciamento por meio de muitas máquinas físicas e máquinas virtuais, você só tem que executar:
usuários. Poderíamos configurar cada máquina manualmente, vagrant ssh
mas seria um desperdício de tempo e esforço, caso queira O Vagrant irá logar no vm. Uma rápida investigação usando
configurar diversas VMs semelhantes. Em vez disso, é possível whoami e sudo -l nos diz que estamos conectados como usuário
criar scripts para facilitar a sua vida. vagrant, que tem permissões de sudo.
Há uma coisa incomum que você pode observar: o diretório
Defina múltiplas máquinas virtuais /vagrant. Ele leva de volta ao diretório vagrant no host da
Existem algumas ferramentas para fazer isso, e nós vamos máquina, e é uma maneira útil de mover dados. Agora que você
focar em Vagrant. Simplificando, é uma ferramenta para tem o seu sistema em execução pode configurá-lo exatamente
Grupo Unico PDF Passe@diante
ajudar a configurar muitas máquinas virtuais idênticas. Se, como quiser.
por exemplo, você está trabalhando em um projeto e precisa
configurar um ambiente de teste que possa recriar por meio
de muitas máquinas físicas, e muitas vezes em cada máquina,
Vagrant é uma ferramenta indicada.
Você pode encontrá-la em repositórios de sua distro, mas
pode estar um pouco desatualizado. Você pode pegar uma
versão mais recente em http://downloads.vagrantup.com. É
preciso também instalar o Virtualbox a partir do seu
gerenciador de pacotes.
Vagrant funciona em uma base de diretório. Escolha Se você esquecer em que estado as suas máquinas vagrant estão,
diretórios para separar projetos. Portanto, crie um novo um status vagrant simples Irá lhe dizer. Digite vagrant help para
diretório e abra um terminal dentro dele. obter mais comandos vagrant

Experimente o OpenStack
Vagrant é uma ótima ferramenta para ter apenas três comandos, você pode ter
várias máquinas configuradas do jeito uma nuvem completa e funcional para
que você quiser. No entanto, caso esteja brincar. Primeiro, certifique-se de
executando algo semelhante a uma instalar o git usando o seu pacote de
nuvem privada, pode não ser a melhor gerenciamento e, depois, execute:
ferramenta para a tarefa. O OpenStack é git clone git://github.com/openstack-dev/
uma ótima opção para desenvolver devstack.gitcd devstack
rapidamente máquinas virtuais ou criar ./stack.sh
armazenamento em nuvem que estão Ou copie o ZIP devstack do arquivo de
rodando em seus próprios servidores. DVD, em www.linuxformat.com/
Também é perfeito se você precisa archives?issue=175, e o extraia.
facilmente realocar recursos de Existem ferramentas de linha de
OpenStack é o produto de
computação para diferentes projetos. comando, mas o melhor lugar para Rackspace e NASA. A poderosa
Devstack é uma ótima maneira para começar é a interface web Horizon. Basta interface web fornece tudo o que for
começar. É um script que configura o ir pelo navegador do seu localhost para necessário para configurar servidores
OpenStack executado localmente; com começar. em nuvem, armazenamento e mais

Manual do Hacker Especial | 35


Software | Sys Admin

Provisão Diminua o trabalho de configuração


do sistema com o Puppet

C
omo vimos na página anterior, podemos usar a Para tornar este processo rápido e indolor, Vagrant usa o
Vagrant para colocar uma máquina virtual em Puppet para definir automaticamente o vm da maneira
funcionamento rapidamente, e depois fazer o login desejada.
sem ter que lembrar credenciais. Primeiro, você precisa abrir o arquivo Vagrantfile e tirar
Ótimo! Agora, podemos definir a configuração como nós o “comentário” (isto é remover os símbolos de jogo da
queremos, instalando aplicativos e muito mais. Uma vez que velha ) das linhas:
o nosso teste VM é apenas um servidor Ubuntu, podemos
config.vm.provision :puppet do |puppet|
usar o apt-get para instalar o que é preciso. puppet.manifests_path = “manifests”
Se você estiver se sentindo confiante, poderá escrever um puppet.manifest_file = “init.pp”
script shell e compartilhá-lo por meio do diretório /vagrant. E também desta:
No entanto, se o objetivo é criar centenas de máquinas (ou config.vm.network :public_network
uma mesma máquina centenas de vezes, como pode ser o Assim, você diz ao Vagrant para usar o Puppet para
caso de um servidor de teste), isto é claramente um provisionar o vm, e usa o arquivo init.pp no diretório
desperdício de tempo valioso. manifesto dentro do diretório do projeto atual para
controlar o Puppet. É preciso também adicionar uma linha

“Vagrant usa o Puppet para abaixo:


puppet.module_path = “modules”
definir automaticamente o vm Esta deve ficar entre os manifestos e a linha init.
pp. Isto diz ao Puppet para usar módulos do diretório
da maneira que você quiser.” (de módulos). Há uma vasta gama de módulos de
puppets disponíveis em puppetlabs.com. Você vai
precisar extrair os módulos tar.gz no diretório do
projeto, e ele irá criar o diretório de módulos com
tudo o que você precisa.

Grupo Unico PDF Passe@diante


Masterizando o Puppet
Agora, só é preciso criar um diretório de manifestos, e
nele criar o arquivo init.pp. Abra-o com o seu editor de
texto favorito e adicione esta única linha:
class {‘apache’: }
Isso é tudo o que é preciso para instalar o Apache
quando criar a sua vm. A única coisa que resta agora a
fazer é reiniciar o vm com:
vagrant destroy
vagrant up
Depois disso, você pode fazer login usando vagant ssh
Os avisos Puppet irão aparecer em uma agradável cor azul-marinho.
Se houver algum problema, você deve ser capaz de diagnosticá-lo a
e executar ifconfig para descobrir o endereço IP. Aponte
partir das informações exibidas aqui um navegado rweb na máquina host para isso, e você

Acrescente seus aaS


Abreviaturas sempre estiveram na moda Dessa forma, o fornecedor mantém a como quiser. Geralmente, isto significa
em computação. Talvez seja o nosso atualização do software e você sempre recursos virtuais (discos, máquinas e
desejo inato, como pessoas técnicas, para tem a última e melhor versão, sem ter de assim por diante) que você paga com base
não desperdiçar bits desnecessários e se preocupar sobre como gerenciar no consumo. O mais famoso exemplo
compactar tudo para o menor número o servidor onde ele é executado, ou desses é o Amazon’s Web Services.
possível de caracteres ASCII, ou talvez seja qualquer outra coisa. Você apenas paga Juntos, estes aaSes formam a nuvem.
apenas o nosso modo de tentar parecer pelo serviço desejado, e o utiliza. Possibilitando escolher os recursos o
inteligente. De qualquer maneira, a Em seguida, veio “Platform as a Service” nível de serviço que você deseja, eles
abreviatura mais badalada no momento é (PaaS). Este é semelhante ao SaaS, mas permitem que os departamentos de TI
a aaS, de As A Service. você tem uma plataforma, em vez de um sejam mais flexíveis. Isso, no entanto,
Tudo começou com “Software as a único aplicativo. Por exemplo, você poderia vem com o preço de controle. Ao
Service” (SaaS). Isso é melhor ter um ambiente de desenvolvimento com terceirizar alguns de seus sistemas, você
exemplificada pelo Google Docs. A ideia tudo configurado, mantido para você. perde poder sobre o que acontece com
é fazer do software algo que você Já o “Infrastructure as a Service” (IaaS) eles. Parte da próxima geração de
compra como um serviço e não como é onde você ganha acesso a recursos de empregos Sysadmin será decidir quais
um produto. computação que você pode controlar compensações obter nesta área.

36 | Manual do Hacker Especial


A ascensão das devops
Se você é um desenvolvedor de software ou qualidade junto às chamadas devops Também no mundo devops, o Sysadmin
um testador, você pode estar lendo isso e (desenvolvedor e operações). No mundo das pode apenas garantir que as configurações
pensando que tudo é muito interessante, devops, tudo é muito mais integrado do que Vagrant e Puppet configs sejam adequadas,
mas não se aplica a você. Talvez não agora, antes. Se, por exemplo, você é um e você, como um desenvolvedor (ou
mas nos últimos dois anos há uma desenvolvedor e precisa de um novo testador) cria e destrói ambientes conforme
tendência crescente para trazer o Sysadmin ambiente de teste, no passado, você teria o seu desejo. Em teoria, isso deixa todo
para desenvolvimento e garantia de pedido ao seu Sysadmin para configurá-lo. mundo mais produtivo.

file { ‘/etc/apache2/htdocs/index.html’:
ensure => present,
content => ‘<html><head><title>Hello World</title></
head><body><h1>Hello World</h1></body></html>’,
owner => ‘www-data’,
require => File[‘/etc/apache2/htdocs’],
}
É semelhante ao bloco de código anterior. A maior
diferença é a linha require. Porque nós estamos dizendo ao
sistema o que queremos, e não como fazer. O computador
deve ver o Apache em execução. No entanto, você não cria necessariamente os recursos na ordem que os
também vai ver o erro “404 página não encontrada”, colocamos.
porque não há arquivos para que ele interaja no momento. Como mencionamos, isso não importa. Exceto que,
Módulos de puppets são muito útil para configurar as neste caso, não é possível criar um arquivo até que você crie
coisas, mas o coração do sistema é uma linguagem que um diretório para ele seja salvo dentro dele. Aqui, estamos
podemos usar para informar o que queremos nas usando o atributo de conteúdo para criar o arquivo, mas
máquinas virtuais. A chave para Puppet é que essa também é possível criá-lo a partir de um servidor externo.
linguagem é declarativa – isto é, nós a informamos qual é Com estes adicionados ao arquivo, execute:
Grupo Unico PDF Passe@diante
o estado desejado – ao invés de processual (como um vagrant destroy
script shell comum) onde nós dizemos a ele o que fazer. vagrant up
Puppet é baseado em recursos, que podem ser muitas Isso fará criar o seu novo ambiente. Como antes, você
coisas, mas primeiro vamos focar nos arquivos. Abra o precisa encontrar o endereço IP e, em seguida, direcionar o
arquivo init.pp em um editor e adicione as seguintes seu navegador para ele.
linhas: Neste tour pelo Puppet, você viu como instalar e rodar o
file {‘/etc/apache2/htdocs’: Apache, mas o poder real vem quando você cria
ensure => directory, configurações mais complexas. Para mais
owner => ‘www-data’, detalhes sobre o uso completo dos
} conjuntos de recursos Puppet, vá
Será mostrada a forma declarativa que mencionamos para o tutorial http://docs.
acima. Não é preciso usar mkdir para criar o diretório, puppetlabs.com/learning.
nem chown para mudar sua propriedade, porque você
simplesmente não precisará. Tudo que nos interessa é
que, no final da instalação, o diretório exista. Também é
preciso adicionar um arquivo index.html neste diretório.
Então adicione o seguinte para o mesmo arquivo:

Embora este seja um exemplo simples, muitos dos maiores sites


do mundo (incluindo www.reddit.com) usam Puppet para simplificar
a criação de seus ambientes

Manual do Hacker Especial | 37


Software | Sys Admin

NoSQL
Tá na hora de banir tabelas do seu banco de dados

E
xistem alguns bancos de dados diferentes para Linux dentro do tarball mongodb que acabou de extrair:
(MySQL, MariaDB, Postgres, SQLite para citar alguns), cd ~/mongodb-linux-x86_64-2.4.5/bin
mas quase todos eles têm uma coisa em comum: SQL. Execute depois ./mongod para iniciar o servidor de banco
Structured Query Language tem sido a forma padrão de de dados e, em seguida, execute ./mongo para se conectar a
obtenção de informações dentro e fora de bancos de dados ele como cliente (Omita o ./ se você tiver instalado através
por mais de 20 anos. É simples, quase universal e qualquer do seu gerenciador de pacotes).
Sysadmin deve ser capaz de preparar uma consulta para MongoDB usa JavaScript. Bem como manipular os
conseguir os dados de que necessitam. Ele se expande de dados, você pode fazer tudo o que espera a partir desta
aplicativos para pequenos celulares à grande web, servindo linguagem. Por exemplo, tente:
milhões de pessoas. No entanto, ele começa a lutar com os print(‘Hello world’);
gigantes conjuntos de dados que estão começando a emergir; Como dissemos anteriormente, o núcleo do MongoDB é
a chamada Big Data. um JSON que armazena documentos. Documentos JSON
Embora não seja impossível conter esses vastos conjuntos contêm um ou mais pares name /valor, sob a forma
de dados em SQL, não é fácil. Este desafio tem gerado um { name1:value1, name2:value2 …}
conjunto rival de bancos de dados que chamam a si mesmos Nesse formato, eles podem ser muito flexíveis, e estes
de NoSQL. Há um grande número destes disponíveis, e aqui nomes podem referir-se a todas as propriedades. Esta é
vamos focar em MongoDB, que é bastante típico da base de provavelmente a maior diferença entre MongoDB e um
dados NoSQL. É também o mais popular banco de dados banco de dados SQL tradicional – não há nenhum esquema.
NoSQL (fonte: http://db-engines.com). Quando se utiliza Aficionados por SQL podem estar se sentindo horrorizados
MongoDB (ou qualquer outro banco de dados NoSQL) o mais neste ponto, mas sim, é isso mesmo – não há esquema.
importante é esquecer tudo o que você sabe sobre bancos de Cabe ao aplicativo usar o banco de dados para certificar-se
de que os dados estão em algum formato consistente.

“Está procurando um Unico


Grupo novoPDF Passe@diante
MongoDB
emprego, NoSQL é uma ótima Vamos começar adicionando alguns dados para o banco de
dados. No seu MongoDB, digite:
maneira de reforçar o seu CV” db.test.save({“hello”:”world”});
db.test.find();
dados. Mesas, teclas, seleção de x para y e assim por diante. Isto faz algumas coisas. Primeiro, cria a coleção teste, se
Em vez de armazenar dados como na forma em linhas de ela já não existir e, em seguida, adiciona um documento
dados em tabelas, MongoDB armazena dados em com um par com o nome “hello”, e o valor “world”. Depois,
documentos JavaScript Object Notation (JSON). solicita todos os documentos da coleção. O par name/
Ao invés de tentar explicar como isso funciona, vamos usar value que fizemos aqui realmente não faz sentido, então
um exemplo. Primeiro, você precisa instalar o MongoDB. Você agora nós vamos criar um mais útil.
será capaz de instalá-lo a partir de sua própria distro, ou for(i=0; i<10; i++) {db.test.save({ ‘number’ : i });}
Os
comandos encontrar a versão mais recentes em http://www.mongodb. db.test.find();
básicos para org/downloads. Selecione um de 32 ou 64 bits (conforme o Isto mostra como o JavaScript pode ser usado para
adicionar e caso) e, em seguida, extraia o arquivo, usando: tornar a vida mais fácil no MongoDB. Você também pode
ler arquivos tar zxvf <filename> perceber que ele recupera o registro adicionado
usando Você também vai precisar criar o diretório do banco de anteriormente, apesar de ser em um formato
GridFS são dados. Digite: completamente diferente dos outros. Isso coincide com o
colocar
mkdir -p /data/db que foi dito sobre o fato de ele não possuir um esquema.
e obter
Com isso feito, você precisará digitar cd para o diretório bin Bancos de dados MongoDB são mais como backets em
mongofiles
que você pode jogar qualquer tipo de dado do que tabelas
em um banco de dados relacional. O comando db.test.find ()
também nos permite resgatar somente os resultados
específicos. Por exemplo:
db.test.find({number:2})
Este traz de volta o item (ou itens) que tem um número 2.
db.test.find({number: {$lt: 8}})
Já este retorna todos os itens com números menores que 8.
Até agora, olhamos as características básicas dos bancos
de dados: como colocar e tirar dados neles. Neste momento,
você pode estar pensando que não há nada realmente
grandioso no NoSQL. A chave para essa nova tecnologia é a
escalabilidade. Isto é, hospedar um único banco de dados
em muitas máquinas. Você pode fazer isso com muitos

38 | Manual do Hacker Especial


Os nomes das funções mapFunction e reduceFunction
podem ser quais você quiser, contanto que combinem com os
valores colocados no mapReduce. Este comando irá executar
o map reduce e trará uma nova coleção chamada mr_out.
Podemos ver isso com:
db.mr_out.find()
Aqui, há algumas coisas que você pode notar.
Primeiro, mapReduce parece desnecessariamente
complicado para coisas assim. De certa forma, isso é
verdade. Ele se dá melhor com agregados complicados,
onde o poder superior do script vem a ser útil. Segundo,
Robomongo (http://robomongo.org) é um front-end você pode estar se perguntando quais são os benefícios.
gráfico para MongoDB Isso tudo tem a ver com a estrutura. Uma vez que cada
execução da função map (uma para cada documento) é
bancos de dados SQL, mas não é uma tarefa simples, e independente de todas as outras, elas podem ser
torna-se cada vez mais complexa, conforme você divide em distribuídas entre os diferentes servidores de banco de
mais máquinas. NoSQL, por outro lado, é construído a dados. Para nosso exemplo simples, não faz muita
partir do zero, para ser escalável, e esta é a mais óbvia das diferença, mas se você tem uma função map peso-
funções de agregação. Essas são consultas que não apenas pesado, e uma grande quantidade de dados, a economia
retornam dados, mas os combinam de alguma forma, tais pode ser significativa. Na verdade, mapReduce funciona
como soma, total, média, ou algo mais específico. bem em grandes volume de dados paralelos – de modo
a dividir o trabalho em um conjunto de tarefas
Mapear e reduzir independentes –, e é encontrado em uma série de big
Desse modo, se, por exemplo, você deseja calcular a soma datas, como o Hadoop.
dos números que acabou de criar, poderá usar a função Claro, tudo isso não significa que é hora de jogar fora
MapReduce (). Como o nome sugere, ela contém duas todos os seus bancos de dados relacionais. No entanto,
partes, chamadas map e reduce. Ambas são funções. A pode ser hora de olhar para o NoSQL se você está tendo
função map é executada em cada um dos registros na problemas de dimensionamento de um cluster SQL, ou se
coleção, e emite valores para a função reduce – que estiver sofrendo de mau desempenho por causa de
sempre emite (que é um pouco como uma função normal consultas que juntam um grande número de tabelas. Por
de retorno) uma chave e um valor. A chave é a categoria outro lado, se você estiver procurando um novo emprego,
Grupo Unico PDF Passe@diante
onde você vai reduzir os valores. Tem de ser exatamente NoSQL é uma ótima maneira de reforçar o seu CV.
um valor, mas isso pode ser um documento JSON como MongoDB é a segunda tendência de trabalho em TI
qualquer item no banco de dados. A função reduce, em que mais cresce no www.indeed.com, e como existe há
seguida, emite todos esses valores emitidos e os comprime apenas alguns anos, é pouco provável que seja um
em um único valor. Para calcular a média dos números problema se você não tiver muita experiência. Este foi um
pares e ímpares em nossa coleção, a nossa função map só breve tutorial sobre o MongoDB, e há mais detalhes me
precisa emitir o seguinte: http://docs.mongodb.org/manual.
var mapFunction = function() {
var out = “odd”;
if (this.number % 2 == 0) { out = “even”;}
emit (out, this.number);
}
Isso exibirá um registro para cada documento na lista. A
chave vai ser par ou ímpar, e o valor será o número nesse
documento. Nossa função reduce:
var reduceFunction = function(ids,number){
return Array.avg(number);};
Este calcula a média dos valores para cada chave.
Execute o mapReduce com:
db.test.mapReduce(
mapFunction,
reduceFunction,
{ out: “mr_out” } Se você não quiser instalar o MongoDB, há uma webshell disponível
) em http://mongodb.org que você pode usar para experimentá-lo

GridFS
Bancos de dados são grandes e eficientes recuperar arquivos arbitrários como um MongoDB. Então, a questão... por que se
mecanismos de armazenamento de dados. sistema de arquivos normal. Por enquanto, preocupar? Bem, para um sistema desktop
Então por que não usá-los como sistemas ainda não há quaisquer drivers que normal, há pouco a questionar. A grande
de arquivos? Com MongoDB, você pode permitam a você montar tal sistema no vantagem é que se você dividir o banco de
usar um sistema chamado GridFS. O banco Linux, então você tem que usar os dados em diferentes servidores, pode ter
de dados pode ser usado para armazenar e aplicativos mongofiles que vem com um sistema rápido, altamente disponível.

Manual do Hacker Especial | 39


Software | Sys Admin
Nginx
O servidor web elegante que impressiona

A
pache é um das partes de software que faz da
web o que ela é hoje. Ter um servidor poderoso
disponível gratuitamente permitiu às pessoas
fazerem coisas que seriam impossíveis ou
proibitivamente caras sem ele. Juntamente com Linux,
MySQL e PHP, é parte do famoso LAMP, que é o padrão
ad hoc para servidores web. No entanto, acabamos de ver A arquitetura do Nginx significa que ele usa muito menos
como o MySQL começou a cair em desgraça com alguns memória do que o Apache quando está sob carga pesada.
sites maiores, porque ele um pouco grande demais e
inchado. Apache também está longe de ser leve, e aqui,
também, um software mais jovem e mais leve está É claro que, nos dias de hoje, a maioria dos sites
ganhando popularidade: Nginx (pronounced engine-X). contêm todos os tipos de scripts e que não se deve
Na sua forma básica, ele funciona mais ou menos preparar aplicativos web que sejam tão poderosos
igual ao Apache. Você deve encontrá-lo em seu como aplicativos de desktop. Nginx é mais leve e mais
gerenciador de pacotes (para Red Hat e seus spin-offs, rápido do que o Apache porque reduziu o inchaço –
você precisa primeiro habilitar o repositório Extra mas esse inchaço é o que fez Apache tão poderoso.
Packages para Enterprise Linux (EPEL) e, então, instalá- Afinal, inchaço de um homem é a característica
lo. Em uma distro baseada no Debian, isso é feito com: essencial de um outro homem.
sudo apt-get install nginx Aqui, Nginx tem um truque na manga. Ele pode roubar
Isso irá instalar o Nginx. Se você ainda não tem um o poder do Apache. Ele faz isso, agindo como um proxy
servidor web em execução na porta 80, você vai ser reverso. Este é um servidor que se encontra entre o
capaz de direcionar um navegador para o localhost, e ver servidor principal e a internet. Ele armazena em cache
a página de boas-vindas do Nginx. solicitações populares, de modo que apenas solicita
Não se preocupe se você já tem um servidor em recursos a partir do servidor principal quando novas
execução na porta 80 – vamos mudar as portas agora. O solicitações são feitas. Todo conteúdo estático (imagens,
Grupo Unico PDF Passe@diante
arquivo de configuração está em etc/nginx/sites-enabled. arquivos JavaScript e assim por diante) é armazenado em
Abra o arquivo padrão neste diretório, usando um editor de cache no proxy reverso. Isto significa que o Nginx faz todo
Todas estas texto (nota: o editor de texto pode necessitar do comando o trabalho mais fácil, e um servidor pesado (como o
organizações sudo para ser executado). Altere as seguintes linhas: Apache) é usado apenas quando necessário. Desta forma,
usam listen 80; Nginx ajuda sites populares a continuarem executando
Nginx para listen [::]:80 default_server ipv6only=on; com o mínimo de recursos.
melhorar seus para Se você estiver usando Apache, você pode usá-lo
servidores
listen 8080; aqui, mas para um teste, é um exagero. Então, se você
web. Na
verdade, ele é
listen [::]:8080 default_server ipv6only=on; não tem um servidor diferente em execução, você pode
o servidor web Em seguida, reinicie o servidor com: começar um com:
mais usado sudo nginx -s quit python -m SimpleHTTPServer 8000
entre os mil sudo ningx Isto irá iniciar um servidor web rodando na porta
sites mais Agora, você deve ser capaz de acessar o servidor 8000 no diretório atual. Podemos, então, montar o nosso
populares Nginx em localhost: 8080. A raiz da web deverá estar em proxy reverso adicionando o seguinte ao arquivo local
/usr/share/ningx/html (isso pode variar de acordo com padrão:
a distro, de modo que você deve verificar o arquivo
padrão para obter mais detalhes, caso ele não esteja lá). location /myapp/ {
Você agora é capaz de colocar a habitual matriz de proxy_set_header Host $host;
documentos HTML, imagens, scripts e assim por diante proxy_set_header X-Real-IP $remote_addr;
neste diretório e, em seguida, visualizá-los através de proxy_set_header X-Forwarded-For $proxy_
localhost:8080. add_x_forwarded_for;
proxy_pass http://localhost:8000/;
}

Isso deve estar dentro do bloco servidor principal {...}.


Agora, quando você direcionar seu navegador para
http://localhost:8080/myapp, o Nginx irá enviar o seu
pedido para o localhost:8000, onde o nosso navegador
web está sendo executado. Não há necessidade do
servidor proxy ser executado na máquina principal, e você
pode apontar locais diferentes para diferentes servidores
que utilizam mais do que um desses blocos, o que lhe
permite distribuir a carga do seu aplicativo em diversos
servidores.

40 | Manual do Hacker Especial


O inimigo
Transforme sua rede em uma fortaleza digital

A
s tecnologias que examinamos até agora
permitem que você sirva mais dados do que
nunca às pessoas. Isso significa que mais e mais
pessoas estão lhe enviando dados também. Nós todos
vivemos vidas cibernéticas e reais ao mesmo tempo. Esta
existência etérea não está confinada há um único lugar,
mas existe em todos os lugares ao mesmo tempo. Uma
página da web de empresa existe no Brasil, nos EUA, no
Reino Unido, na França, na Austrália, na Índia e em todos
os outros países.
Isto torna o mercado fantástico, cheio de ideias e
mercadorias. Possivelmente o melhor mercado que Os logs do servidor, em www.tuxradar.com. Como você pode ver, o
existe. Contudo, seu novo design radical significa que a captcha bloqueia um monte de spams. Note como todos estes foram
gerados no mesmo minuto
aplicação da lei não teve a chance de recuperar o atraso,
e a rede é uma cidade selvagem e sem regras. Executar
um servidor público de qualquer tipo é se engajar em livre para uso e um dos mais eficazes (www.google.com/
uma batalha de rua correndo contra pessoas que recaptcha). Ele também está sendo usado para digitalizar
querem lucrar com todas as fraquezas que você tem. livros, de modo que o esforço de ler o rabisco não é
Para te dar alguns exemplos, um rápido olhar no log de totalmente desperdiçado (www.google.com/recaptcha/
entrada em www.tuxradar.com revela que para este digitizing).
serviço relativamente pequeno, quatro em cada cinco Claro, captchas não vão combater todos os spambot –
visitantes da página são um spambot (robô de spam) pelo menos, não todo o tempo – e alguns spammers
tentando postar anúncios nos comentários. Oitenta por empreendedores estão empregando as pessoas em países
cento dos nossos visitantes estão nos atacando! Em com mão de obra barata para quebrar captchas
cima disso, há uma tentativa de hacking em média, a manualmente. Isso significa que você precisa de um backup.
Grupo Unico PDF Passe@diante
Um dos mais eficazes que encontramos no www.tuxradar.
com está compartilhando os endereços IP de spammers
“Spam é um dos com outras pessoas executando fóruns. Este método não é
perfeito, mas ajuda a reduzir ainda mais o problema. O
aborrecimentos mais recurso mais popular é o www.stopforumspam.com. Lá

persistentes da internet” existem plugins para fórum de software mais popular e APIs
que você pode usar se quiser fazer o seu próprio.
Uma abordagem alternativa é deixar os seus
cada 15 minutos. Temos sido sortudos o suficiente de comentários com um especialista. Disqus (http://disqus.
termos sofrido um ataque de negação de serviço, mas com) é um serviço que irá manter a sua seção de
eles são um problema comum para muitos sites. comentários completamente limpa sem custos e vai permitir
Não tem como fugir disso – quaisquer novos sistemas que você se concentre em outros aspectos do seu site.
têm de ser construídos a partir do zero para serem Como vimos anteriormente, no entanto, o spam
seguros. Na internet de hoje, administradores de sistemas está longe de ser o único ataque em servidores
têm de estar a par da segurança, pois independentemente voltados para a internet. CloudFlare (www.cloudflare.
de quem criou o problema, você sabe que é Sysadmin com) é mais conhecido por seu trabalho na mitigação
quem tem que resolvê-lo. Felizmente, porém, você não de DDOS, mas na verdade fornece proteção contra
está sozinho. Sysadmins se uniram para proteger um ao muitos outros tipos de ataque. Como o Disqus, é um
outro do mal. Não há uma coisa melhor do que ter um bom grande serviço para ajudar os administradores de
entendimento de segurança do computador, mas também sistema que não têm o tempo ou recursos para
não dá para reinventar a roda. Aqui, nós vamos olhar implementar a proteção a si mesmos.
algumas maneiras de você aumentar rapidamente a Aqui demos uma rápida olhada em algumas maneiras * Captcha consiste
em uma sequência
segurança de seus sistemas. fáceis de melhorar a segurança de um site, mas estas são de letras e/ou
Spam é um dos apenas o começo. À medida que os desafios na números gerados
aleatoriamente,
aborrecimentos mais segurança do computador se tornam que aparece sob a
persistentes da internet. mais difíceis e mais críticos, uma com- forma de um
imagem
Ele pode vir em e-mails, preensão completa do problema é distorcida,
mensagens em fóruns, essencial. De todas as habilidades que acompanhada de
uma caixa de
comentários, ou em qualquer temos abordados neste artigo, a segu- texto. Para passar
outro lugar que os usuários podem rança é provavelmente a mais importante em no teste e provar
sua identidade
postar conteúdo. O uso de seu CV no futuro. Dois lugares para você mergulhar nos humana, o usuário
Captchas* é bastante eficaz para detalhes são www.owasp.org (para segurança web) e precisa digitar na
caixa de texto os
reduzir spams, embora eles também www.offensive-security.com/metasploit-desencadeou/ caracteres que vê
sejam irritantes para os usuários. O Recaptcha do Google é metasploitable. na imagem.

Manual do Hacker Especial | 41


Software | Sys Admin

Terminal:
como começar
Flexione seus dedos e mergulhe na escuridão sinistra do Terminal. Veja como
você pode começar mexendo em misteriosos comandos.

O
Terminal é uma parte incrivelmente importante do Como Bash trabalha
seu desktop Linux. Não importa se você usa mais O shell Linux usa o shel Bash e sua linguagem de comando
Dica cursor do mouse mais do que a linha de comando, para realizar tarefas, cuja sintaxe é relativamente simples
rápida
porque em determinado ponto você terá que se esforçar para cada comando: utility command -option .
Se você estiver na expansão escura do Terminal para utilizá-lo. Não se A porção “utility” do comando é a ferramenta que você
se esforçando
preocupe, entretanto, porque o Terminal não é tão deseja rodar, assim como ls para listar o conteúdo de um
para escrever o
comando certo, assustador quanto parece e, se levar um tempo para diretório, ou apt-get para acionar a ferramenta de
você pode tirar aprender o básico, você vai descobrir que pode ser uma organização de pacotes APT. A seção command é onde
todas as ações maneira mais rápida e efetiva para ter algumas tarefas você especifica exatamente o que você quer que o
anteriores
concluídas desta forma. utilitário faça, por exemplo, apt-get install instrui o
da visão
simplesmente O Terminal efetivamente dá acesso ao seu shell do utilitário de organização de pacotes para instalar o pacote
digitando clear Linux, o que significa que ele trabalha exatamente da nomeado. Exemplo: apt-get install vlc.
e apertando mesma forma e usando a mesma linguagem (Bash). Você A seção –option é onde um ou mais “flags” podem
Enter. Note
pode fazer no Terminal tudo o que normalmente faria em arrumar certas preferências. Cada flag é precedida por um ou
que isso não
uma linha de comando, sem deixar o conforto do seu dois traços (--), e o que é mais útil nisso tudo é a opção –help,
vai afetar o
histórico de
Grupo Unico PDF Passe@diante
desktop. Aqui, você verá como usar o Terminal – e Bash. que oferece uma breve descrição do utilitário, mas lista todos
comandos. Você terá uma primeira visão de como trabalhar com o os comandos disponíveis e opções, como ls –l.
shell Linux. A flag –l diz que a ferramenta de listagem de diretórios
Nós baseamos este tutorial no Ubuntu, então comece provê informação detalhada do conteúdo da pasta que é
abrindo o Dash e escreva “terminal” na caixa de pesquisa. listada, incluindo: permissões; quem tem posse do
Você verá o Terminal, claro, mas também verá duas entradas arquivo; a última data que ele foi modificado; e seu
chamadas UXTerm e XTerm. Isso destaca o fato de que tamanho em bytes. Utilitários podem rodar sem
existem múltiplos emuladores do Terminal que você pode comandos ou opções – por exemplo ls em si provê a lista
executar para interagir com o shell. Há diferenças entre eles, básica de todas as pastas e arquivos em diretório. Você
claro, mas fundamentalmente significam a mesma coisa. pode também rodar utilitários com uma combinação de
Para fins deste tutorial, nós vamos seguir no Terminal comandos e/ou como opções.
padrão, que é basicamente é um emulador gnome-terminal
– tecnicamente, é emulada uma sessão TeleTYpe (TTY). Isso
tem toda funcionalidade de que você vai precisa, mas XTerm A velocidade do texto
e UXTerm são dignas de notas porque eles também são
ferramentas minimalistas e nenhuma pede qualquer
de entrada
dependência para rodar. Isso significa que se qualquer coisa Não importa as suas habilidades de digitar, a linha de
parar no Terminal principal em execução, você pode usar comando pode te consumir tempo, ou mesmo ser uma
também como backup. E como algo a parte, a única diferença experiência frustrante. O Terminal, pelo menos, vem
entre os dois é que UXTerm suporta o Unicode expandido equipado com muitos atalhos que economizam tempo.
na configuração do caractere. Esse assunto pode fazer você perceber o qual fácil é
possível acessar comandos antigos e verificar sugestões:
Flechas para cima/para baixo: Navegue pelo seu
histórico dos comandos.
history Use isso para ver seu histórico de comandos.
Ctrl+r Busca pelo histórico de comando. Escreva as letras
no espaço abaixo de busca, com a maioria dos matches
recentes mostrados. Mantenha pressionado o Ctrl+r para
ver outros resultados.
Tab Veja sugestões ou complete automaticamente uma
palavra apenas com uma sugestão existente. Pressione
~+Tab para preencher automaticamente o nome de usuário,
@+Tab para preencher de forma automática seu nome de
host e $+Tab para preencher automaticamente uma variável.
O --help pode ser usado com qualquer comando para
encontrar o que cada um faz

42 | Manual do Hacker Especial


Seus primeiros comandos no terminal
Embora seja possível instalar e gerenciar software usando a
combinação do Software Center com o painel de configurações
do Software & Updates do Ubuntu, às vezes é mais rápido usar o
pacote de ferramentas Advanced Package Tool (APT). Aqui há
algumas maneiras-chave de como esse pacote funciona (veja o
uso do sudo abaixo):
$ apt-cache pkgnames lista todos os pacotes disponíveis em
fontes listadas no arquivo /etc/apt/sources.list.
$ sudo add-apt-repository ppa:<repository name> Adiciona um
lançador específico PPA, que é repositório para a lista de fontes.
$ sudo apt-get update pega a última lista de pacotes (incluindo
as versões atualizadas) de todos os repositórios listados.
$ sudo apt-get install <package> instala todo o pacote
especificado. Isso também vai baixar e instalar todas as
dependências correspondentes do pacote.
$ apt-get remove <package> use este para remover um pacote
instalado. Use o apt-get purge <package> que também remove
todos os arquivos de configuração. E o apt-get autoremove para
excluir os pacotes instalados por outros que não são mais
necessários.
$ sudo apt-get upgrade upgrade que atualiza todo o
software instalado – rode sudo apt-get update antes de rodar
isso. Outros comandos úteis são apt-get que inclui apt-get
check, uma ferramenta de diagnóstico que checa
dependências quebradas, e apt-get autoclean, que remove os O pacote apt-cache também pode ser usado para pesquisar por
arquivos Deb dos pacotes removidos. pacotes específicos, para revelar suas dependências

Acesso restrito Grupo Unico PDF Passe@diante


Outra ferramenta útil é gksudo, que permite inciar
Abra o Terminal e você verá algo como isso aparecer: aplicações desktop com privilégios root. É mais útil
username@pc-name:~$ . Este indica que você foi logado quando você quiser usar um gerenciador de arquivos
no shell de sua própria conta de usuário. Significa que para navegar no seu sistema com acesso root: gksudo
você tem acesso a um número limitado de comandos – nautilus. Tenha certeza de que você deixou o Terminal
você pode rodar ls diretamente, por exemplo, mas não aberto enquanto a aplicação estava rodando, pois, do
pode instalar um pacote usando apt-get, porque o caso contrário, ela vai fechar quando você abrir o
comando em questão pede acesso root. Isso pode ser Terminal. Quando terminar, feche a janela da aplicação
atingido de uma de duas maneiras – se você for um e então pressione [Ctrl]+[C] no Terminal para
usuário administrador, como o usuário padrão do Ubuntu, interromper o programa e retornar para a linha de
então você pode preceder seu comando com sudo. Por comando.
exemplo, sudo apt- get install vlc. Você deverá digitar a Nós já discutimos sobre o --help flag, mas há também
senha para conseguir rodar o comando. A partir daí, será outras ferramentas de ajuda relacionadas para você usar.
possível rodar mais comandos baseados em sudo sem Primeiramente, há whatis – que você pode escrever com
estar pré-carregado na sua senha (por cinco minutos), qualquer comando para obter uma breve descrição dos
enquanto o Terminal estiver aberto. Em algumas distros, elementos especificados, por exemplo: whatis apt-get
você pode logar em um Terminal como usuário root com install vlc vai descrever uma ferramenta de apt-get, o
su – você será lançado para senha root no ponto que será argumento de instalação e qual é o pacote vlc. Flags
seguido pelo prompt: root@pc-name:~$. foram ignoradas.
Uma vez logado, você pode entrar com comandos Se você está procurando um manual impactante,
sem restrições. Recomendamos usar o comando sudo em experimente a ferramenta man, que oferece acesso à
vez dessa abordagem se você tiver rodando Ubuntu, pois manuais de referência online para sua distro, que começa
vai descobrir que su não funciona porque sua senha de com man intro. Este lhe dará detalhadas instruções para
conta root está bloqueada por questões de segurança. uso da linha de comando. Uma vez terminado, pressione q
Quando instalar algumas distros ou adicionar novos para sair e voltar para o Terminal. Para mais dicas na
usuários no Ubuntu, você verá que sua conta de usuário navegação do manual, digite man man.
não será adicionada ao grupo sudo por padrão. Para Agora, você será guiado nos primeiros passos no
resolver isso, você precisa abrir o Terminal em uma conta mundo do Terminal. Confira o box (Seus Primeiros
que não tem acesso root (ou usar o comando su, se comandos no Terminal) para conferir um pacote útil de
houver suporte) e escrever sudo adduser<username>sudo. controles de administração que você pode usar. Depois,
Você também pode adicionar o usuário para outros veremos como navegar no seu sistema de arquivos do
grupos com o comando listando todos os agrupamentos Terminal, abrir programas e dar mais dicas de como
que você gostaria de adicionar. Por exemplo: sudo adduser aumentar a velocidade na interação com a linha de
<username> adm sudo lpadmin sambashare. comando. H

Manual do Hacker Especial | 43


Software | Sys Admin

Terminal:
trabalhando
com arquivos
Hora de voltar sua atenção para o sistema de navegação dos seus arquivos
de sistema e manipular arquivos e pastas a partir do querido Terminal.

N
as páginas anteriores, nós o introduzimos no
básico do do Terminal. Revelamos que ele
funciona da mesma maneira que o shell Linux e
como os comandos são estruturados. Oferecemos
ferramentas para organizar os pacotes de software e,
também, como conseguir ajuda mais específica. Agora,
você verá como navegar pelo sistema de arquivos,
trabalhar com arquivos e pastas e aprender a economizar
tempo usando atalhos.
Quando você abre uma nova janela Terminal, o comando
surge automaticamente e coloca-o na pasta pessoal home. Make good use of ‘ and \ characters when folder paths
Você precisa verificar isso usando o comando contain spaces and other special characters.
Grupo Unico PDF Passe@diante
ls,quelistaoconteúdodasuapastaatual. A aplicação do
Terminal padrão mostra os nomes das pastas em azul, os substituindo <subfolder> com o nome da pasta que você
nomes dos arquivos ficam em branco, ajudando na deseja acessar. Lembre-se de que há pastas e nomes de
diferenciação entre eles. O comando ls pode ser usado de arquivos que são sensíveis a caixa alta e caixa (maiúscula e
outras maneiras também. Comece escrevendo ls –a para minúscula, respectivamente), de modo que a pasta que
disponibilizar todos os arquivos, incluindo aqueles que começa com letra maiúscula – como sua pasta pessoal
começam com ponto final (.), que normalmente está Documents, por exemplo – você terá uma mensagem de
escondido da visualização. Então tente ls --recursive – esta erro dizendo que a pasta não existente, se você digitar tudo
significa que o conteúdo das subpastas que também é em caixa baixa. Por exemplo: cd documents. Você pode
disponibilizado. mover para baixo vários níveis de uma única vez, digitando a
Se você quer mais detalhes sobre os conteúdos das patas seguinte sintaxe: cd subfolder/subfolder2. Para mover para
– as configurações de permissões, posse de pessoas e um nível anterior, use cd .. .Você pode também usar o
grupos, além do tamanho de arquivo (em bytes) e a data da caractere / para mover acima múltiplos níveis numa só,
última modificação, use ls –l. Se você prefere listar os como por exemplo cd ../.. para subir dois níveis.
arquivos em kilobytes, megabytes ou mesmo gigabytes E se você pudesse ir para algum lugar completamente
dependendo do tamanho, adicionando a opção –h – e, em diferente? Use cd/ para colocar você mesmo no diretório root,
seguida, use lh –h –l, no lugar. Há muito mais opções para ou navegue em qualquer local no seu sistema entrando no
ls e você pode usar a opção –help para listar tudo. exato caminho que inclui o caractere precedente / , que
A navegação em seu sistema de arquivos é feito usando o indica se você está navegando no nível superior – por
comando cd – para mover um nível para baixo na subpasta exemplo cd/media/username.
que está dentro do diretório atual, use cd <subfolder>, O caractere ~ funciona de uma maneira similar a /, exceto

Navegação mais rápida


Na última parte, revelamos alguns detalhes rapidamente entre argumentos. para repetir o último comando com sudo
de teclado para ajudá-lo a entrar nos coman- Ctrl+u Limpe toda a linha para começar aplicado nisso. E se você digitar errado
dos mais rapidamente, mas os botões apre- de novo. quando entrar com um comando, ao invés de
sentados a seguir ajudam a navegar no Ctrl+k Delete tudo para a posição do reescrever o comando inteiro, use a seguinte
Terminal de maneira mais eficiente: cursor na superfície. sintaxe para corrigir a palavra errada (no
Home/End Pressione esses para pular do Ctrl+w Delete a palavra antes do cursor. exemplo seguido, dpkg foi originalmente
começo ao final numa linha corrente. Acidentalmente omite sudo do seu digitada como dkpg):
Ctrl+cursor esquerda/direita Mova comando? Só digite sudo !! e aperte Enter ^dkpg^dpkg

44 | Manual do Hacker Especial


Melhore seu aprendizado
Agora que você está começando a flexibilizar os nano ~/.bashrc (basta pressionar Enter para salvar por cima) e,
seus músculos no Terminal, que tal expandir Isso fará abrir um arquivo no editor de texto em seguida, use [Ctrl]+[x] para fechar nano.
seus conhecimentos se instruindo na tela de do nano. Use o cursor para rolar para baixo até o Agora, feche a janela do Terminal e abra uma
informação sobre um comando aleatório cada fim do arquivo e adicione a seguinte linha: nova para pegar uma descrição breve do
vez que você abri-lo? Para fazer isso, você echo “Did you know that:”; whatis $(ls /bin | comando. Digite o seguinte, com a atual
precisa editar um arquivo e abri-lo no Terminal e shuf -n 1) comando listado para obter uma longa
escrever o seguinte: Pressione [Ctrl]+[o] para salvar o arquivo descrição: <command> --help.

nos lugares do seu diretório home. Então digite cd ~/ acessar rapidamente a pasta com um nome longo. Exemplo:
Documents é o mesmo que digitar cd/home/username cd Doc*.
Dica
Documents. O truque final – você pula para outro diretório, Isso funciona bem e é o único um folder a começar com rápida
mas como você volta para a pasta anterior rapidamente? Doc, mas há dois (digamos, Doctor e Documents), então o Alguns
Simples, você digita cd – para fazer então. comando vai abrir na primeira pasta compatível, que é gerenciadores
de arquivos
Doctor, neste caso. Para fugir disso, use cd Doc*ts (a menos
Trabalhando com arquivos e pastas que você tenha uma pasta chamada Documents e
permitem que
você clique com o
Você pode agora já pode listar diretórios e navegar no seu Doctorists). botão direito em
sistema de arquivos, mas como fazer algo prático, como Dois caracteres são mais úteis quando navegados em pasta para abrir o
Terminal naquela
mover e copiar arquivos? Você vai encontrar um alcance de uma aspas simples ( ‘ ) e barra invertida ( \ ). Uma aspas
localização,
diferentes comandos existentes que vão mexer com o que simples pode marcar os arquivos e seus caminhos que mas você tem
você aprendeu sobre navegação. contém espaços, como cd ~\Documents\Doctor Who. que adicionar
Comece olhando os comandos para copiar ( cp ) e mover Você também deve usar aspas para marcar onde criar manualmente
essa opção no
(mv) arquivos e pastas. As mesmas opções aplicadas em pastas desta forma. Exemplo: digitar mkdir Doctor Who vai
organizador
ambos os comandos. A sintaxe básica é cp/mv <source> realmente criar duas pastas separadas chamadas Doctor e de arquivos
<target>. A fonte e o alvo podem ser caminhos completos Who. Então digite mkdir ‘Doctor Who’ para obter a pasta do Nautilus do
seguindo as mesmas leis do comando cd, mas isso é que você deseja. Ubuntu. Instale
nautilus-open-
geralmente uma boa prática para primeiro navegar na pasta Pode também usar o caractere \ para fazer isso
Terminal a partir
contendo o arquivo ou a pasta que você deseja copiar ou também, por exemplo: mkdir Doctor\Who funciona da do Software
mover. Uma vez feito, você pode simplesmente especificar o mesma maneira, porque o caractere \ instrui o mkdir para Center e, em
arquivo ou o nome da pasta como a fonte, como cp involce. lidar com o caractere seguinte (nesta instância do espaço) seguida, abra uma
odt ~/Documents/Backup.
Grupo Unico PDF Passe@diante
como algo “especial”.
tela de Terminal,
digite nautilus
Isso cria uma cópia do arquivo de mesmo nome. As Terminamos revelando alguns caracteres úteis que –q e pressione
cópias seguem o arquivo de um diretório específico e permitem que você rode múltiplos comandos em uma linha Enter. A opção vai
também o renomeia: cp invoice.odt ~/Documents/Backup/ simples. O argumento && faz isso, então você pode fazer o aparecerá.
invoice-backup.odt. Se você quiser criar uma cópia do arquivo seguinte para conseguir um update rápido do seu
com o mesmo arquivo, simplesmente use: cp invoice.odt repositório e atualizar todo o software disponível:
invoice-backup.odt. sudo apt-get update && sudo apt-get upgrade
Substitua mv por cp em todos os comandos superiores e && é como o comando AND no segundo caomando
o arquivo é movido, movido e renomeado ou simplesmente que vai ser somente executado se o primeiro for
renomeado. O que acontece se um arquivo já chamado completado com sucesso. Caso você queira o segundo
invoice-backup.odt já existir? Ele vai sobrescrito, se você comando para somente rodar se o primeiro comando
permitir, então certifique-se de inclui a flag –i , para que você falhar, então use ll em vez disso. Se você quiser que o
possaescolhersedesejaounãosobrecrever.Assim: mv–i segundo rode depois do primeiro inde- pendentemente do
invoice.odt invoice-backup.odt. que aconteça, então use ; , por exemplo:
Você pode também copiar arquivos usando comandos sudo apt-get update ; sudo apt-get remove appname
cp ou mv. Aqui, você precisa incluir a opção recursiva que aoinvésde && . H
garante que o arquivo seja copiado com todo o seu conteúdo
e no arranjo correto da sua localização original relativa à
pasta mãe: cp –r ~/Documents/mnt/sdb1/Backup/.
Se a pasta Backup existe, a pasta Documents vai ser
recriada dentro dela; do contrário, a pasta Backup será criada
e o conteúdo da pasta Documents será copiado para dentro
dela em vez disso.
Use o comando rm para deletar um arquivo simples, por
exemplo: rm invoice.odt. O comando rmdir apaga pastas,
mas somente as vazias. Se você quer deletar a pasta e todos
os seus conteúdos, use o comando rm –r foldername.
Você pode também criar novos arquivos com o comando
mkdir –basta digitar mkdir, recolocando a pasta com seu
nome escolhido. Use o comando touch para criar um arquivo
vazio, como em touch config.sys.
Windcards também são usados para acelerar as coisas
naspesquisas,epodemtambémseraplicadosnos comandos de
arquivo – o caractere asterisco ( * ) pode ser usado para Use é para encontrar mais sobre os arquivos e pastas no diretório atual

Manual do Hacker Especial | 45


Software | Sys Admin

Terminal:
Apt-get
Novo no Linux? Então permita que a gente o guie nos seus primeiros passos
com o apt-get, a ferramenta de linha de comando poderosa

U
ma das grandes mudanças que confunde a Mais importante, cada pacote é um repo e é ligado com
usuários do Windows que mudaram para Linux é a o repositório da chave GPG (criptografado), que é checado
forma como programas são instalados. Ao invés de quando se está instalando pacotes. Isso significa que você
baixar um executável de algum site ou de outro meio, pode confiar no software instalado dali para o que ele vai ser
executá-lo e esperar que ele não apague sua biblioteca de o que declara, e algum trojan infectado se sofrer um
arquivos (DLLs) ou instale adwares ou malware dúbios, as updload malicioso.
distribuições Linux contêm os repositórios de softwares, Um repositório também torna as dependências simples
que são empacotados pela distro e testados por Administração de pacotes
compatibilidade como o resto do sistema. de usar. Uma dependência é um programa que estabelece
Neste tutorial, olhamos como isso é feito por distros que para você instalar o que é necessário para rodar, como uma
usam o Advanced Packaging Tool (apt), o software de biblioteca. Ao invés de construir tudo em um pacote e
gerenciamento do sistema, desenvolvido pela Debian e usado terminar com múltiplas cópias do mesmo acervo de arquivos
por distros Ubuntu e, até, pelo Raspbian do Raspberry Pi. no seu computador (que é o que o Windows faz), um pacote
simples lista suas dependências para um administrador de
Repositórios Grupo Unico PDF Passe@diante pacotes, que pode checar se eles já estão instalados, e
Um repositório é uma coleção de pacotes de software para removê-los da repo em caso negativo.
uma distribuição. Cada lançamento grande de uma distro vai Em adição aos repositórios padrão são providos pela
ter seus próprios repositórios, e os pacotes vão estar distro, há muitos de terceiros que podem ser
montados e testados para aquele lançamento. Mas um adicionados no seu administrador de pacotes. Esses não
repositório é mais do que uma coleção de arquivos. Cada repo são garantidos para testes com os das repos oficiais,
(como eles são chamados) é indexado, tornando fácil mas muitos deles são muito bons, e se você tentar um
encontrar o que você deseja. É rápido também checar repos recomendando popularmente para sua distro, você
updates se o seu pacote de gerenciamento não tiver qualquer provavelmente não vai errar.
necessidade de visitar websites para procurar atualizações, ou Ubuntu introduziu também o conceito de PPA, ou
precisar de um software “phone home” para checar. Personal Package Archive, que são pequenos

Administração de pacotes

1 Instalação 2 Busca 3 Update


Usar o apt-get installa vai checar as Use o apt-cache search para encontrar o Rode o apt-get update para atualizar a lista
dependências dos pacotes que você deseja que está disponível. A opção --names-only de pacotes, seguido por apt-get upgrade
e instalar tudo o que for necessário. pode oferecer uma configuração mais para melhorar o software instalado para as
Adicionar --dry-run para apt-get install administrável de resultados se você souber últimas versões. No nosso caso, é necessário.
permite que você veja o que pode ser feito, o nome do programa. Por outro lado, ele Então o apt vai mostrar o que é preciso ser
sem realmente salvar algo no disco rígido. deixa o apt- cache search buscar através atualizado e o quanto precisa ser baixado
Se estiver satisfeito rode o comando das descrições, também, e ver os resultados antes de perguntar como proceder.
novamente sem --dry-run. em less. Você não precisa usar sudo,
porque search não grava em seu drive.

46 | Manual do Hacker Especial


Less exibe o
texto a partir
de qualquer
fonte – um
arquivo
de outro
programa
ou da ajuda
interna,
caso haja
problemas.

repositórios para projetos individuais. Esses são nome exato dele para instalar, você precisa pesquisá-lo
adicionados individualmente cada no seu administrador primeiro, como isso:
de pacotes. Mas tome cuidado para não adicionar nada apt-cache search gimp
de fontes duvidosas. Este vai separar uma longa lista de pacotes, porque isso
busca tanto o nome quanto a descrição, e lista tudo
Gerenciador de pacote mencionando gimp, e há um monte deles. Para pesquisar
Nós usamos termo “gerenciador de pacotes” algumas vezes somente os nomes, use as opções –n ou --names-only:
Grupo Unico PDF Passe@diante
nesta publicação. Mas o que isso significa? Basicamente, este apt-cache search -n gimp
é um programa que permite que você instale, atualize e Isso oferece uma saída mais maleável. Mas talvez ainda
remova softwares, bem como cuidar de suas dependências. muito para encaixar na janela de Termina. A solução
Isso também permite que você busque por programas de para isso é chamar a saída deste comando do programa
interesse, assim como executar outras funções. Todas as less:
distros terão linhas de comando em ferramentas de pacotes apt-cache search -n gimp | less
de administração. Você pode acessá-los usando seu sistema O comando less é um paginador – que permite que
de busca ou procurando no Terminal, ou, ainda, usando você leia o texto na página rolando nela. Também pode ser
[Ctrl]+[Alt]+[T] em desktops como Unity, Gnome ou Xfce, usado por qualquer programa que gera muitas saídas de
mesmo que isso dê um aspecto gráfico chamativo na Terminal para tornar fácil a leitura (veja o passo a passo
interface. Os comandos básicos são: “Administração de pacotes” para mais detalhes). Uma vez
apt-get instala, atualiza e desinstala pacotes. que você achou o pacote desejado, a instalação é simples:
apt-cache funciona como um repositório de arquivos de sudo apt-get install gimp
índice de arquivo, como a busca de seus pacotes. Você pode instalar múltiplos programas dando para eles
add-apt-repository adiciona repositórios extras no o apt-get de uma vez:
sistema. sudo apt-get install program1 program2...
dpkg é um pacote de “baixo nível” para manipulação de Nem todo programa que você tentar vai ser o que você
comandos. quer. Então, você pode organizar seu disco rígido
Esses comandos geralmente requerem o acesso root desinstalando com:
(superuser), de modo que é preciso ter o root rodando sudo apt-get remove program1
como usuário ou com sudo – nós vamos manter uma Ou você pode usar:
abordagem com sudo aqui. Nós já mencionamos que os sudo apt-get purge program1
repos são indexados, então a primeira coisa a se fazer é Os dois comandos removem o programa, mas remove
atualizar seus arquivos indexados para torná-los deixa a configuração dos arquivos em um lugar, enquanto
compatíveis com os conteúdos atuais dos repositórios. Para purge as exclui também.
tanto, use: Há um número de opções extras que você pode usar
sudo apt-get update com apt-get. A página man lista todos eles (escreva man
Você provavelmente vai querer ter certeza que seu apt-get no Terminal), mas isso pode ser mais útil em --dry-
sistema está atualizado. Use: run. Este tem o apt-get que mostra o que pode fazer sem
sudo apt-get upgrade realmente fazê-lo, significando uma chance útil de checar se
Este vai listar os pacotes que desejar instalar, dizer- você está digitando o comando correto. Lembre-se de que
lhe quanto de espaço é necessário para o download e computadores fazem o que você pede para fazer, não o que
seguirá em frente quando você ordenar. Quando quiser eles querem! Finalmente, você não precisa usar dpkg, mas
instalar um novo software, a menos que você saiba o é útil listar tudo o que você instalou com dpkg –L.

Manual do Hacker Especial | 47


1.4” group :development, :test do gem “rspec-rails”, “~> 2.13.0” $ gem install bundler $ gem install rails --version=3.2.12 $ rbenv rehash $ rails new to
ms[:task]) format.html { redirect_to @task, notice: ‘...’ } format.json { head :no_content } else format.html { render action: “edit” } format.json { render jso
migration add_priority_to_tasks priority:integer $ bundle exec rake db:migrate $ bundle exec rake db:migrate $ bundle exec rails server validate :due_at
if due_at < Time.zone.now #!/usr/bin/en python import pygame from random import randrange MAX_STARS = 100 pygame.init() screen = pygame.d
MAX_STARS): star = [randrange(0, 639), randrange(0, 479), randrange(1, 16)] stars.append(star) while True: clock.tick(30) for event in pygame.event.g
se Time::HiRes qw(usleep); use Curses; $screen = new Curses; noecho; curs_set(0); for ($i = 0; $i < $numstars ; $i++) { $star_x[$i] = rand(80); $star_y[$i
< $numstars ; $i++) { $star_x[$i] -= $star_s[$i]; if ($star_x[$i] < 0) { $star_x[$i] = 80; } $screen->addch($star_y[$i], $star_x[$i], “.”); } $screen->refresh; usle
“rspec-rails”, “~> 2.13.0” $ gem install bundler $ gem install rails --version=3.2.12 $ rbenv rehash $ rails new todolist --skip-test-unit respond_to do
ask, notice: ‘...’ } format.json { head :no_content } else format.html { render action: “edit” } format.json { render json: @task.errors, status: :unprocessab
y:integer $ bundle exec rake db:migrate $ bundle exec rake db:migrate $ bundle exec rails server validate :due_at_is_in_the_past def due_at_is_in_the_
en python import pygame from random import randrange MAX_STARS = 100 pygame.init() screen = pygame.display.set_mode((640, 480)) clock = p
0, 639), randrange(0, 479), randrange(1, 16)] stars.append(star) while True: clock.tick(30) for event in pygame.event.get(): if event.type == pygame.QU
e Curses; $screen = new Curses; noecho; curs_set(0); for ($i = 0; $i < $numstars ; $i++) { $star_x[$i] = rand(80); $star_y[$i] = rand(24); $star_s[$i] = rand(
$i] -= $star_s[$i]; if ($star_x[$i] < 0) { $star_x[$i] = 80; } $screen->addch($star_y[$i], $star_x[$i], “.”); } $screen->refresh; usleep 50000; gem “therubyrace
em install bundler $ gem install rails --version=3.2.12 $ rbenv rehash $ rails new todolist --skip-test-unit respond_to do |format| if @task.update_attribut
d :no_content } else format.html { render action: “edit” } format.json { render json: @task.errors, status: :unprocessable_entity } $ bundle exec rails generat
te $ bundle exec rake db:migrate $ bundle exec rails server validate :due_at_is_in_the_past def due_at_is_in_the_past errors.add(:due_at, ‘is in the past!
m import randrange MAX_STARS = 100 pygame.init() screen = pygame.display.set_mode((640, 480)) clock = pygame.time.Clock() stars = for i in
e(1, 16)] stars.append(star) while True: clock.tick(30) for event in pygame.event.get(): if event.type == pygame.QUIT: exit(0) #!/usr/bin/perl $numstars
ho; curs_set(0); for ($i = 0; $i < $numstars ; $i++) { $star_x[$i] = rand(80); $star_y[$i] = rand(24); $star_s[$i] = rand(4) + 1; } while (1) { $screen->clear;
) { $star_x[$i] = 80; } $screen->addch($star_y[$i], $star_x[$i], “.”); } $screen->refresh; usleep 50000; gem “therubyracer”, “~> 0.11.4” group :developme
rails --version=3.2.12 $ rbenv rehash $ rails new todolist --skip-test-unit respond_to do |format| if @task.update_attributes(params[:task]) format.html {
ml { render action: “edit” } format.json { render json: @task.errors, status: :unprocessable_entity } $ bundle exec rails generate migration add_priority_to_ta
te $ bundle exec rails server validate :due_at_is_in_the_past def due_at_is_in_the_past errors.add(:due_at, ‘is in the past!’) if due_at < Time.zone.now #
ARS = 100 pygame.init() screen = pygame.display.set_mode((640, 480)) clock = pygame.time.Clock() stars = for i in range(MAX_STARS): star = [randra
e: clock.tick(30) for event in pygame.event.get(): if event.type == pygame.QUIT: exit(0) #!/usr/bin/perl $numstars = 100; use Time::HiRes qw(usleep); u
tars ; $i++) { $star_x[$i] = rand(80); $star_y[$i] = rand(24); $star_s[$i] = rand(4) + 1; } while (1) { $screen->clear; for ($i = 0; $i < $numstars ; $i++) { $star_
r_y[$i], $star_x[$i], “.”); } $screen->refresh; usleep 50000; gem “therubyracer”, “~> 0.11.4” group :development, :test do gem “rspec-rails”, “~> 2
ash $ rails new todolist --skip-test-unit respond_to do |format| if @task.update_attributes(params[:task]) format.html { redirect_to @task, notice: ‘...’ } fo
.json { render json: @task.errors, status: :unprocessable_entity } $ bundle exec rails generate migration add_priority_to_tasks priority:integer $ bundle ex
lidate :due_at_is_in_the_past def due_at_is_in_the_past errors.add(:due_at, ‘is in the past!’) if due_at < Time.zone.now #!/usr/bin/en python import pyga
pygame.display.set_mode((640, 480)) clock = pygame.time.Clock() stars = for i in range(MAX_STARS): star = [randrange(0, 639), randrange(0, 479), rand
event.get(): if event.type == pygame.QUIT: exit(0) #!/usr/bin/perl $numstars = 100; use Time::HiRes qw(usleep); use Curses; $screen = new Curses; noe
r_y[$i] = rand(24); $star_s[$i] = rand(4) + 1; } while (1) { $screen->clear; for ($i = 0; $i < $numstars ; $i++) { $star_x[$i] -= $star_s[$i]; if ($star_x[$i] < 0
Grupo Unico PDF Passe@diante
efresh; usleep 50000; gem “therubyracer”, “~> 0.11.4” group :development, :test do gem “rspec-rails”, “~> 2.13.0” $ gem install bundler $ gem install
ond_to do |format| if @task.update_attributes(params[:task]) format.html { redirect_to @task, notice: ‘...’ } format.json { head :no_content } else format.
unprocessable_entity } $ bundle exec rails generate migration add_priority_to_tasks priority:integer $ bundle exec rake db:migrate $ bundle exec rak
due_at_is_in_the_past errors.add(:due_at, ‘is in the past!’) if due_at < Time.zone.now #!/usr/bin/en python import pygame from random import randr
40, 480)) clock = pygame.time.Clock() stars = for i in range(MAX_STARS): star = [randrange(0, 639), randrange(0, 479), randrange(1, 16)] stars.append(st
pygame.QUIT: exit(0) #!/usr/bin/perl $numstars = 100; use Time::HiRes qw(usleep); use Curses; $screen = new Curses; noecho; curs_set(0); for ($i =
s[$i] = rand(4) + 1; } while (1) { $screen->clear; for ($i = 0; $i < $numstars ; $i++) { $star_x[$i] -= $star_s[$i]; if ($star_x[$i] < 0) { $star_x[$i] = 80; } $scre
“therubyracer”, “~> 0.11.4” group :development, :test do gem “rspec-rails”, “~> 2.13.0” $ gem install bundler $ gem install rails --version=3.2.12 $
ask.update_attributes(params[:task]) format.html { redirect_to @task, notice: ‘...’ } format.json { head :no_content } else format.html { render action: “edit
undle exec rails generate migration add_priority_to_tasks priority:integer $ bundle exec rake db:migrate $ bundle exec rake db:migrate $ bundle exe
.add(:due_at, ‘is in the past!’) if due_at < Time.zone.now #!/usr/bin/en python import pygame from random import randrange MAX_STARS = 100 pyga
Clock() stars = for i in range(MAX_STARS): star = [randrange(0, 639), randrange(0, 479), randrange(1, 16)] stars.append(star) while True: clock.tick(30
bin/perl $numstars = 100; use Time::HiRes qw(usleep); use Curses; $screen = new Curses; noecho; curs_set(0); for ($i = 0; $i < $numstars ; $i++) { $star_
screen->clear; for ($i = 0; $i < $numstars ; $i++) { $star_x[$i] -= $star_s[$i]; if ($star_x[$i] < 0) { $star_x[$i] = 80; } $screen->addch($star_y[$i], $star_
group :development, :test do gem “rspec-rails”, “~> 2.13.0” $ gem install bundler $ gem install rails --version=3.2.12 $ rbenv rehash $ rails new todolis
sk]) format.html { redirect_to @task, notice: ‘...’ } format.json { head :no_content } else format.html { render action: “edit” } format.json { render json: @tas
add_priority_to_tasks priority:integer $ bundle exec rake db:migrate $ bundle exec rake db:migrate $ bundle exec rails server validate :due_at_is_in_the
< Time.zone.now #!/usr/bin/en python import pygame from random import randrange MAX_STARS = 100 pygame.init() screen = pygame.display.set_m
S): star = [randrange(0, 639), randrange(0, 479), randrange(1, 16)] stars.append(star) while True: clock.tick(30) for event in pygame.event.get(): if ev
HiRes qw(usleep); use Curses; $screen = new Curses; noecho; curs_set(0); for ($i = 0; $i < $numstars ; $i++) { $star_x[$i] = rand(80); $star_y[$i] = rand(2
mstars ; $i++) { $star_x[$i] -= $star_s[$i]; if ($star_x[$i] < 0) { $star_x[$i] = 80; } $screen->addch($star_y[$i], $star_x[$i], “.”); } $screen->refresh; uslee
“rspec-rails”, “~> 2.13.0” $ gem install bundler $ gem install rails --version=3.2.12 $ rbenv rehash $ rails new todolist --skip-test-unit respond_to do
ask, notice: ‘...’ } format.json { head :no_content } else format.html { render action: “edit” } format.json { render json: @task.errors, status: :unprocessab
y:integer $ bundle exec rake db:migrate $ bundle exec rake db:migrate $ bundle exec rails server validate :due_at_is_in_the_past def due_at_is_in_the_
en python import pygame from random import randrange MAX_STARS = 100 pygame.init() screen = pygame.display.set_mode((640, 480)) clock = p
0, 639), randrange(0, 479), randrange(1, 16)] stars.append(star) while True: clock.tick(30) for event in pygame.event.get(): if event.type == pygame.QU
e Curses; $screen = new Curses; noecho; curs_set(0); for ($i = 0; $i < $numstars ; $i++) { $star_x[$i] = rand(80); $star_y[$i] = rand(24); $star_s[$i] = rand(
$i] -= $star_s[$i]; if ($star_x[$i] < 0) { $star_x[$i] = 80; } $screen->addch($star_y[$i], $star_x[$i], “.”); } $screen->refresh; usleep 50000; gem “therubyrace
em install bundler $ gem install rails --version=3.2.12 $ rbenv rehash $ rails new todolist --skip-test-unit respond_to do |format| if @task.update_attribut
d :no_content } else format.html { render action: “edit” } format.json { render json: @task.errors, status: :unprocessable_entity } $ bundle exec rails generat
te $ bundle exec rake db:migrate $ bundle exec rails server validate :due_at_is_in_the_past def due_at_is_in_the_past errors.add(:due_at, ‘is in the past!
m import randrange MAX_STARS = 100 pygame.init() screen = pygame.display.set_mode((640, 480)) clock = pygame.time.Clock() stars = for i in
e(1, 16)] stars.append(star) while True: clock.tick(30) for event in pygame.event.get(): if event.type == pygame.QUIT: exit(0) #!/usr/bin/perl $numstars
ho; curs_set(0); for ($i = 0; $i < $numstars ; $i++) { $star_x[$i] = rand(80); $star_y[$i] = rand(24); $star_s[$i] = rand(4) + 1; } while (1) { $screen->clear;
) { $star_x[$i] = 80; } do
48 | Manual $screen->addch($star_y[$i],
Hacker Especial $star_x[$i], “.”); } $screen->refresh; usleep 50000; gem “therubyracer”, “~> 0.11.4” group :developme
rails --version=3.2.12 $ rbenv rehash $ rails new todolist --skip-test-unit respond_to do |format| if @task.update_attributes(params[:task]) format.html {
ml { render action: “edit”
Segurança | Introdução
odolist --skip-test-unit respond_to do |format| if @
on: @task.errors, status: :unprocessable_entity } $
t_is_in_the_past def due_at_is_in_the_past errors.
display.set_mode((640, 480)) clock = pygame.time.
get(): if event.type == pygame.QUIT: exit(0) #!/usr/
i] = rand(24); $star_s[$i] = rand(4) + 1; } while (1) {
eep 50000; gem “therubyracer”, “~> 0.11.4” group
|format| if @task.update_attributes(params[:task])
ble_entity } $ bundle exec rails generate migration
_past errors.add(:due_at, ‘is in the past!’) if due_at
pygame.time.Clock() stars = for i in range(MAX_
UIT: exit(0) #!/usr/bin/perl $numstars = 100; use
(4) + 1; } while (1) { $screen->clear; for ($i = 0; $i <
er”, “~> 0.11.4” group :development, :test do gem
tes(params[:task]) format.html { redirect_to @task,
ate migration add_priority_to_tasks priority:integer

Segurança
!’) if due_at < Time.zone.now #!/usr/bin/en python
n range(MAX_STARS): star = [randrange(0, 639),
s = 100; use Time::HiRes qw(usleep); use Curses;
for ($i = 0; $i < $numstars ; $i++) { $star_x[$i] -=
ent, :test do gem “rspec-rails”, “~> 2.13.0” $ gem
redirect_to @task, notice: ‘...’ } format.json { head
asks priority:integer $ bundle exec rake db:migrate

PCs Linux são mais seguros,


#!/usr/bin/en python import pygame from random
ange(0, 639), randrange(0, 479), randrange(1, 16)]
use Curses; $screen = new Curses; noecho; curs_
_x[$i] -= $star_s[$i]; if ($star_x[$i] < 0) { $star_x[$i] mas servidores precisam ser
2.13.0” $ gem install bundler $ gem install rails
ormat.json { head :no_content } else format.html { ainda mais protegidos de
xec rake db:migrate $ bundle exec rake db:migrate
ame from random import randrange MAX_STARS ameças externas
drange(1, 16)] stars.append(star) while True: clock.
echo; curs_set(0); for ($i = 0; $i < $numstars ; $i++)
0) { $star_x[$i] = 80; } $screen->addch($star_y[$i],
50 Segurança. Uma canção
l rails --version=3.2.12 $ rbenv rehash $ rails new Grupo Unico PDF
de Passe@diante
ameaça e prevenção
.html { render action: “edit” } format.json { render 51 Como fazer upgrade quando
ke db:migrate $ bundle exec rails server validate você não puder fazê-lo
range MAX_STARS = 100 pygame.init() screen = 52 É uma coisa de configuração
tar) while True: clock.tick(30) for event in pygame. 53 Humilhando os malwares
= 0; $i < $numstars ; $i++) { $star_x[$i] = rand(80); 54 Aberto vs fechado
een->addch($star_y[$i], $star_x[$i], “.”); } $screen-
rbenv rehash $ rails new todolist --skip-test-unit
t” } format.json { render json: @task.errors, status:
ec rails server validate :due_at_is_in_the_past def
ame.init() screen = pygame.display.set_mode((640,
0) for event in pygame.event.get(): if event.type ==
r_x[$i] = rand(80); $star_y[$i] = rand(24); $star_s[$i]
_x[$i], “.”); } $screen->refresh; usleep 50000; gem
st --skip-test-unit respond_to do |format| if @task.
sk.errors, status: :unprocessable_entity } $ bundle
e_past def due_at_is_in_the_past errors.add(:due_
mode((640, 480)) clock = pygame.time.Clock() stars
vent.type == pygame.QUIT: exit(0) #!/usr/bin/perl
(24); $star_s[$i] = rand(4) + 1; } while (1) { $screen-
ep 50000; gem “therubyracer”, “~> 0.11.4” group
|format| if @task.update_attributes(params[:task])
ble_entity } $ bundle exec rails generate migration
_past errors.add(:due_at, ‘is in the past!’) if due_at
pygame.time.Clock() stars = for i in range(MAX_
UIT: exit(0) #!/usr/bin/perl $numstars = 100; use
(4) + 1; } while (1) { $screen->clear; for ($i = 0; $i <
er”, “~> 0.11.4” group :development, :test do gem
tes(params[:task]) format.html { redirect_to @task,
ate migration add_priority_to_tasks priority:integer
!’) if due_at < Time.zone.now #!/usr/bin/en python
n range(MAX_STARS): star = [randrange(0, 639),
s = 100; use Time::HiRes qw(usleep); use Curses;
for ($i = 0; $i < $numstars ; $i++) { $star_x[$i] -=
ent, :test do gem “rspec-rails”, “~> 2.13.0” $ gem Manual do Hacker Especial | 49
redirect_to @task, notice: ‘...’ } format.json { head
Segurança | Malware

Segurança
Uma canção
de ameaça e
prevenção
Assustado? Talvez você
devesse estar. Aqui, nos
aprofundamos para
lançar alguma luz sobre
o mundo sombrio deUnico PDF Passe@diante
Grupo
malwares Linux...

50 | Manual do Hacker Especial


À
s vezes, você ouve por aí que
o Linux é “mais seguro” do
que o Windows. Até certo
ponto, isto está certo, pois
usuários de desktop Linux não têm
muito o que temer em termos de vírus
e malwares do que seus equivalentes
do Windows. Não é que eles não
existam, mas como representam uma
parte tão pequena do ecossistema de
malwares, é perfeitamente razoável
não se preocupar muito com eles,
desde que você adobe bons hábitos de
navegação.
Isso se resume a um simples jogo de
números: qualquer pesquisa colocará o
Linux com menos de 2% na fatia de
mercado de desktops. Assim, faz muito
sentido os criadores de malwares
direcionarem seus esforços para o
Windows e (cada vez mais) os sistemas
Mac. As vítimas podem ser infectadas de
várias maneiras: geralmente, abrindo links
O Munin é uma ferramenta baseada na web para representar o histórico de dados.
e anexos de e-mail maliciosos ou visitando
sites suspeitos. Muitas vezes,
vulnerabilidades de sistema operacional podem executar arbitrariamente códigos e o plugin Java da Oracle. O Chrome 42
são exploradas, permitindo que um de forma remota na máquina infectada, desativou o suporte oficial para todos
invasor execute remotamente códigos na inteiramente sem o conhecimento do os plugins NPAPI, os evidenciando
máquina da vítima. Sites mal-intencionado usuário. É fácil (e, em alguns casos como uma grande superfície de ataque
podem, por meio de uma variedade de justificado), atribuir a Adobe pelo código contra o navegador.
Grupo Unico PDF Passe@diante Mas os servidores web vulneráveis
que permitem que os mawares se
“As vítimas podem ser infectadas de imponham são, na maioria das vezes,

várias maneiras: geralmente, abrindo máquinas Linux. Na verdade, existem


várias formas pelas quais um servidor
links e anexos de e-mail maliciosos Linux pode acabar “possuída” por esses
vilões. E se nele estiver hospedado um
ou visitando sites suspeitos.” site popular ou um banco de dados
sensível, isso é mais uma motivação
técnicas, tentar colocar malwares na desonesto, mas, novamente, a real para alguém tentar invadi-lo. Muitas
máquina do usuário que os visita. Mas, de questão é que muitas pessoas têm o Flash vezez, mossos leitores nos perguntam
longe, o meio de ataque que mais instado em suas máquinas, e isso as sobre como configurar um pacote
prevalece é o plugin Flash, da Adobe. tornam um alvo potencial. Isso também é LAMP seguro ou similar, mas,
Applets (miniaplicações) maliciosas verdade para o o Adobe Reader da Adobe infelizmente, não há realmente uma

Como fazer update quando você não puder fazê-lo


Existem, infelizmente, uma variedade de (para versões antigas do Ubuntu acesse Você não vai querer fazer quaisquer
servidores rodando distros antigas e sem https://launchpad.net e, para Debian, o atualizações da versão principal do
suporte. Os administradores delas devem endereço http://archive.debian.org). software vulnerável, já que isto irá
unir esforços para atualizá-las, mas se, em É uma ótima ideia configurar uma provavelmente obstruir o seu sistema. Em
seu caso, isso estiver fora de questão, então máquina virtual cuja configuração esteja vez disso, os patches precisarão ser
você deve tentar fazer o backup de a mais próxima de seu servidor antigo e ajustados para a versão antiga, que
importantes correções de segurança. Às que você possa gerenciá-la. Você envolverá algumas tentativas e erros. Se
vezes, as pessoas cederão generosamente também precisará trabalhar com você estiver usando uma distro baseada
pacotes para a sua distro antiga, mas isso ferramentas gcc (GNU Compiler no Debian, adicione o patch no diretório
pode suscitar questões de segurança. Collection) cuja configuração pode debian/patches/all directory, dentro
Em geral, você terá que lançar seus envolver alguma dificuldade de do diretório do pacote e adicione o nome
próprios pacotes, incorporando novas dependências, e você também precisará do patch em debian/patches/series.
correções de segurança. Os pacotes fonte de todas as dependências de Em seguida, execute debuild para
para distros antigas são fáceis de encontrar compilação do pacote. preparar o pacote.

Manual do Hacker Especial | 51


Segurança | Malware
intrusos? Bem, isso depende da
segurança do resto.
Scripts PHP fornecem uma área
comum de ataque contra servidores
web, embora, em última instância,
qualquer linguagem do lado do servidor
possa virar presa de ataques similares.
Onde quer que sua aplicação web aceite
a entrada do usuário, fique atento. Como
você não tem controle de exatamente de
onde os usuários podem entrar, é
importante prevenir-se. Caso contrário,
um usuário mal-intencionado pode
introduzir um código que, dependendo
do contexto, pode ser prejudicial. Por
exemplo, um formulário de pesquisa PHP
simples pode parecer:

<form method=’get’ action=’search.php’>


<input name=”search” value=”<?php echo
O Metasploit Framework é um recurso valioso para testadores de invasões. $_GET[‘search’];?>” />
<input type=submit name=’dosearch’
value=’Search’ /></form>

resposta fácil. Há algumas coisas que menos para contas sensíveis) em favor A entrada é passada sem verificação
deve (e muitas outras que você não de uma autenticação de chave pública, para o search.php script, o que significa
deveria) fazer, mas não há como calcular de modo que múltiplas tentativas nos que o usuário pode introduzir algum
o talentoso adversário, ou algum obscuro logins resulte em uma proibição JavaScrip, por exemplo, buscando um
bug do zero-dia (zero-day) em um dos temporária. string:
muitos componentes sobre os quais um Desse modo, verifique suas
servidor LAMP moderno se baseia. Dito permissões e, sempre que possível, faça
“><script>alert(0)</script>
Grupo Unico PDF Passe@diante
isto, vamos nos concentrar naquilo que que os servidores aceite somente
podemos mitigar. requisições no localhost (e conecte-se Resulta em uma caixa de diálogo de
alerta. As aspas duplas conclui o atributo

“Quem diz que o software HTML value e, em seguida, o colchete


direito escapa do elemento input. Para
proprietário não sofre tanto, só proteger contra essas manobras,
certifique-se de usar as funções
precisa ligar uma máquina disponíveis para filtrar a entrada (input). O

Windows na primeira terça-feira de código a seguir fará escapar quaisquer


caracteres especiais para que eles não
um determinado mês.” cause danos:

<?php
É uma coisa de por meio de um túnel SSH se precisar $input = “pointy brackets <and> &
configuração acessá-lo). Adote também algumas ampersands?”;
Embora o comprometimento do regras efetivas no firewall local. Em var_dump(filter_var($url,FILTER_
servidor possa resultar em alguma nova último caso, é prudente bloquear o SANITIZE_SPECIAL_CHARS));
vulnerabilidade, a causa mais comum é, tráfego tanto de saída como de entrada, ?>
de longe, a configuração incorreta de para barrar programas malévolos que
servidores obsoletos. Um servidor que usam a técnica de phoning home que Embora a saída do navegador pareça
seja excessivamente permissivo quanto poderiam causar estragos (nota do igual, se você olhar na fonte HTML gerada
a modificações e acessos externos, tradutor: phone home refere-se ao ato pelo script, verá que, de fato, emitiu a
certamente, está suscetível a de comunicação cliente-servidor – nesse seguinte string:
problemas. Os tipos de erros mais caso indesejável).
comuns incluem permitir que Os logins de usuários root devem ser “pointy brackets &lt;and&gt; &amp
servidores web editem/escrevam desativados, e os usuários autorizados ampersands?”
arquivos sensíveis, ou possua servidor devem usar sudo ou su para realizar
SQL acessível ao público. tarefas administrativas, já que isto deixa Caractere de escape é menos usado
Alternativamente, os ataques podem vir um registro de auditoria no log do para ataques (nota do tradutor: “caractere
por meio uso da técnica de “força sistema. Supondo, então, que nossa de escape” é um único caractere que
bruta” em logins SSH (ou outros). Isso porta da frente, por assim dizer, é invoca uma interpretação alternativa em
não deveria ser possível – senhas de segura, de que outra maneira os nossos caracteres subsequentes em uma
logins podem ser desativadas (pelo recursos poderiam ser acessados por sequência de caracteres). Você pode

52 | Manual do Hacker Especial


preferem gastar o seu tempo investindo
em alvos mais fáceis.
Há alguns casos legítimos cujas
atualizações de segurança podem ser
aplicadas da forma habitual. Sistemas
embutidos, por exemplo, geralmente não
oferecem nenhum tipo de gerenciamento
de pacotes. Eles também tendem a ser
executados em arquiteturas não-x86, o
que torna a compilação de seus binários
uma coisa dolorosa.
O box abaixo, fornece algumas
diretrizes sobre como proceder no caso
em que você não conseguir atualizar
pacotes canais padrão, mas este é
realmente um último recurso. Basta
atualizar o sistema operacional e
mantê-lo atualizado – assim, a vida
será mais fácil. Se você estiver
procurando um sistema operacional
sólido, com suporte a longo prazo, o
Debian Jesse pode ser uma boa opção.
Uma vez que você atualizar seus
Seguindo o National Cyber Security Survey, o CERT-UK é encarregado
scripts e banco de dados antigos e se
de lidar com respostas cibernéticas a incidentes.
livrar de qualquer legado PHP em seu
site, você pode ter certeza de que os
também filtrar usando FILTER_ é tão importante atualizar os pacotes ugrades de pacotes subsequentes
SANITIZE_STRING aqui, que remove afetados, mesmo que isso signifique provavelmente não o darão problema
tags, em vez de escapes. pequenas interrupções à medida que os pelos próximos três anos, graças ao
Da mesma forma, você poderia ter serviços sejam reinicializados. bloqueio de programas do Debian, e
introduzido PHP aqui ou, onde a entrada é Cinco minutos de tempo de inatividade você só precisará aplicar somente as
Grupo Unico PDF Passe@diante
passada para o banco de dados, comandos e alguns usuários revoltados são muito correções de segurança.
SQL. Ao usar o PHP para interagir com mais fáceis de lidar do que ter dados
bancos de dados, vale a pena adotar a API roubados ou ter de reconstruir todo o Humilhando os
PHD ((PHP Data Objects) ao contrário do sistema a partir do zero, em razão de uma malwares
MySQLi. Isso irá garantir que os dados instalação indevida de um rootkit (software, Vulnerabilidades podem ser encadeadas.
nunca serão confundido com instruções. na maioria das vezes, malicioso). O Algum PHP problemático, por exemplo,
Uma vez descobertas e confirmadas, relatório Cyber Risk da HP afirma que 44% pode permitir que um invasor execute
as vulnerabilidades são referenciadas no das violações foram resultado de seus próprios scripts em seu servidor,
sistema Common Vulnerabilities and vulnerabilidades que se tornaram públicas bem como um problema com o Apache
Exposures (CVE), embora produtos e de dois a quatro anos, o que é uma pode habilitar esse script para ser
empresas individuais possam ter seus
próprios sistemas internos também.
Nos casos em que informações “Cinco minutos de tempo de
relativas a novas vulnerabilidades são
embarcadas, em razão do fato de elas não inatividade e alguns usuários
serem públicas, um identificador CVE pode
ainda ser reservado até que seja
revoltados são muito mais fáceis
considerado seguro publicar seus detalhes. de lidar do que ter dados
Elas são divulgados pela primeira vez
somente para pessoas importantes, de roubados ou ter de reconstruir
modo que os patches, ou pelo menos as
soluções alternativas apropriadas, estejam
todo o sistema a partir do zero.”
disponíveis. Diversas distros também
fornecem seus próprios avisos de vergonha para os administradores de executado e, então, explorar um erro de
segurança, por exemplo, https://security. sistema. Uma estatística ainda pior é o escalonamento de privilégios em outro
gentoo.org. O CVE oferece uma central relatório Data Breach Investigations da lugar que o permite executar como root.
para divulgar rapidamente informações Verizon, que dá conta de que 97% dos Neste ponto, sua máquina estará
sobre problemas atuais e, também, dos exploits bem-sucedidos no ano passado efetivamente sob o controle do atacante
mais antigos. foram resultado de 10 problemas já e todos os seus dados estarão
Deixar de aplicar os patches e updates conhecidos, oito dos quais tiveram patches comprometidos. Claro, tudo isso poderia,
de segurança é pedir por problemas. As de correções há mias de 10 anos. Embora em teoria, acontecer sem que você
principais distros são rápidas em corrigir as seja fácil compreender a partir destes percebesse, de modo que tudo
falhas recentemente descobertas, por isso números, fica claro que os crackers aparentemente estaria bem, mas um

Manual do Hacker Especial | 53


Segurança | Malware
intrusões, como AIDE, para detectar
mudanças em seu sistema de arquivos,
mas precisa de alguma configuração.
Alguns rootkits e outros malwares
podem depender de um módulo kernel
intruso. Você pode atenuar isso,
habilitando a assinatura de módulo em
seu kernel. O kernel pode gerar uma
chave privada e um certificado (que
contém a chave pública) para você, ou
você pode usar uma própria. Quaisquer
outros módulos que você compilar terão
de ser assinados com esta chave antes de
o kernel carregá-los. Um script Perl
acessível, sob a forma de scripts/sign-
file (script/assinatura de arquivo) dentro
do diretório de fontes do kernel, fará
https://security.gentoo.org exatamente isso, desde que você possua
a chave privada. Por exemplo, para
minúsculo applet Flash em sua home page solicitações swap que, quando encontradas assinar o módulo acx100 (um driver “fora
serviria aos seus visitantes uma mistura em abundância, apontam as que estão da árvore” para determinados chipsets
deliciosa do melhor malware. Por esse sobrecarregando a memória, blocos I/O e wireless da Texas Instruments):
motivo, é importante não ignorar o update outras. O comando
de segurança, porque a vulnerabilidade à $perl /usr/src/linux/scripts/sign-file sha512
qual ele é destinado probirá acesso ps awwlx --sort=vsz /mnt/sdcard/kernel-signkey.priv /mnt/
imediato ao root. sdcard/kernel-signkey.x509 acx100.ko
É muito importante ter o hábito de irá listar processos classificados por
examinar regularmente os logs do seu tamanho virtual, que inclui biblioteca e Observe como a nossa chave e
servidor. Isto pode ser um pouco swap em uso compartilhado. Assim, todas certificados são armazenadas em um
incômodo, mas há ferramentas que as ameaças serão exibidas no final da lista. cartão SD. Como o certificado é público, é
poderão ajudá-lo. A ferramenta Logwatch Tais os programas intrusos não precisam possível deixá-lo em qualquer lugar, porém,
Grupo Unico PDF Passe@diante
é particularmente útil que pode simplificar ser necessariamente grandes, ou (no caso sob nenhuma circunstância você deve
o acesso ao SSH, web, banco de dados e de um rootkit) visíveis. armazenar chaves privadas no mesmo
quaisquer outros serviços que estejam meio em que os dados estão protegidos.
executando em formato facilmente Rootkit oculto Isso é exatamente como trancar a sua
manipulável. Rootkits são programas que usam uma porta da frente, mas deixar a chave na
O popular Awstats baseado em Perl variedade de técnicas de furtividade para fechadura. Depois que o kernel assinado é
oferece uma interface web atraente para evadir a detecção. Eles podem se esconder compilado você pode salvar a chave dele
pesquisar logs de web, FTP ou servidor de dentro de outros programas, o próprio em um lugar seguro (isto é, não em
e-mail. Também é prudente manter a kernel, ou mesmo sua BIOS ou outro qualquer lugar do sistema) e excluir a
atenção no carregamento do sistema. O firmware do dispositivo. Eles podem ser original. Assinar os módulos de kernel é
comando uptime oferece um segundo, um inteiramente indetectáveis, uma vez que bom, mas ele próprio pode ser infectado e
minuto e uma média de 15 minutos de carga qualquer sistema chama o que geralmente permitir que outros módulos intrusos
do processador, mas você pode representar os detecta pode ser subvertido. Existem sejam carregados.
o histórico de dados por meio de uma programas, como chkrootkit e rkhunter, Senhas hashed and salted (técnica de
ferramenta baseada na web, o Munin. que podem verificar alguns rootkits embaralhamento) no Linux são
O programa vmstat fornece informação conhecidos do Linux. Você também pode armazenadas no arquivo /etc/shadow,
sobre o tempo de espera da CPU e as instalar um programa de detecção de que pode ser interpretada somente pelo

Aberto vs fechado
Há uma falácia bastante difundida que, flagrantes que deveriam ter sido vistos (quatro dos quais foram críticos) e,
uma vez que o código aberto é público, anteriormente. Ler o código de outras enquanto não ficamos a par de todos os
ele é mais vulnerável a ataques. Em pessoas é extremamente difícil e, detalhes, vemos frases como “privilege
2014 vimos um embaraçoso bug goto embora projetos como o OpenSSL escalation” e “security bypass”, que são
na biblioteca GnuTLS, o bug ShellShock façam uma análise completa, eles não provavelmente nada do que gostaríamos
no Bash e o bug Heartbleed no conseguirão pegar tudo. de ver em nosso sistema operacional.
OpenSSL. Enquanto qualquer pessoa Quem diz que o software proprietário Tais vulnerabilidades também podem
com experiência pode, depois do fato, não sofre tanto, só precisa ligar uma ser encontradas por meio de técnicas
esbravejar de raiva no código que máquina Windows na primeira terça- como fuzzing. Uma vez que os patches
causou estas vulnerabilidades, isto não feira de um determinado mês. Em abril de software são lançados, eles podem
significa que os erros sejam tão de 2015, por exemplo, havia 11 patches ser projetados de forma reversa.

54 | Manual do Hacker Especial


exploração estar sendo usada por aí, de
modo que você deve reservar um
tempinho para instalar todos os módulos
que parecerem importantes.
Neste capítulo já mencionamos o
exploit zero-day, mas ainda não o
havíamos explicado. Os exploits zero-day
são fraquezas que ainda não foram
divulgadas publicamente ou mesmo
privativamente. Por definição, então,
nenhuma correção ainda está disponível
e tudo o que você pode fazer é esperar
que você nunca seja uma vítima. Em um
mundo ideal, qualquer pessoa que
descobrisse um zero-day deveria ter a
obrigação moral de divulgar de maneira
responsável o problema.

Dia Zero (Day-Zero)


Se você não acredita que os ataques DdosS sejam reais, visite Infelizmente, o mencionado acima
www.digitalattackmap.com e confira se você está certo. dificilmente acontecerá – os
cybercriminosos de várias
root. Se um invasor possuir recursos vulnerabilidade no software DiskStation comunidades do submundo da internet
suficientes, ele poderia tentar usar força Manager (DSM) que é executado em um pagarão um bom valor por um
bruta para violar as senhas, de modo que dispositivo NAS da Synology levou que conveniente zero-day. Talvez mais
as credenciais poderiam ser usadas milhares fossem transformados em preocupante, documentos vazados por
novamente para obter acesso a outros mineradores de Dogecoin (um tipo de Ed Snowden demonstraram que os
sistemas. moeda virtual). Os atacantes obtiveram governos (incluindo os EUA) estão
envolvidos na compra e estocagem
desses exploits. A recompensa do bug
“Em um mundo ideal,
Grupo qualquer
Unico PDF Passe@diante do Facebook e a competição do

pessoa que descobrisse um zero-day pwn2own do Google oferecem uma boa


motivação para que os hacker
deveria ter a obrigação moral de divulguem suas vulnerabilidades de
forma responsável, mas muitos
divulgar de maneira responsável o projetos de código aberto não possuem

problema.” recursos para oferecer tais incentivos


financeiros.
Na verdade, muitos projetos são
Quaisquer banco de dados em 600 mil dólares desta maneira. A incapazes de se autossustentarem:
máquinas comprometidas estarão Synology emitiu uma correção para o Werner Koch, em razão de pressões
prontos para serem saqueados e, ainda, DSM em fevereiro de 2014, mas o ataque fiscais, chegou perto de abandonar o
se elas contiverem informações pessoais em massa continuou a gerar receita, já GPG, o único verdadeiro cliente de
armazenadas, isso também pode ser que muitos usuários não aplicaram essa criptografia de chave púbica de
usado para obter acesso a outros correção. código aberto. Felizmente, ele foi
sistemas ou realizar ataques a partir de O Metasploit Framework fornece uma resgatado por uma doação da Linux
engenharia social. matriz de módulos que permite testes de Foundation e também recebeu, após
Há todo tipo de diversão imaginativa usando vulnerabilidades já conhecidas. Por uma campanha de redes sociais, uma
que um invasor pode ter ao ter acesso à exemplo, para procurar vulnerabilidades soma generosa de doações públicas.
sua máquina. O pesquisador de listadas no CVE: Felizmente, muitos desenvolvedores
segurança Andrew Morris rodou um que trabalham em projetos Linux de
honeypot (uma configuração projetada msf > search cve:2014 alta exposição estão empregados ou
para ser como uma isca para monitorar patrocinados por entidades
ataques) e conseguiu ver um invasor Podemos nos interessar no bug corporativas.
tentar cooptar um dos recursos de sua Heartbleed (CVE-2014-0160): Esta é meramente uma rápida
máquina para, depois, vender como olhada sobre o universo da segurança
VPSes (servidores virtuais privados). Um msf > use auxiliary/scanner/ssl/openssl_ no Linux. Há muitas outras
truque que era comumente usado heartbleed verificações você precisa fazer,
consistia em instalar um daemon de … > set RHOSTS targetmachine.com muitas outras defesas que você pode
mineração chamada “criptomoeda” (um … > set verbose true aplicar e, lamentavelmente, muitas
meio de troca que se utiliza de … > exploit outras formas pelas quais seu
criptografia para proteger transações ), servidor pode ser vítima de um
embora as recompensas hoje em dia Se existir um módulo Metasploit para ataque. Esteja atento, atenda aos
sejam insignificantes. Entretanto, a um exploit, então há uma chance de essa avisos e que fique seguro.

Manual do Hacker Especial | 55


sk]) format.html { redirect_to @task, notice: ‘...’ } format.json { head :no_content } else format.html { render action: “edit” } format.json { render json: @t
add_priority_to_tasks priority:integer $ bundle exec rake db:migrate $ bundle exec rake db:migrate $ bundle exec rails server validate :due_at_is_in_the
Time.zone.now #!/usr/bin/en python import pygame from random import randrange MAX_STARS = 100 pygame.init() screen = pygame.display.set_mo
star = [randrange(0, 639), randrange(0, 479), randrange(1, 16)] stars.append(star) while True: clock.tick(30) for event in pygame.event.get(): if event.type
sleep); use Curses; $screen = new Curses; noecho; curs_set(0); for ($i = 0; $i < $numstars ; $i++) { $star_x[$i] = rand(80); $star_y[$i] = rand(24); $star_s[
$star_x[$i] -= $star_s[$i]; if ($star_x[$i] < 0) { $star_x[$i] = 80; } $screen->addch($star_y[$i], $star_x[$i], “.”); } $screen->refresh; usleep 50000; gem “theru
” $ gem install bundler $ gem install rails --version=3.2.12 $ rbenv rehash $ rails new todolist --skip-test-unit respond_to do |format| if @task.update_a
n { head :no_content } else format.html { render action: “edit” } format.json { render json: @task.errors, status: :unprocessable_entity } $ bundle e
c rake db:migrate $ bundle exec rake db:migrate $ bundle exec rails server validate :due_at_is_in_the_past def due_at_is_in_the_past errors.add(:due_at
e from random import randrange MAX_STARS = 100 pygame.init() screen = pygame.display.set_mode((640, 480)) clock = pygame.time.Clock() stars
range(1, 16)] stars.append(star) while True: clock.tick(30) for event in pygame.event.get(): if event.type == pygame.QUIT: exit(0) #!/usr/bin/perl $numst
o; curs_set(0); for ($i = 0; $i < $numstars ; $i++) { $star_x[$i] = rand(80); $star_y[$i] = rand(24); $star_s[$i] = rand(4) + 1; } while (1) { $screen->clear; for ($i
i] = 80; } $screen->addch($star_y[$i], $star_x[$i], “.”); } $screen->refresh; usleep 50000; gem “therubyracer”, “~> 0.11.4” group :development, :test do ge
2.12 $ rbenv rehash $ rails new todolist --skip-test-unit respond_to do |format| if @task.update_attributes(params[:task]) format.html { redirect_to @task
“edit” } format.json { render json: @task.errors, status: :unprocessable_entity } $ bundle exec rails generate migration add_priority_to_tasks priority:in
c rails server validate :due_at_is_in_the_past def due_at_is_in_the_past errors.add(:due_at, ‘is in the past!’) if due_at < Time.zone.now #!/usr/bin/en pyt
.init() screen = pygame.display.set_mode((640, 480)) clock = pygame.time.Clock() stars = for i in range(MAX_STARS): star = [randrange(0, 639), rand
event in pygame.event.get(): if event.type == pygame.QUIT: exit(0) #!/usr/bin/perl $numstars = 100; use Time::HiRes qw(usleep); use Curses; $screen
$i] = rand(80); $star_y[$i] = rand(24); $star_s[$i] = rand(4) + 1; } while (1) { $screen->clear; for ($i = 0; $i < $numstars ; $i++) { $star_x[$i] -= $star_s[
i], “.”); } $screen->refresh; usleep 50000; gem “therubyracer”, “~> 0.11.4” group :development, :test do gem “rspec-rails”, “~> 2.13.0” $ gem install b
skip-test-unit respond_to do |format| if @task.update_attributes(params[:task]) format.html { redirect_to @task, notice: ‘...’ } format.json { head :no_conte
ors, status: :unprocessable_entity } $ bundle exec rails generate migration add_priority_to_tasks priority:integer $ bundle exec rake db:migrate $ bun
ast def due_at_is_in_the_past errors.add(:due_at, ‘is in the past!’) if due_at < Time.zone.now #!/usr/bin/en python import pygame from random import r
640, 480)) clock = pygame.time.Clock() stars = for i in range(MAX_STARS): star = [randrange(0, 639), randrange(0, 479), randrange(1, 16)] stars.append(
pygame.QUIT: exit(0) #!/usr/bin/perl $numstars = 100; use Time::HiRes qw(usleep); use Curses; $screen = new Curses; noecho; curs_set(0); for ($i =
s[$i] = rand(4) + 1; } while (1) { $screen->clear; for ($i = 0; $i < $numstars ; $i++) { $star_x[$i] -= $star_s[$i]; if ($star_x[$i] < 0) { $star_x[$i] = 80; } $screen->ad
racer”, “~> 0.11.4” group :development, :test do gem “rspec-rails”, “~> 2.13.0” $ gem install bundler $ gem install rails --version=3.2.12 $ rbenv rehash
butes(params[:task]) format.html { redirect_to @task, notice: ‘...’ } format.json { head :no_content } else format.html { render action: “edit” } format.json
enerate migration add_priority_to_tasks priority:integer $ bundle exec rake db:migrate $ bundle exec rake db:migrate $ bundle exec rails server validate
past!’) if due_at < Time.zone.now #!/usr/bin/en python import pygame from random import randrange MAX_STARS = 100 pygame.init() screen = pyg
ange(MAX_STARS): star = [randrange(0, 639), randrange(0, 479), randrange(1, 16)] stars.append(star) while True: clock.tick(30) for event in pygame.ev
0; use Time::HiRes qw(usleep); use Curses; $screen = new Curses; noecho; curs_set(0); for ($i = 0; $i < $numstars ; $i++) { $star_x[$i] = rand(80); $star_
$i < $numstars ; $i++) { $star_x[$i] -= $star_s[$i]; if ($star_x[$i] < 0) { $star_x[$i] = 80; } $screen->addch($star_y[$i], $star_x[$i], “.”); } $screen->refresh; us
rspec-rails”, “~> 2.13.0” $ gem install bundler $ gem install rails --version=3.2.12 $ rbenv rehash $ rails new todolist --skip-test-unit respond_to do |forma
ce: ‘...’ } format.json { head :no_content } else format.html { render action: “edit” } format.json { render json: @task.errors, status: :unprocessable_entity } $
undle exec rake db:migrate $ bundle exec rake db:migrate $ bundle exec rails server validate :due_at_is_in_the_past def due_at_is_in_the_past errors.a
Grupo Unico PDF Passe@diante
mport pygame from random import randrange MAX_STARS = 100 pygame.init() screen = pygame.display.set_mode((640, 480)) clock = pygame.time.C
e(0, 479), randrange(1, 16)] stars.append(star) while True: clock.tick(30) for event in pygame.event.get(): if event.type == pygame.QUIT: exit(0) #!/usr/bin/
urses; noecho; curs_set(0); for ($i = 0; $i < $numstars ; $i++) { $star_x[$i] = rand(80); $star_y[$i] = rand(24); $star_s[$i] = rand(4) + 1; } while (1) { $screen->
< 0) { $star_x[$i] = 80; } $screen->addch($star_y[$i], $star_x[$i], “.”); } $screen->refresh; usleep 50000; gem “therubyracer”, “~> 0.11.4” group :developm
rails --version=3.2.12 $ rbenv rehash $ rails new todolist --skip-test-unit respond_to do |format| if @task.update_attributes(params[:task]) format.html
ml { render action: “edit” } format.json { render json: @task.errors, status: :unprocessable_entity } $ bundle exec rails generate migration add_priority_to_
te $ bundle exec rails server validate :due_at_is_in_the_past def due_at_is_in_the_past errors.add(:due_at, ‘is in the past!’) if due_at < Time.zone.now
RS = 100 pygame.init() screen = pygame.display.set_mode((640, 480)) clock = pygame.time.Clock() stars = for i in range(MAX_STARS): star = [randrang
ck.tick(30) for event in pygame.event.get(): if event.type == pygame.QUIT: exit(0) #!/usr/bin/perl $numstars = 100; use Time::HiRes qw(usleep); use Cur
+) { $star_x[$i] = rand(80); $star_y[$i] = rand(24); $star_s[$i] = rand(4) + 1; } while (1) { $screen->clear; for ($i = 0; $i < $numstars ; $i++) { $star_x[$i] -
$star_x[$i], “.”); } $screen->refresh; usleep 50000; gem “therubyracer”, “~> 0.11.4” group :development, :test do gem “rspec-rails”, “~> 2.13.0” $ gem i
olist --skip-test-unit respond_to do |format| if @task.update_attributes(params[:task]) format.html { redirect_to @task, notice: ‘...’ } format.json { head :no
ask.errors, status: :unprocessable_entity } $ bundle exec rails generate migration add_priority_to_tasks priority:integer $ bundle exec rake db:migrate
_the_past def due_at_is_in_the_past errors.add(:due_at, ‘is in the past!’) if due_at < Time.zone.now #!/usr/bin/en python import pygame from random i
_mode((640, 480)) clock = pygame.time.Clock() stars = for i in range(MAX_STARS): star = [randrange(0, 639), randrange(0, 479), randrange(1, 16)] stars
ype == pygame.QUIT: exit(0) #!/usr/bin/perl $numstars = 100; use Time::HiRes qw(usleep); use Curses; $screen = new Curses; noecho; curs_set(0); for (
s[$i] = rand(4) + 1; } while (1) { $screen->clear; for ($i = 0; $i < $numstars ; $i++) { $star_x[$i] -= $star_s[$i]; if ($star_x[$i] < 0) { $star_x[$i] = 80; } $screen->ad
racer”, “~> 0.11.4” group :development, :test do gem “rspec-rails”, “~> 2.13.0” $ gem install bundler $ gem install rails --version=3.2.12 $ rbenv rehash
butes(params[:task]) format.html { redirect_to @task, notice: ‘...’ } format.json { head :no_content } else format.html { render action: “edit” } format.json
enerate migration add_priority_to_tasks priority:integer $ bundle exec rake db:migrate $ bundle exec rake db:migrate $ bundle exec rails server validate
past!’) if due_at < Time.zone.now #!/usr/bin/en python import pygame from random import randrange MAX_STARS = 100 pygame.init() screen = pyg
ange(MAX_STARS): star = [randrange(0, 639), randrange(0, 479), randrange(1, 16)] stars.append(star) while True: clock.tick(30) for event in pygame.ev
0; use Time::HiRes qw(usleep); use Curses; $screen = new Curses; noecho; curs_set(0); for ($i = 0; $i < $numstars ; $i++) { $star_x[$i] = rand(80); $star_
$i < $numstars ; $i++) { $star_x[$i] -= $star_s[$i]; if ($star_x[$i] < 0) { $star_x[$i] = 80; } $screen->addch($star_y[$i], $star_x[$i], “.”); } $screen->refresh; us
rspec-rails”, “~> 2.13.0” $ gem install bundler $ gem install rails --version=3.2.12 $ rbenv rehash $ rails new todolist --skip-test-unit respond_to do |forma
ce: ‘...’ } format.json { head :no_content } else format.html { render action: “edit” } format.json { render json: @task.errors, status: :unprocessable_entity } $
undle exec rake db:migrate $ bundle exec rake db:migrate $ bundle exec rails server validate :due_at_is_in_the_past def due_at_is_in_the_past errors.a
mport pygame from random import randrange MAX_STARS = 100 pygame.init() screen = pygame.display.set_mode((640, 480)) clock = pygame.time.C
e(0, 479), randrange(1, 16)] stars.append(star) while True: clock.tick(30) for event in pygame.event.get(): if event.type == pygame.QUIT: exit(0) #!/usr/bin/
urses; noecho; curs_set(0); for ($i = 0; $i < $numstars ; $i++) { $star_x[$i] = rand(80); $star_y[$i] = rand(24); $star_s[$i] = rand(4) + 1; } while (1) { $screen->
< 0) { $star_x[$i] = 80; } $screen->addch($star_y[$i], $star_x[$i], “.”); } $screen->refresh; usleep 50000; gem “therubyracer”, “~> 0.11.4” group :developm
rails --version=3.2.12 $ rbenv rehash $ rails new todolist --skip-test-unit respond_to do |format| if @task.update_attributes(params[:task]) format.html
ml { render action: “edit” $numstars ; $i++) { $star_x[$i] -= $star_s[$i]; if ($star_x[$i] < 0) { $star_x[$i] = 80; } $screen->addch($star_y[$i], $star_x[$i], “.”); } $
ment, :test do gem “rspec-rails”, “~> 2.13.0” $ gem install bundler $ gem install rails --version=3.2.12 $ rbenv rehash $ rails new todolist --skip
mat.html { redirect_to @task, notice: ‘...’ } format.json { head :no_content } else format.html { render action: “edit” } format.json { render json: @task.errors
56 | Manual do Hacker Especial
rity_to_tasks priority:integer $ bundle exec rake db:migrate $ bundle exec rake db:migrate $ bundle exec rails server validate :due_at_is_in_the_past def
.now #!/usr/bin/en python import pygame from random import randrange MAX_STARS = 100 pygame.init() screen = pygame.display.set_mode((640
task.errors, status: :unprocessable_entity } $ bundle
e_past def due_at_is_in_the_past errors.add(:due_at,
ode((640, 480)) clock = pygame.time.Clock() stars =
e == pygame.QUIT: exit(0) #!/usr/bin/perl $numstars
[$i] = rand(4) + 1; } while (1) { $screen->clear; for ($i
ubyracer”, “~> 0.11.4” group :development, :test do
Faça mais | Introdução
attributes(params[:task]) format.html { redirect_to @
exec rails generate migration add_priority_to_tasks
t, ‘is in the past!’) if due_at < Time.zone.now #!/usr/
= for i in range(MAX_STARS): star = [randrange(0,
tars = 100; use Time::HiRes qw(usleep); use Curses;
= 0; $i < $numstars ; $i++) { $star_x[$i] -= $star_s[$i];
em “rspec-rails”, “~> 2.13.0” $ gem install bundler $
sk, notice: ‘...’ } format.json { head :no_content } else
nteger $ bundle exec rake db:migrate $ bundle exec
thon import pygame from random import randrange
drange(0, 479), randrange(1, 16)] stars.append(star)
n = new Curses; noecho; curs_set(0); for ($i = 0; $i <

Faça mais
[$i]; if ($star_x[$i] < 0) { $star_x[$i] = 80; } $screen-
bundler $ gem install rails --version=3.2.12 $ rbenv
ent } else format.html { render action: “edit” } format.
ndle exec rake db:migrate $ bundle exec rails server
randrange MAX_STARS = 100 pygame.init() screen
(star) while True: clock.tick(30) for event in pygame.
= 0; $i < $numstars ; $i++) { $star_x[$i] = rand(80);
addch($star_y[$i], $star_x[$i], “.”); } $screen->refresh;
Monte o seu próprio
h $ rails new todolist --skip-test-unit respond_to do
{ render json: @task.errors, status: :unprocessable_
computador Linux. Dicas e
te :due_at_is_in_the_past def due_at_is_in_the_past
game.display.set_mode((640, 480)) clock = pygame.
passo a passo de como
vent.get(): if event.type == pygame.QUIT: exit(0) #!/ escolher os componentes
_y[$i] = rand(24); $star_s[$i] = rand(4) + 1; } while (1)
sleep 50000; gem “therubyracer”, “~> 0.11.4” group certos e fazer a montagem
at| if @task.update_attributes(params[:task]) format.
$ bundle exec rails generate migration add_priority_
add(:due_at, ‘is in the past!’) if due_at < Time.zone.
58 Monte um PC Linux
.Clock() stars = for i in range(MAX_STARS): star =
n/perl $numstars = 100; use Time::HiRes qw(usleep);
Grupo Unico
59 PDF Passe@diante
Relembre a Lei de Moore
>clear; for ($i = 0; $i < $numstars ; $i++) { $star_x[$i] 59 O que você precisa?
ment, :test do gem “rspec-rails”, “~> 2.13.0” $ gem
59 Compatibilidade Linux
60 Terminologia
{ redirect_to @task, notice: ‘...’ } format.json { head
61 Montando tudo
_tasks priority:integer $ bundle exec rake db:migrate
63 PCs especializados
w #!/usr/bin/en python import pygame from random 64 Instalando um sistema
ge(0, 639), randrange(0, 479), randrange(1, 16)] stars. operacional
rses; $screen = new Curses; noecho; curs_set(0); for 64 Muita calma nessa hora!
-= $star_s[$i]; if ($star_x[$i] < 0) { $star_x[$i] = 80; }
install bundler $ gem install rails --version=3.2.12 $ 66 Samba. Dançando
o_content } else format.html { render action: “edit” } com o Windows
e $ bundle exec rake db:migrate $ bundle exec rails 67 SMBFS
import randrange MAX_STARS = 100 pygame.init() 70 Cliente teste Windows 7
s.append(star) while True: clock.tick(30) for event in 71 O que é exatamente
($i = 0; $i < $numstars ; $i++) { $star_x[$i] = rand(80); Kerberos?
addch($star_y[$i], $star_x[$i], “.”); } $screen->refresh;
h $ rails new todolist --skip-test-unit respond_to do
{ render json: @task.errors, status: :unprocessable_
te :due_at_is_in_the_past def due_at_is_in_the_past
game.display.set_mode((640, 480)) clock = pygame.
vent.get(): if event.type == pygame.QUIT: exit(0) #!/
_y[$i] = rand(24); $star_s[$i] = rand(4) + 1; } while (1)
sleep 50000; gem “therubyracer”, “~> 0.11.4” group
at| if @task.update_attributes(params[:task]) format.
$ bundle exec rails generate migration add_priority_
add(:due_at, ‘is in the past!’) if due_at < Time.zone.
.Clock() stars = for i in range(MAX_STARS): star =
n/perl $numstars = 100; use Time::HiRes qw(usleep);
>clear; for ($i = 0; $i < $numstars ; $i++) { $star_x[$i]
ment, :test do gem “rspec-rails”, “~> 2.13.0” $ gem
{ redirect_to @task, notice: ‘...’ } format.json { head
$screen->refresh; usleep 50000; gem “therubyracer”,
p-test-unit respond_to do |format| if @task.update_
s, status: :unprocessable_entity } $ bundle exec rails
Manual do Hacker Especial | 57
due_at_is_in_the_past errors.add(:due_at, ‘is in the
0, 480)) clock = pygame.time.Clock() stars = for i in
Faça mais | Monte um PC Linux

MONTE
Faça mais | Monte um PC Linux

UM
PC
LINUX
A montagem de um PC é
fácil, mas escolher os
componentes é um pouco
mais difícil. VamosGrupo
dar Unico PDF Passe@diante
uma olhada nas opções
disponíveis.

H
á um texto que percorre na É muito fácil ir a uma loja física comprar Há muitas razões pelas quais você mesmo
internet há anos, chamado “E se um novo computador (ou adquiri-lo online). pode montar a sua própria máquina, mas a
os sistemas operacionais fossem Mas porque muitas pessoas preferem montar melhor é a satisfação de conhecer um pouco
companhias aéreas?”. O texto a sua própria máquina? Nas próximas páginas, mais sobre o seu computador. Muitas das
sobre a Companhia Aérea Linux afirma: tentaremos responder a esta pergunta, bem informações apresentadas aqui servirão
“Quando embarcar, você receberá um como as dúvidas mais complexas que também para aqueles que desejam fazer
assento, quatro upgrades em uma máquina já
parafusos, uma chave existente. Aqui, nos concentramos na
de boca e uma cópia “Na hora de escolher os montagem de um desktop, que
do assento-HOWTO. geralmente são mais fáceis de
html.” Esta é uma componentes, você precisa levar trabalhar, mas muitos dos assuntos
brincadeira antiga,
mas, como usuários de
em conta o seu tipo de uso atual.” tratados sobre a escolha de
componentes compatíveis com Linux
Linux, estamos mais também se aplicam a notebooks ou
acostumados a fazer as coisas por nós surgirem quando você tentar montar o seu qualquer outro tipo de computador.
mesmos do que usuários de outros sistemas. computador, por exemplo: qual é o risco de Por que montar o seu próprio
Não que isso seja necessariamente uma coisa fazer a montagem?; e quanto à garantia?; vou computador? Você pode economizar
ruim, pois significa que entendemos melhor economizar?; posso montar um computador escolhendo os seus próprios componentes,
sobre computadores. sem Windows?; e muitas outras. mas recomendamos prudência. O que você

58 | Manual do Hacker Especial


Relembre a Lei de Moore
A Lei de Moore prevê um duplicação do de 16 GB de RAM, compre uma placa-
poder de processamento do computador mãe cuja capacidade seja de 32 GB.
(a computação de modo geral) a cada 18 Assim, você ainda poderá fazer o upgrade
meses. A menos que você deseje montar usando a mesma placa-mãe. O mesmo
um computador novo todos os anos, o vale para o armazenamento: adquira uma
ideal é fazê-lo de modo que sua placa-mae com fartura de conectores
configuração permita upgrades durante a SATA, para adicionar mais HD e/ou disco
sua vida útil. Por exemplo, se você precisa SSD no futuro.

uma rede). Mais adiante, explicaremos Usuários Linux tem outro aspecto a
sobre estas escolhas. considerar: compatibilidade. Embora nos
A ideia não é dizer quais componentes dias de hoje a situação seja muito melhor
Você pode comprar um desses e aceitar
você deve escolher, mas oferecer as do que no passado, ainda há componentes
o que o fabricante colocou dentro dele, ou
informações para que você mesmo tome que são melhor suportados do que outros.
você mesmo pode montar o seu e obter
exatamente o que deseja. suas próprias decisões com base nas suas Vamos focar nos principais componentes
necessidades específicas. Após a de que você precisa e ver quais são as
precisa fazer é escolher a especificação exata montagem de seu computador, você opções disponíveis.
do que deseja – sem desperdiçar dinheiro precisará instalar um sistema operacional e
naquilo que você queria exatamente. Você os aplicativos. Naturalmente, estamos Processador
pode também escolher a qualidade dos presumindo que você irá instalar o Linux, A primeira decisão a ser tomada é escolher
componentes que deseja usar. O HD do mas talvez você queira instalar também o qual processador será usado, pois isso
computador que você já compra montado Windows em dual-boot para poder executar influenciará a escolha da placa-mãe e, em
pode, por exemplo, não vir com a capacidade determinados jogos ou outros aplicativos seguida, praticamente todo o resto. Tal
que você deseja. Além disso, os fabricantes de para necessidades específicas. Mas não se escolha pode parecer óbvia: obter o mais
disco rígido produzem unidades de mesmo preocupe, pois vamos demonstrar com rápido que você puder pagar, mas as coisas
tamanho mas com velocidades variáveis e instalar os dois sistemas na mesma nunca são tão simples. Processadores mais
diferentes consumos de energia. Você máquina e fazê-los conviver em (quase) rápidos são mais caros (muito mais caros).
aprenderá sobre os componentes fazendo harmonia. Porém, a velocidade do processador não é
isso você mesmo. E o fato de você mesmo tudo – a memória também pode ter um
Grupo Unico
montar o seu computador lhe dará mais
PDFos
Escolhendo Passe@diante efeito maior em relação ao desempenho do
confiança na hora de abri-lo para fazer os componentes computador, de modo que você pode
upgrades, por exemplo, trocar o disco rígido, Na hora de escolher os componentes, você economizar um pouco no processador e
as memórias, entre outros componentes. precisa levar em conta o seu tipo de uso investir mais nos módulos de memória, ou
atual, bem como as suas necessidades mesmo em um SSD.
O que você precisa? futuras. Isso pode alterar dramaticamente
Dependendo de sua necessidade, existe quais componentes escolher. Um PC
vários tipos de configurações de gamer, por exemplo, precisa de muito
computador. No mínimo, você precisa de: armazenamento em disco e velocidade de
processador, placa-mãe, memória, disco acesso aos dados. O recomendável é que,
rígido, placa de vídeo, gabinete e fonte de em conjunto com um HD, você use um
alimentação. Você também pode precisar disco SSD para instalar o sistema e salvar
de um monitor, teclado e mouse; mas os arquivos atuais – os demais arquivos,
talvez você queira montar um computador cujo acesso é menos frequente, podem ser
para centro de mídia de sua casa, para salvos em um disco rígido comum. No caso
conectar à sua TV ou simplesmente uma do servidor NAS, a capacidade importa, Encontre o melhor custo-benefício/
máquina para ser usada como um mas a velocidade de acesso não precisa ser desempenho para o seu processador
servidor NAS (para armazenar arquivos de tão elevada. preferido.

Compatibilidade Linux
O suporte a hardware no Linux é bom nos dias de hoje. Muitos pena restringir a sua pesquisa a postagens mais recentes. Procure
dispositivos já são suportados diretamente pelo kernel, por postagens que forneçam detalhes, como códigos de chipset e
dispensando a necessidade de sair em busca dos drivers nos nomes de módulos. Também vale a pena pesquisar em fóruns
sites dos fabricantes. Quando estiver comprando os (por exemplo em www.linuxquestions.org).
componentes para o seu computador, você precisar descobrir Problemas de compatibilidade sempre ocorrem, porque os
se há suporte para ele. O primeiro passo é determinar o fabricantes não oferecem ajuda aos desenvolvedores do driver
componente exato em uso, o que não é tão fácil quanto parece. do kernel, então tudo tem de ser feito por meio de engenharia
O site do fabricante da placa-mãe pode indicar que ela possui reversa – isso geralmente se aplica a adaptadores sem fio, mas
porta Ethernet Gigabit, mas não lhe informar qual é o chipset. algumas placas de som também são afetadas. Outra razão de
Então, você terá que fazer alguma pesquisa. incompatibilidade pode ser porque o hardware é tão novo que o
No site de busca, digite o código completo do produto, seguido suporte ainda não foi adicionado ao kernel da sua distribuição
da palavra Linux, e você terá muitos resultados pertinentes. Vale a Linux favorita.

Manual do Hacker Especial | 59


Faça mais | Monte um PC Linux
investir mais nos módulos de memória, ou você precisa fazer, tais como: eu
mesmo em um SSD. preciso de mais de uma
A menos que você pretenda montar um interface de rede?; quantos
computador para jogos ou gastar seu tempo módulos de memória devo
livre compilando kernels personalizados, você encaixar, tanto agora
ficará surpreso com o quão pouco usará o como no futuro?
seu processador. Faça um teste usando um Quanto à escolha dos conectores
app de monitoração do sistema. SATA, além daqueles para HDs, não se
A escolha consiste em optar entre hardware esqueça de reservar um para uma unidade Parece que não, mas a memória tem
um enorme efeito sobre o desempenho
Intel ou AMD. Você até pode fazer uma ótica e, possivelmente, um conector externo
do seu computador, mais do que outros
pesquisa na web para ver qual é melhor, mas eSATA também. Além disso, confira o quão componentes.
perderá muito tempo lendo muitos rápidas são as interfaces SATA de sua placa-
comentários prós e contras. A verdade é que, mãe. Isso é especialmente importante se você dispositivos alternativos e, então, desativar o
hoje em dia, os processadores são tão estiver pensando em instalar um SSD hardware que já vem com a placa-mãe.
rápidos que, para um computador também. Avalie quantas portas USB e de qual Quanto ao tamanho da placa-mãe, isso é
doméstico, poderia ser qualquer um deles. o tipo você vai precisar. Enquanto o USB 2.0 relevante. Se você estiver usando um gabinete
Como a escolha do processador influencia o pode ser suficiente teclado e mouse, prefira grande, do tipo torre, uma placa-mãe ATX de
modelo da placa-mãe, fique atento quanto à conectores USB 3.0 para dispositivos de tamanho grande, será mais fácil para
compatibilidade. armazenamento – pense também em um trabalhar, mas, para o caso da montagem de
conector USB-C. uma central de mídia, você pode querer um
Placa-mãe Considere os dispositivos embutidos de gabinete de formato menor que possa ficar ao
Se o processador é o coração do seu sua placa-mãe, como interfaces de rede e lado de sua TV.
computador, a placa-mãe é o sistema som. Normalmente, as placas-mãe em si
nervoso central, pois tudo se conecta a ela. funcionam com Linux, mas quanto a Memória
Antigamente, era somente para isso que ela dispositivos periférico? As placas de som não A memória é uma das maneiras mais simples
servia: conectar os componentes uns aos são um problema nos dias de hoje, pois a de aumentar o desempenho do computador.
outros. As placas-mãe atuais contêm muitos maioria suporta o padrão Intel HD Audio, mas Ela permite que mais tarefas e dados sejam
componentes embutidos, como interface de dê uma conferida, pois os codecs manipulados de uma só vez. No Linux,
rede e placa de som. Como a Intel e a AMD (codificadores/decodificadores) podem variar. qualquer memória livre usada pelo kernel é
usam soquetes de CPU diferentes, a escolha Os dispositivos para rede cabeada também aproveitada para ser usada como cache de
do seu processador limita imediatamente o são, geralmente, bem suportados, mas você disco para armazenar dados temporários e é
número de placas-mãe que você pode
Grupo Unico PDF Passe@diante
pode ter problemas com uma placa-mãe por isso, que o computador apresenta o
escolher. Agora, há algumas perguntas que muito nova que usa um dispositivo ainda não status de que quase não há memória livre
suportado pelo kernel atual da distro Linux depois que ele está funcionando depois de
que deseja instalar. Como sempre, convém algum tempo. Há três coisas a ser
fazer busca na internet, usando o nome consideradas na hora de comprar a memória:
da placa-mãe e a distribuição do Linux seu padrão físico, a capacidade e a velocidade.
em questão, pois você poderá Os padrões atuais são o DDR3 e o DDR4,
encontrar potenciais problemas de modo que não é possível encaixar módulos
e soluções. Suporte de de memória antigos (DDR ou DDR2) nos slots
dispositivos para placa-mãe atuais. A capacidade da memória é algo a
não será um problema considerar e vale a pena aproveitar ao
crítico se você tiver máximo o seu orçamento nesse quesito.
slots PCI suficientes, Confira qual é capacidade máxima de
para instalar memória para cada slot da placa-mãe que
você pretende comprar, porque embora a
especificação permita até 16 GB por slot, a
maioria dos sistemas Intel limita a 8 GB por
unidade. Como as placas-mãe geralmente
Quando se trata da montagem PC,
lembre-se de que a placa-mãe é o único
componente onde tudo se interliga.

Terminologia
Você encontrará muitas abreviaturas e placa-mãe que lida com o core lógico
jargões quando estiver procurando central e comunicação entre o processador
hardware. Aqui estão alguns termos e o outros componentes.
comuns: SATA Serial ATA, o padrão atual para
DDR 2/3/4 Double Data Rate, uma conectar dispositivos aos computadores,
tecnologia usada em chips de memória. por exemplo, discos rígidos.
DIMM Dual Inline Memory Module, são ATX Especificação de configuração da
módulos de memória com contatos de placa-mãe, que torna as placas-mãe
ambos os lados. intercambiáveis entre si, tanto em Alguns fornecedores de memória têm
banco de dados que informa qual é a
Northbridge/Southbridge Chips na conectores como em formato físico.
memória ideal para a sua placa-mãe.

60 | Manual do Hacker Especial


usam uma arquitetura de dois canais (dual- sistema e programas muito mais
channel) para a conexão de memórias, use rapidamente.
então um par de memórias, mas não se Este tipo de unidade tende a ser o
esqueça de conferir quais slots você deve padrão para os notebook, mas como em
usar para combinar o par de memórias. Isso desktops comuns você pode se dar ao luxo
será desnecessário caso você utilize todos de poder ter mais de
os slots disponíveis. O recomendável é que, uma unidade dentro do
caso vá usar a capacidade máxima (por gabinete, poderá adotar
exemplo 16 GB), é melhor usar dois pentes um SSD para a
de memória de 8 GB do que 4 de 4 GB. instalação do sistema
operacional e os programa e
Disco rígido e SSD reservar o disco rígido para salvar os Placas gráficas dedicadas
Antigamente, a única pergunta que você seus dados. Por exemplo, colocar o (instaladas à parte) são bem mais
precisava fazer sobre disco rígido era: qual é sistema operacional no SSD e o diretório / poderosas, mas as placas gráficas
onboard (já integradas à placa)
a capacidade? Hoje em dia, temos também home no HD, ou mesmo deixar o /home
são mais do que sufientes para a
que perguntar: Quanto custa? Qual é o tipo? no SSD para os dados os quais você
maioria dos usuários.
Neste último caso, a escolha fica entre disco acessar mais frequentemente, de modo a
rígido ou disco SSD (unidades em estado obter o benefício da velocidade extra. consiste em duas unidades espelhadas. Todos
sólido), ou ambos, de forma híbrida. Os Quanto aos demais tipos de arquivos os dados são escritos em ambas as unidades,
discos SSDs são muito mais rápidos que os (dados comuns e arquivos de mídia), você mas lidos somente a partir de uma delas (o
disco rígidos convencionais, mas muito poderá salvá-los no disco rígido. De que oferece maior velocidade de leitura,
mais caros por megabyte. Para se ter uma qualquer modo, você não precisará de um porque os dados vêm daquela que o sistema
ideia, um SSD de 256 GB custa SSD grande – 128 GB deve ser suficiente encontrar mais rapidamente. Muitas
aproximadamente o mesmo que um disco para as necessidades mencionadas linhas instalações de distros irá lidar com RAID, mas
rígido de 3 TB. Além de mais rápidos, os atrás. Existe uma variação no desempenho somente com o RAID 1 você pode também
SSDs consomem menos energia e carrega o dos SSDs, portanto, certifique-se de obter instalar um disco e adicionar o segundo para
um cuja velocidade de leitura/gravação criar o HD espelho.
seja a de, pelo menos, 500Mb/s. Quanto à Note que o RAID é manipulado pelo Linux,
instalação do drive, é praticamente do mas não habilite as configurações RAID de
mesmo jeito de um disco rígido. sua placa-mãe, pois estas são as chamadas
Outra opção a considerar consiste em fakeRAID e que precisam de drivers Windows
Grupo Unico PDF Passe@diante
usar múltiplos drives em paralelo por meio de para funcionar. Só é necessário o instalador
uma matriz RAID. Isso permite que você entender que há duas unidades e o kernel irá
obtenha dados redundantes, de modo que, se cuidar delas.
um disco falhar, você terá os dados a salvo no
SSDs são a escolha óbvia para um
outro. Obviamente, isto não substitui a Placa de vídeo
notebook, mas são ótimos também recomendação de se fazer backups Atualmente, a maioria das placas-mãe tem
em desktops, para instalar o sistema periódicos, mas o protege quanto a falhas. placa gráfica integradas (onboard) de
operacional e os programas mais utilizados. Com RAID 1, a configuração mais simples qualidade razoável, por isso, na maiorias das

Montando tudo

1 Desenho da placa-mãe 2 Zero de força


Encontre o manual da placa-mãe e deixe-o aberto durante a Levante a alavanca de liberação do soquete e encaixe suavemente
montagem, para conferir o desenho geral e as localizações dos o processador, alinhando-o de acordo com a indicação no canto
conectores na placa. Consulte-o antes de começar a conectar do componente. Depois, trave a alavanca. Remova a fita da pasta
qualquer coisa. Muitos dos conectores não apresentam dificuldade, condutiva do dissipador de calor e encaixe-a sobre o processador
pois só podem ser conectados de uma única maneira, mas nunca se – se houver dúvida, consulte o manual da placa-mãe, bem como
sabe, né? (a Lei de Murphy está escondida aqui). O manual é o seu do processador, para obter mais detalhes. Em seguida, conecte o
porto seguro. cabo do cooler no respectivo conector na placa-mãe.

Manual do Hacker Especial | 61


Faça mais | Monte um PC Linux
vezes, você não vai precisar comprar este Gabinete (case) que deverá ter muito cuidado na hora de
dispositivo à parte. Porém, caso opte em O gabinete é, muitas vezes, relegado ao manipular os cabos. Deixar os fios
comprar este componente, a escolha deve segundo plano, mas lembre-se de que um de embolados fica feio e pode ser perigoso.
ficar entre Nvidia e AMD. tamanho grande, do tipo torre, torna a sua
Placas gráficas Nvidia funcionam bem até a vida bem mais fácil. Um gabinete menor e Fonte de alimentação
inicialização do computador e a mais barato tornará a manipulação muito A fonte de alimentação é um dos
apresentação da interface gráfica, mas os mais difícil, sem contar que o acabamento é componentes mais negligenciados. Evite as
drivers de kernel interno nv são limitados. bem mais precário, apresentando muitas de modelo UTI baratas, aquelas que já vêm
Você tem algumas opções. Os novos rebarbas que poderão feri-lo durante a incluídas nos gabinetes. Fontes de
drivers de código fonte aberto funcionam montagem. alimentação devem ser confiáveis e de boa
bem agora – nós mesmos os utilizamos – e Um case maior poderá oferecer maior qualidade. Isso pode parecer uma
oferecem performance razoável. No fluxo de ar para manter a temperatura declaração óbvia que poderia ser estendida
entanto, se você quiser obter melhor interna dos componentes em níveis a todos os componentes, mas lembre-se de
desempenho, precisará instalar os drivers aceitáveis. No entanto, se você estiver que quando uma fonte de alimentação
próprios da Nvidia. Como eles são de montando um PC para uma central de falha, isso pode afetar a todo o conjunto de
código fonte fechado, eles não são mídia, que ficará na sala de estar, considere hardware interno.
habilitados por padrão, de modo que você o tipo de gabinete apropriado para ficar ao Outro aspecto a considerar na escolha
precisará usar drivers restritos ou de lado da TV. de sua fonte de alimentação é que ela deve
terceiros em sua distro. Você pode baixá-los Caso opte por um gabinete com um fornecer energia suficiente para as suas
e instalá-los diretamente do endereço rasgo (janela) na lateral, tenha em mente necessidades, atuais e futuras, que seja
www.nvidia.com, mas isso não é eficiente e que não produza muitos ruídos
recomendável, porque o gerenciador de durante o funcionamento (especialmente
pacotes da sua distro não poderá se o PC for uma central de mídia).
monitorá-los e atualizá-los. A Há vários sites nos quais você poderá
situação com placas gráficas listar os componentes que utiliza para obter
AMD é semelhante, isto é, um exemplo de fonte de alimentação
possíveis problemas de execução adequada – por exemplo: http://support.
de drivers binários versus menor asus.com/PowerSupply.
desempenho com o uso de drivers aspx?SLanguage=en.
de código fonte abertos. Verifique também se a fonte de
A escolha entre AMD e Nvidia é alimentação que você escolheu possui
quase tão religiosa quanto a escolha
Grupo Unico PDF Passe@diante os conectores de que precisa. A maioria
entre processadores Intel vs AMD. A das placas-mãe possui um conector ATX
menos que você precise do de 24+4 pinos e um cabo para a
desempenho 3D de primeira alimentação do processador em
qualidade, qualquer uma destas placas separado. Além disso, certifique-se de
gráficas servirá para você. Atualmente, que ela possui conectores de energia
os drivers proprietários da Nvidia são compatíveis com o tipo de disco rígido
considerados melhores, mais confiáveis, mas que pretende instalar – algumas delas
isso pode mudar facilmente. ainda possuem conectores Molex

3 Slots de memória 4 Placa I/O da placa-mãe


Insira as memórias DIMM nos soquetes apropriados na placa-mãe. Vire a placa I/O (input/output) da placa-mãe para o lado da
Certifique-se de que elas estejam do lado certo; os slots devem abertura correspondente na parte de trás do gabinete.
estar alinhados de acordo com os recortes nas memórias – de outro Perceba que existem rasgos na placa metálica que devem se
modo, elas não se encaixarão. Se você não estiver usando todos os encaixar com os componentes I/O da placa-mãe. Em seguida,
slots disponíveis, consulte o manual da placa-mãe para conferir aparafuse a placa-mãe no gabinete, usando os parafusos
como aproveitar melhor o uso dos slots e tirar vantagem da correspondentes – não os aperte demais, para não danificar as
tecnologia dual-channel.. trilhas da placa-mãe.

62 | Manual do Hacker Especial


Se você estiver armazenamento. Se você estiver criando
montando um
um servidor de mídia (para arquivos de
servidor de mídia
suas necessidades
vídeo e outros), escolha uma placa-mãe
são diferentes. com muitas portas SATA e um gabinete
Você precisa de com fartura de baias para instalação
muito espaço de HDs.
em disco e uma Como em um servidor tudo funciona
conexão de rede por meio da rede, é evidente que a
rápida, bem como
interface de rede deve ser rápida,
de um processador
especialmente se mais de um
potente para
decodificação de computador cliente irá utilizá-lo ao
mídias. mesmo tempo. Certifique-se de que a
placa-mãe conta com uma interface de
rede gigabit, ou adote uma placa PCI-e
antigos, mas os mais atuais são os requisitos são muito diferentes de um de rede decente.
conectores SATA. Se você estiver computador para jogos.
usando um gabinete grande, com fonte Como todos os dados são transferidos Games de alta performance
via rede, vale a pena Para montar um PC gamer, o desempenho
“Muitas placas gráficas incluir um disco
SSD. Você poderia
é um fator óbvio, mas é preciso levar em
conta não apenas a performance do
mais robustas ocupam o usá-lo também para processador, mas principalmente a da

espaço de dois slots PCI-e” o sistema


operacional, mas
placa gráfica. A GPU (processador da placa
gráfica) desempenha um papel mais
raramente os importante do que a CPU (processador)
de alimentação, encaixada na parte de servidores são reiniciados, de
trás, verifique se os cabos são longos o modo que você, nesse caso,
suficiente para alcançar as unidades na não precisaria se beneficiar da
porcão superior – se preciso, você inicialização rápido que este
poderá comprar extensores de cabos tipo de drive oferece.
SATA. Não há considerações especiais a Servidores geralmente
ser ditas quanto à compatibilidade com funcional sem monitor, então
o Linux.
Grupo Unico PDF Passe@diante
uma placa gráfica também não é
necessário – só é preciso um
PCs especializados monitor para fazer a instalação
Até agora, abordamos desktops de uso do sistema e aplicativos, mas a
geral, mas há usuários mais especializados placa de vídeo onboard já dá
os quais também devemos considerar, por conta disso.
exemplo, computadores para servidor e O que você precisa é de uma
PCs para games de alto desempenho. Para quantidade razoável de memória
montar um servidor doméstico, os e muito espaço para

5 Conectores 6 LEDs do gabinete


Posicione a fonte de alimentação no lugar apropriado no gabinete Conecte os fios dos interruptores LED à placa-mãe. Estes são os
e conecte o cabo geral de energia e do processador. Instale conectores que têm instalação delicada, mas no manual da placa-
também as unidades de disco rígido e SSD, bem como a unidade mãe você encontrará as indicações corretas para a conexão (veja
óptica, se houver. Em alguns casos, estas unidades possuem as inscrições na placa-mãe). Alguns dos cabos vêm com
presilhas que dispensam parafusos para a instalação. Feito isso, conectores na forma de blocos para facilitar este trabalho. Este
conecte os cabos SATA destas unidades à placa-mãe. Conecte também é um bom momento para conectar as portas USB do
também o cabo de alimentação destas unidades. gabinete aos pontos corretos na placa-mãe.

Manual do Hacker Especial | 63


Faça mais | Monte um PC Linux
Construir o seu próprio notebook
na hora de rodar os jogos. Então você vai está fora de cogitação, mas na hora de
querer tanto um processador quanto uma comprar um novo, você pode pesquisar
placa gráfica rápidos. Lembre-se de que sobre os componentes para obter
muitas placas gráficas mais robustas exatamente o que precisa.
ocupam o espaço de dois slots PCI-e, de
modo que você precisa levar isso em conta fabricantes bloqueiam o processador para
na hora de escolher o gabinete e a placa- uma determinada velocidade, então
mãe, bem como certificar-se de que a fonte certifique-se de que o escolhido
de alimentação tem a potência apropriada permite o overclock – do
para gerir tudo. mesmo modo, a placa-mãe
A memória também é importante, que também precisa ser
deve ser a mais rápida disponível. O espaço adequada. A maioria delas oferecem
de armazenamento em disco, nesse caso, é algum controle sobre a frequência e
o menos importante, de modo que um SSD voltagem, mas há modelos que são mais
é o mais indicado. Os gamers de plantão apropriados para esta finalidade. Faça uma
sempre anseiam por mais desempenho, e pesquisa antes de tomar a sua decisão. ventoinhas adicionais instaladas dentro do
uma das maneiras de obtê-lo também é por Para lidar com o acréscimo de gabinete. As placas-mãe mais apropriadas
meio da técnica de overclocking em seus temperatura, você precisa adotar um para o overclocking, geralmente, possuem
computadores. Consiste em forçar o gabinete de bom tamanho, para oferecer vários conectores para ventoinhas adicionais
processador e a memória funcionaram a uma boa circulação de ar, combinado com e oferecem controle de velocidade para elas.
uma taxa superior àquela especificada pelo um cooler de preprocessador que contém Se o barulho da ventoinha for um
fabricante, mas isso também implica menos uma ventoinha decente (aquele que vem problema, considere o resfriamento à base
vida útil destes componentes. Se tiver com o processador não é indicado para de água. Antigamente, o overclok é um
interesse, lembre-se de que alguns quem adota o overclocking), bem como com campo especializado em que era preciso

Instalando um sistema operacional


Depois que você montar o seu computador, mãe. A maioria das distros Linux atuais já Se você estiver montando um computador
será preciso instalar um sistema operacional. funciona com o UEFI para inicializar o somente com Linux, você pode inicializá-lo a
Não vamos explicar como fazer isso aqui, pois computador, que é bem melhor do que o partir de um DVD e proceder com a
os instaladores Linux são suficientemente Grupo Unico
velho sistema PDF
MBR. Passe@diante
No entanto, se precisar instalação. Se desejar fazer uma instalação
documentados. Mas há alguns pontos a usar o MBR para a inicialização, há uma opção dual boot com o Windows, você deve instalar
considerar. Novas placas-mãe usam o UEFI no menu do firmware que você pode o Windows primeiro e, somente depois, o
em vez do BIOS mais antigo. Elas também configurar. Alguns têm uma opção de Linux. O instalador do Linux irá buscar a
podem ter o Secure Boot habilitado. Você, inicialização UEFI que você pode desabilitar e instalação do Windows e configurar um menu
certamente, precisará desativar isso no outros, o CSM (Compatibility Support Module de dupla inicialização. Isto porque a instalação
firmware. Basta pressionar a tecla apropriada – ou módulo de suporte de compatibilidade), do Windows ira corromper o bootloader do
durante a inicialização para realizar tal que tem que ser habilitado usar o MBR na Linux, de modo a impedir a respectiva
configuração – consulte o manual da placa- inicialização. inicialização.

7 Placa gráfica 8 Cabos amarrados, mente arrumada


Conecte a sua placa gráfica (placa de vídeo) no slot PCI-16. Verifique Mantenha os cabos arrumados, mesmo que o seu gabinete
a documentação para verificar se este componente precisa de não possua rasgo (janela) na lateral. Cabos amontoados
alimentação de energia externa ou se o próprio slot consegue prover poderão atrapalhar o fluxo de ar, de modo a deixar os
a energia necessária. Neste momento, aproveite para conectar componentes superaquecidos e diminuir a vida útil deles.
todas as demais placas PCI, se houver. Muitas das fontes de Caso o gabinete não possua presilhas para prender os cabos,
alimentação recentes oferecem sistema de cabos modulares, bem compre pequenos grampos e os utilize para arrumá-los
como adaptadores para o caso de faltar conectores. adequadamente.

64 | Manual do Hacker Especial


usar uma parafernália de componentes e simplesmente trocá-los se não gostar
fazer vários testes até que tudo dê certo. deles. Portanto, é preciso encontrar o
Hoje em dia, há unidades pré-construídas notebook de acordo com o seu orçamente
que você monta no lugar apropriado, e que atenda as suas necessidades – e
substituindo o cooler padrão. Alguns kits torcer para que ele o satisfaça.
incluem também cooler para a GPU. A Tais regras se aplicam também
refrigeração a água não é somente para para escolher processador, placa
gamers e overclokers, podendo ser usado gráfica, memória etc.
em desktop padrão para minimizar o ruído. Existem algumas diferenças
importantes: os discos rígidos de
Notebooks notebooks, tendem a ser mais
Montar um desktop comum ou servidor é lentos do que os de desktop. As
uma tarefa fácil, mas não se pode dizer o opções para o upgrade de
mesmo de um notebook. Embora seja memória são limitadas, então na
possível comprar este último de forma hora de comprar um notebook,
fragmentada, não é a maneira usual de escolha um modelo com fartura
fazer as coisas. Ainda assim, muitos dos de memória.
assuntos que tratamos aqui se aplica aos Agora, pegue a sua distro
notebooks, porque é muito importante favorita e aproveite a
escolher quais são os componentes vêm velocidade e a liberdade
neles; ainda mais porque você não pode do Linux!

Muita calma nessa hora!


Montar um PC não é difícil, mas aterrado antes de tocar no
alguns cuidados são necessários componente – por exemplo,
quando se trabalha com tocar na parte metálica do
componentes eletrônicos. próprio gabinete ou na cuba da
Reserve uma grande área de pia da cozinha. Porém, o mais
trabalho, livre de bagunça e que indicado é comprar uma pulseira
não seja condutora, pois a Grupo Unico PDF Passe@diante
antiestática, mantendo o
eletricidade estática pode respectivo cabo flexível aterrado
danificar os componentes. Ela durante o manuseio dos
também pode se acumular em componentes.
seu corpo e ser descarregada nos Se houver falhas nos
componentes quando você os componentes, e elas não tenham
manusear. Você pode evitar isso, sido causadas por manuseio
aterrando-se. O melhor jeito de inadequado, qualquer vendedor
fazer isso é tocar em um objeto já idôneo irá trocá-los.

8 Testando, testando
Conecte o monitor e o teclado e ligue o computador. Mantenha
pressionada a tecla apropriada (consulte o manual da placa-mãe)
para poder entrar no menu da BIOS/firmware e conferir, na tela de
integridade do sistema, se o processador (CPU) está funcionando
corretamente. Em seguida, faça o mesmo quanto à memória e aos
drivers (disco rígido, disco SSD etc.). Algumas placas-mãe podem
precisar de configuração adicional para tornar a memória visível.

Manual do Hacker Especial | 65


Faça mais | Samba
Faça mais | Samba

Samba
Grupo Unico PDF Passe@diante

Dançando com o Windows


A suíte de interoperabilidade padrão do Windows
para Linux agora conta com suporte Active
Directory. Vamos dar uma olhada

T
odos amamos nossas máquinas Isto é uma grande coisa – Samba tem sido começou a distanciar-se dos controles NT
Linux, mas a maioria de nós, em capaz de agir como um Windows NT 4.0 Domain para o seu novo Active Directory
algum momento, precisa coexistir Domain Controller ou em um existente aumentando a lacuna entre os
em uma rede com computadores Windows Windows NT 4.0 Domain. Mas com o ecossistemas Linux e Windows. A versão 4
e sabemos que Samba é o que permite lançamento do Windows 2000, a Microsoft do Samba fornece a solução bastante
compartilhar arquivos de sistema esperada para este
entre Linux e Windows.
Mas ele faz muito mais do
“Samba 4 implementa totalmente problema sendo
completamente
que isso e, com a versão 4, está
completamente compatível com
a funcionalidade do controlador compatível com o
Active Directory. Ele
o Active Directory da Microsoft. de domínio Active Directory” implementa

66 | Manual do Hacker Especial


SMBFS e CIFS
Duas implementações de arquivos de obsoleto – você deve utilizar o CIFS A diferença entre o CIFS e o SMB pode
sistema virtuais no Linux permitem a para montar os arquivos de sistema do ser um pouco confusa, porque o dialeto
montagem de compartilhamentos SMB: Samba. O resultado disso é que, se CIFS é mais recente do que o SMB, mas
SMBFS e CIFS. O último é a mais nova você apenas quer montar mais velho do que o SMB2, enquanto que o
implementação e está incorporada ao compartilhamentos Windows na sua CIFS é mais novo do que o SMBFS e
núcleo. As ferramentas que você precisará máquina Linux, você não precisa do suporta SMB, CIFS e os mais recentes
para utilizar o CIFS eram, originalmente, Samba. Montar um compartilhamento dialetos SMB2 e SMB3. Para mais detalhes,
parte do Samba, mas agora são um pacote Windows é simples assim: veja o guia de usuário: http://bit.
separado, chamado cifs-utils. mount -t cifs -o ly/1JFFIn4. As especificações de protocolo
O SMBFS original, que também é username=myuser,password=mypass // SMB e CIFS são publicadas em http://bit.
parte da suíte do Samba, ficou myserver/myshare /mnt ly/1FakGHQ e http://bit.ly/1hNoqKO.

totalmente a funcionalidade do controlador de segurança para todos os computadores que Isto tornará o /tmp no servidor
domínio Active Directory, fazendo uma são parte de um domínio Windows, o ADDC disponível assim como o Samba
substituição efetiva para as funções verifica a senha inserida e determina se o compartilha o TCP/IP. O uso de security =
equivalentes na linha de produtos Windows usuário em um sistema é administrador ou user e map to guest permite
Server da Microsoft. Samba é uma convidado. O AD faz uso das versões 2 e 3 compartilhamentos para operar
implementação código aberto dos protocolos do Lightweight Directory Access Protocol similarmente ao obsoleto modo security =
Server Message Block ou SMB. (LDAP), Kerberos e DNS. Samba utiliza sua share que administradores do Samba
É uma aplicação de camada de protocolo própria implementação LDAP chamada Ibd; podem estar familiarizados. Um usuário
de rede que foi originalmente desenvolvida ela não suporta o uso do OpenLDAP para com um nome de usuário Windows que o
pela IBM para fornecer acesso compartilhado Active Directory. Samba não reconhece não precisará
para arquivos e impressoras. A Microsoft fornecer credenciais
entendeu sua implementação para suporte “A maneira que você usa o para acessar o
da autenticação SMB usando seu próprio NT compartilhamento e
LAN Manager (NTLM) e, mais tarde, Samba dependerá das eles serão autenticados
protocolos NTLMv2. Esta implementação é
chamada de Common Internet File System,
suas necessidades” como usuários
convidados. Quaisquer
ou CIFS. Novas extensões, incluindo suporte Sendo assim, há duas maneiras de usar o arquivos que eles editarem terão os suas
Grupo
para links simbólicos foram lançadas como
Unico PDF Passe@diante
Samba – uma é como sempre tem sido usada identificações de usuário e grupo
SMB2 com o Windows Vista. (o clássico Samba), que pode ser operado configuradas para “ninguém”. Entretanto,
Samba oferece suporte SMB2 desde a como um domínio membro ou automático e é se o nome de usuário for conhecido pelo
versão 3.6. A Microsoft introduziu o SMB2.1 tudo o que você precisa para configurar Samba, então o usuário terá sua senha
com o Windows 7 e SMB3 com Windows 8. Ele compartilhamentos básicos. A outra maneira solicitada. Isso pode parecer estranho, mas
chama diferentes versões dos dialetos de de utilizar o Samba dependerá das suas é consistente com a forma que o Windows
protocolo, portanto o CIFS e o SMB2 são necessidades, mas a primeira coisa que funciona.
dialetos do protocolo SMB. Enquanto estes precisa ser feita é instalá-lo. A maioria das Comece o Samba daemon, smbd, para
dialetos são proprietários, suas especificações distribuições devem tê-lo em estoque, embora tornar este compartilhamento acessível no
estão disponíveis para o público; um dos o Samba 3.6 ainda possa ser a opção padrão. Windows. Para acessá-lo, basta usar o
resultados da liquidação da Microsoft com as A outra opção é buscá-lo na fonte: www. Windows Explorer para navegar até o servidor
cortes europeias em 2004 foi o lançamento samba.org/samba/download. Samba (você pode tanto utilizar o nome
de uma documentação completa para Assim que for instalado, o arquivo de quanto o endereço IP).
autenticação de rede com o Active Directory. configuração do Samba é chamado smb. Existe outro protocolo que tem sido
Isto resultou no desenvolvimento da versão 4 conf e normalmente é encontrado em uma associado com a rede Windows há tempos e,
do Samba, com a própria Microsoft estando subpasta como /etc/samba. A portanto, uma parte integral do Samba suite:
envolvida e testando. configuração mais simples é NetBIOS. Atualmente, NetBIOS geralmente
Active Directory (ou também conhecido compartilhada publicamente: refere-se ao NetBIOS do protocolo TCP/IP,
como AD) é uma locação central para a [global] que é considerado um protocolo de legado.
administração de computadores Windows server string = Samba Server Ele oferece resoluções de nome, arquivo e
em rede. Servidores que podem rodar o Version impressora compartilhada com dispositivos
Active Directory são chamados de %v que não têm capacidades DNS. Ele é usado
controladores de domínio (que nós # Treat unknown users as a guest essencialmente em uma rede Windows, mas
podemos abreviar como ADDC, da sigla em (where permitted) não é mais necessário ao menos que haja
inglês) que autenticam e autorizam todos os security = user versões mais velhas do Windows envolvidas,
usuários e computadores em uma rede map to guest = Bad User mas você ainda precisará dela se quiser que
Windows, atribuindo e aplicando políticas de [tmp] clientes rodando sistemas operacionais
path = /tmp anteriores ao Windows 2000 sejam capazes
read only = No de acessar seus compartilhamentos. Se você
Dica esperta! browsable = Yes não quer o NetBIOS, as adições a seguir a
guest ok = Yes seção [global] do smb.conf, faça isso:
Você não precisa reiniciar o Samba
force user = nobody [global]
quando modificar o smb.conf, porque ele
force group = nobody # disable NetBIOS
detecta mudanças automaticamente.
create mask = 0755 disable netbios = yes
directory mask = 0755 smb ports = 445

Manual do Hacker Especial | 67


Faça mais | Samba
Windows 2000, as conexões são feitas
usando NetBIOS e TCP/IP, o último
conectando-se a porta 445 no servidor. O
cliente fecha sua conexão NetBIOS na porta
139 caso o servidor responda a conexão
TCP/IP. Como você poderia esperar,
compartilhamentos podem ser configurados
assim que a autenticação é necessária para
acessá-los. Isso requer um banco de dados
de usuários para autenticar. Esta é a parte
em que a configuração do Active Directory
difere das definições clássicas. O Samba
clássico usa seu próprio banco de dados de
senhas contendo senhas criptografadas,
mas, devido as permissões de arquivos
dsalkdlkalkdlska Coisas estranhas podem acontecer quando os relógios não estão sincronizados relacionadas a usuários e grupos Unix, elas
são diretamente relacionadas aos usuários
Se você precisar, no entanto, habilitar o aos nomes NetBIOS que um DNS fornece a no servidor. Usuários do Active Directory são
NetBIOS, é preciso outras mudanças no nome de domínio (mapeando nomes relacionados a usuários Unix (falaremos
smb.conf: convidados para endereços de rede). mais sobre isto depois). Para adicionar um
[global] Modificações em nomes serão resolvidas usuário ao clássico Samba:
# NetBIOS identification sem um servidor WINS, mas somente dentro # smbpasswd -a myuser
workgroup = WORKGROUP da sub-rede local – caso um cliente não seja New SMB password:
netbios name = MYHOST capaz de resolver um nome NetBIOS usando Retype new SMB password:
wins support = Yes um servidor WINS, isso resultará a exibições Forcing Primary Group to ‘Domain Users’ for
Isso diz ao Samba para usar a NetBIOS de mensagens de rede como “onde está myuser
para torná-lo conhecido na rede Windows e você?”. Esta é uma razão porque Forcing Primary Group to ‘Domain Users’ for
no grupo de trabalho padrão (máquinas administradores de sistema odeiam a myuser
Windows trabalham em um grupo de trabalho NetBIOS e por quê você deveria desabilitá-la Added user myuser.
padrão chamado WORKGROUP) e para agir ao menos que realmente precise dela. Você Note que uma vez que o usuário foi
como um servidor WINS. O nome da NetBIOS também pode ler bastante na internet sobre adicionado ao Samba, o Windows
Grupo Unico PDF Passe@diante
como a NetBIOS é insegura. requisitará as senhas deles para ser

“Você pode ler bastante Caso você precise da


NetBIOS, a parte final necessária
acessado – mesmo para
compartilhamentos com convidados.
na internet sobre como é que ela suporte o processo Adicionar um usuário de
nmbd do Samba como o compartilhamento específico, como em
a NetBIOS é insegura” processo smbd. É o nmdb que um diretório inicial, pode ser conseguido
fornece o nome NetBIOS e com uma entrada em smb.conf:
é equivalente a um nome convidado – ele não serviços WINS. [myuser]
precisa ser o mesmo de um convidado, mas Vale a pena entender como conexões comment = %U home directory
isso é o habitual. A sigla WINS vem do inglês são feitas pelo lado do cliente. Antes do writable = yes
Windows Internet Name Service, uma Windows 2000, as conexões eram apenas valid users = myuser
implementação da Microsoft para a NetBIOS realizadas via NetBIOS, que conectavam-se a path = %H
Name Service, e fornece um serviço similar porta139 do servidor. Começando com o Ou, genericamente, usando o

Cliente teste Windows


Um computador rodando Windows é www.microsoft.com/en-gb/download/
necessário para avaliar completamente as details.aspx?id=7887
capacidades de Active Directory do Samba Caso queira que a máquina Windows
4. Aqui, foi usado o Windows 7 Ultimate responda às requisições ICMP Ping,
com o Service Pack 1 juntamente com as você precisará adicionar uma regra
ferramentas de administração remota (do apropriada ao firewall do Windows (ou
inglês RSAT). Destas ferramentas, a única desabilitar o firewall completamente).
que você precisará é Active Directory Users Para adicionar uma regra, vá em Iniciar
and Computers (o nome executável é dsa. > Painel de Controle > Sistema e Para Active
msc). Vá para páginas relevantes da Segurança > Windows Firewall > Directory
Microsoft para encontrar mais informações Configurações Avançadas > Regras de Users e
instalando estes: Entrada > Nova Regra. Crie uma regra Computers,
Windows 7 Service Pack 1: personalizada para o protocolo ICMPv4. busque por
www.microsoft.com/en-us/download/ Lembre-se que as versões Home e ‘dsa.msc’ e
details.aspx?id=5842 Starter do Windows são incapazes de rode-o como
Windows 7 RSAT : juntar-se a um domínio. administrador

68 | Manual do Hacker Especial


compartilhamento especial [homes],
que cria um compartilhamento inicial
A necessária configuração para o
Samba definir impressões em CUPS e Dica esperta!
para cada usuário. Quando um usuário compartilhar suas impressoras em um
Existem alguns tutoriais em vídeos
tentar conectar a um compartilhamento, compartilhamento [printers] é:
em https://wiki.samba.org/index.
o Samba vai procurar por uma definição [global]
php/Samba4/videos que fornecem
de compartilhamento explícito como o load printers = yes
bons passo a passo dos processos.
acima. Caso nenhum seja encontrado, printing = cups
mas um compartilhamento [home] printcap name = cups
existir, então ele será utilizado como um [printers]
modelo para criar o compartilhamento comment = Printers Windows. No Windows 7, navegue até o
com o usuário requisitado. Um modelo path = /var/spool/samba servidor (por exemplo, \\MYHOST) e, em
adequado será mostrado abaixo; a browsable = yes seguida, clique em Ver Impressoras
entrada browsable previne que o writable = yes Remotas. Pressione [Tab] para exibir a
[homes] apareça quando o printable = yes barra de menu e selecione File > Server
compartilhamento é acessado. [print$] Properties. Vá para a aba Drivers e clique
[homes] comment = Printer Drivers em Add. Isso iniciará o assistente de
comment = %U home directory path = /usr/share/samba/print instalação de impressora no servidor.
writable = yes writable = yes Depois de fazer o upload do drive, você
browsable = no O compartilhamento [print$] é opcional, precisará associá-lo com a impressora;
Outro tipo especial de mas ele é para Point e Print Drivers. Ele navegue até a impressora e abra sua
compartilhamento é o [printers]. Como permite que um administrador faça o upload página de propriedades. Na aba Avançado,
você pode esperar, ele permite que de drivers de impressoras no servidor para selecione o drive do upload na lista
clientes Windows usem impressoras que o usuário que instalar a impressora não suspensa. Um cliente Windows pode
anexadas ao servidor Samba. Ele utiliza tenha de procurar pelo drive. O diretório para adicionar uma impressora (por exemplo,
CUPS para processar impressões em compartilhamento [print$] deve ser criado no Windows 7 vá para Iniciar > Dispositivos
raw, o que significa que o cliente precisa juntamente com os sub-diretórios para que e Impressoras e clique em Adicionar
ter instalado um driver de impressora as arquiteturas sejam suportadas: Impressora para instalar uma impressora
apropriado, porque é ele que converte o # mkdir -p /usr/share/samba/print/ dentro da rede). Se o driver estiver
arquivo a ser impresso em dados raw que {COLOR,IA64, instalado em [print$] ele será instalado
a impressora pode processar. Impressão W32ALPHA,W32MIPS,W32PPC,W32X86, automaticamente, caso contrário o usuário
requer um diretório spool que tem sua WIN40,x64} precisará localizar e instalar o drive correto
própria configuração:
Grupo Unico PDF Passe@diante
A maneira mais fácil de fazer o por conta própria.
# mkdir /var/spool/samba upload de um driver de impressora é com Nós vamos dar uma olhada na
# chmod 1777 /var/spool/samba um administrador acessando o cliente implementação do Active Directory fornecida

O que é exatamente Kerberos?


Kerberos é um protocolo de rede segurança de rede e tem código aberto três cabeças da mitologia grega que guar-
autenticado que usa informações do desde 1987 (http://web.mit.edu/ dava os protões de Hades.
sistema para permitir entradas kerberos). Ele é usado como um Active A autenticação Kerberos é realizada
seguramente autenticadas entre uma rede Directory Domain Controller. pelo Key Distribuition Centre em dois
insegura sem transmitir senhas entre elas. Existem três participantes em uma cone- estágios. Primeiro, um cliente requisita
É um consolidado protocolo originado no xão com Kerberos: o cliente, a fonte e o ser- um bilhete de concessão. Isso
Instituto de Tecnologia de Massachusetts vidor Kerberos conhecido como Key geralmente acontece quando um
(MIT) na década de 1980, quando foi criado Distribution Centre. O nome Kerberos cliente inicialmente acessa a rede. O
como uma solução para problemas de (Cérbero, em português) vem do cão de TGT eventualmente expira, mas pode
ser renovado facilmente quando
necessário. O segundo estágio entra
em cena sempre que o cliente deseja
acessar a fonte que é protegida pelo
Kerberos. Ela manda o seu TGT de volta
ao servidor, que o valida e retorna o
bilhete ao cliente que permite acesso a
fonte requisitada.
Isto é uma explicação um pouco
simplificada de um processo complexo,
que é melhor explicado por uma
apresentação em vídeo: www.youtube.
com/watch?v=KD2Q-2ToloE.
Em um domínio Active Directory, o
Kerberos Key Distribuition Centre é um
servido de rede que é fornecido pelo Active
Directory Domain Controller.

Manual do Hacker Especial | 69


Faça mais | Samba
pelo Samba 4. Supondo que, enquanto o domain mydomain.co.uk Valid starting Expires Service principal
Samba 4 pode atuar como um NT Domain nameserver 127.0.0.1 08/02/13 16:25:31 09/02/13 02:25:31 krbtgt/
Member automático ou como um Active O Samba encaminha requisições que [email protected]
Directory Domain Controller, as duas não podem ser resolvidas sozinhas pelo renew until 09/02/13 16:25:21
configurações são bem diferentes e, até endereço DNS que foi especificado durante Neste ponto, você deve ser capaz de
certo ponto, incompatíveis. o passo provisório. Ele usa seu próprio visualizar os compartilhamentos do
Porém, configurar o Samba como um servidor DNS interno, mas pode ser Samba e acessá-los:
domínio de controle Active Directory é configurado para utilizar um BIND DNS $ smbclient -L localhost -U%
bem simples, porque existe uma externo em vez disso. Entretanto, pelo fato Domain=[MYDOMAIN] OS=[Unix]
ferramenta que realiza as tarefas de de você conseguir tanto de graça com o Server=[Samba 4.0.3]
definição: interno, provavelmente não vale a pena fazer Sharename Type Comment
# samba-tool domain provision isso, ao menos que você realmente precise. --------- ---- -------
Realm [MYDOMAIN.CO.UK]: Com os passos de configuração netlogon Disk
Domain [MYDOMAIN]: completos, nós podemos começar com o sysvol Disk
Server Role (dc, member, standalone) [dc]: controle de domínio e realizar alguns IPC$ IPC IPC Service (Samba 4.0.3)
DNS backend (SAMBA_INTERNAL, testes. O modo Active Directory usa um $ smbclient //localhost/netlogon
BIND9_FLATFILE, BIND9_DLZ, NONE) novo samba binário em vez do padrão -UAdministrator%’Pa$$w0rd’ -c ‘ls’
[SAMBA_INTERNAL]: smbd. Aqui, nós começamos no primeiro Domain=[MYDOMAIN] OS=[Unix]
DNS forwarder IP address (write ‘none’ to plano enquanto testamos: Server=[Samba 4.0.3]
disable forwarding) [10.0.0.138]: # samba -i -M single mydomain . D 0 Thu Feb 7 20:06:55 2013
Administrator password: Copyright Andrew Tridgell and the Samba .. D 0 Thu Feb 7 20:08:44 2013
Retype password: Team 1992-2012
Senhas precisam ser complexas: uma samba: using ‘single’ process model Outro serviço fornecido por um Active
letra em caixa alta, um dígito e, ao menos, # host -t SRV _ldap._tcp.mydomain.co.uk Directory Domain Controller é o tempo de
com oito caracteres. Pa$$wOrd é um _ldap._tcp.mydomain.co.uk has SRV sincronização. Sendo opcional, fornecer
exemplo adequado que utilizamos em record 0 este tipo de serviço é altamente
nossos testes, embora não seja muito 100 389 myhost.mydomain.co.uk. recomendado, porque o Kerberos é muito
seguro. Quando a configuração estiver # host -t SRV _kerberos._udp.mydomain. sensível a variações de tempo entre
finalizada, você receberá uma explicação co.uk clientes e o servidor.
dando conta de que gerou uma _kerberos._udp.mydomain.co.uk has SRV O Windows Time Service (um controle
configuração Kerberos compatível com o record 0 100 88 myhost.mydomain.co.uk. de domínio fornecido) é um servidor
Samba 4. Você precisará copiar este
Grupo Unico PDF Passe@diante
# host -t A myhost.mydomain.co.uk Network Time Protocol (NTP) com
arquivo para a seguinte pasta: host -t A myhost.mydomain.co.uk extensões para autenticação. Existe um
# cp /var/lib/samba/private/krb5.conf /etc Em seguida, teste o Kerberos (entre número de implementações em um Linux,
Em seguida, o resolvedor DNS precisa com a senha de administrador quando como o ntpd e open-ntpd, mas somente a
ser configurado para apontar para o solicitado): versão 4.2.6 do ntpd suporta a
Samba, porque ele também é o DNS para # kinit [email protected] autenticação necessária para extensões e
o novo domínio Windows. Faça isso Password for administrator@MYDOMAIN. somente quando o suporte for compilado
editando /etc/resolv.conf ou, se ele é CO.UK: (você deve verificar a versão ntpd com
editado por um serviço como dhcpcd, # klist ntpd - version). Uma configuração ntpd
ajuste a configuração do serviço. De Ticket cache: FILE:/tmp/krb5cc_0 adequada pergunta ao Samba para
qualquer forma, o /etc/resolv.conf deve Default principal: administrator@ realizar qualquer autenticação necessária.
ficar desta assim: MYDOMAIN.CO.UK A configuração ntpd está em /etc/ntpd.
conf. Eis um exemplo adequado:
server 127.127.1.0
fudge 127.127.1.0 stratum 12
ntpsigndsocket /var/lib/samba/ntp_signd/
restrict default mssntp

O Samba Web Administration Tool (SWAT) ainda está ativo,


mas não tem sido atualizado

70 | Manual do Hacker Especial


As linhas importantes, que podem não Samba. Também é uma boa ideia ajustar identificação pode ser alterada, e é bem
estar em um existente ntpd.conf, são as manualmente o relógio do cliente, de simples de fazê-lo:
duas últimas. A entrada ntpsigndsocket modo que ele esteja dentro de poucos # wbinfo --name-to-sid myuser
define o caminho do diretório onde o Samba segundos no domínio de controle. Se os S-1-5-21-4099219672-1275272411-
estabelece o arquivo de soquete, através do relógios não estiverem sincronizados, 291422405-
qual receberá o requerimento de autentica- erros podem ser reportados que não tem 1104 SID_USER (1)
ção. A entrada restrict diz ao ntpd que soli- nenhuma relação com o problema real. O # ldbedit -H idmap.ldb cn=S-1-5-21-
citações de entrada precisam ser autentica- serviço de tempo do Windows manterá 4099219672-1275272411-291422405-1104
das. O caminho de soquete é determinado os relógios sincronizados uma vez que o Isto permite que você edite uma
pela configuração do Samba e você pode cliente tornar-se membro do domínio. entrada do banco de dados de
confirmar o caminho correto com: Para adicionar um cliente ao domínio, mapeamento do Samba usando seu editor
# samba-tool testparm --verbose acesse Iniciar, clique com botão direito do padrão, assim você pode mudar a
--suppress-prompt | grep “ntp signd socket mouse em Computador e acione identificação do usuário (a localização do
directory” Propriedade > Configurações. Isto fará idmap.ldb depende da sua instalação, mas
ntp signd socket directory = / abrir a caixa de diálogo Computador > será algo como /var/lib/samba/private
var/lib/samba/ntp_signd Mudanças Nome/Domínio, em que você ou /usr/local/samba/private):
O Samba cria o diretório soquete, mas pode selecionar Domínio na seção Membro 0 # editing 1 records
é muito importante garantir que ele seja de e inserir o nome do domínio Samba (por 1 # record 1
editável pelo ntpd. Se o ntpd roda com um exemplo, mydomain) antes de clicar em 2 dn: CN=S-1-5-21-4099219672-
uid:gid do ntp:ntp então você também OK. Isto deve solicitar as credenciais da 1275272411-291422405-1105
deve mudar o grupo ntp. conta de administrador (o nome de usuário 3 cn: S-1-5-21-4099219672-1275272411-
Reinicie o ntpd para garantir que é Administrador e a senha é Pa$$wOrd 291422405-1105
alguma mudança de configuração foi caso você tenha seguido nossos exemplos 4 objectClass: sidMap
inserida e verifique o arquivo de registro de configuração). 5 objectSid::
para que um aviso de que o ntpd foi A administração de domínio pode ser AQUAAAAAAAUVAAAA2CB
configurado sem a opção de tempo realizada localmente no servidor utilizando o V9NscA0zFwF4RUQQAAA==
--enable-ntp-sign. Se você ver este aviso a linha de comando samba-tool ou 6 type: ID_TYPE_BOTH
significa que seu ntpd não suporta o remotamente a partir de um computador 7 xidNumber: 3000020
mecanismo de autenticação necessário. Windows conectado ao domínio. Um 8 distinguishedName: CN=S-1-5-21-
Você precisará obter as fontes para o ntpd administrador, utilizando um computador 4099219672-1275272411-291422405-1105
e reconstruí-lo para incluir a configuração adequadamente configurado pode rodar O valor para alterar é xidNumber, que
de tempo supracitada. Infelizmente, não
Grupo Unico PDF Passe@diante
ferramentas e o Active Directory Users and pode ser mudado para a identificação
há uma ferramenta para testar a Computers. Isto oferece total controle sobre correta do usuário. As mudanças serão
autenticação NTP para Linux. todos os usuários, computadores e funções salvas no banco de dados quando a seção
Para testá-la em um computador exatamente da mesma forma como se de edição for encerrada.
Windows que está em um domínio estivesse utilizando o administrador de Configurar arquivos compartilhados
membro, abra a janela do prompt de Active Directory da Microsoft. pode ser feito de maneira similar ao
comando como Administrador (para fazer Adicionar usuários ao AD é feito de clássico Samba adicionando blocos
isso, clique em Iniciar, digite cmd e clique forma diferente do clássico Samba (que uti- relevantes ao smb.conf. Você pode
com o botão direito do mouse para o liza smbpasswd), mas é mais flexível por- adicionar [homes], como no clássico
prompt de comando nos resultados das que pode ser feito a partir de um servidor Samba, mas você pode ir um passo
buscas para selecionar “Executar como de prompt de comando utilizando samba- adiante e oferecer perfis roaming com um
administrador” e digite: -tool ou remotamente pelo Windows com o compartilhamento [profiles]:
C:\> w32tm /resync Active Directory Users and Computers. [profiles]
Sending resync command to local computer Quando os usuários do Active comment = Roaming Profiles
The command completed successfully. Directory são criados, eles não são path = /var/lib/samba/profiles
Antes de conectar o cliente Windows relacionado a usuários existentes em / writable = yes
ao novo domínio, mude a configuração etc/passwd, porque eles recebem browsable = no
de sua rede para que ela use o DNS do diferentes números de identificação. A A fim de configurar um perfil
roaming, utilize a ferramenta Active
Directory Users and Computers para
editar as configurações de usuário e
definir o caminho para os perfis para \\
mydomain\ profiles\%USERNAME%.
Seguindo dessa forma, o perfil de
usuário será copiado entre o disco local e
área de perfis no servidor quando eles
acessarem ou saírem de qualquer
domínio do cliente.
Independentemente das suas
necessidades, desde o
compartilhamento básico até um
ambiente completo com Active Directory,
o Samba 4 oferece uma alternativa viável
A adição de usuários pode ser feito por meio do Windows em código aberto frente a opções caras.

Manual do Hacker Especial | 71


ms[:task]) format.html { redirect_to @task, notice: ‘...’ } format.json { head :no_content } else format.html { render action: “edit” } format.json { render jso
migration add_priority_to_tasks priority:integer $ bundle exec rake db:migrate $ bundle exec rake db:migrate $ bundle exec rails server validate :due_a
if due_at < Time.zone.now #!/usr/bin/en python import pygame from random import randrange MAX_STARS = 100 pygame.init() screen = pygame.d
(MAX_STARS): star = [randrange(0, 639), randrange(0, 479), randrange(1, 16)] stars.append(star) while True: clock.tick(30) for event in pygame.event.g
se Time::HiRes qw(usleep); use Curses; $screen = new Curses; noecho; curs_set(0); for ($i = 0; $i < $numstars ; $i++) { $star_x[$i] = rand(80); $star_y[$
i < $numstars ; $i++) { $star_x[$i] -= $star_s[$i]; if ($star_x[$i] < 0) { $star_x[$i] = 80; } $screen->addch($star_y[$i], $star_x[$i], “.”); } $screen->refresh; usl
“rspec-rails”, “~> 2.13.0” $ gem install bundler $ gem install rails --version=3.2.12 $ rbenv rehash $ rails new todolist --skip-test-unit respond_to do
ask, notice: ‘...’ } format.json { head :no_content } else format.html { render action: “edit” } format.json { render json: @task.errors, status: :unprocessab
y:integer $ bundle exec rake db:migrate $ bundle exec rake db:migrate $ bundle exec rails server validate :due_at_is_in_the_past def due_at_is_in_the_
en python import pygame from random import randrange MAX_STARS = 100 pygame.init() screen = pygame.display.set_mode((640, 480)) clock =
0, 639), randrange(0, 479), randrange(1, 16)] stars.append(star) while True: clock.tick(30) for event in pygame.event.get(): if event.type == pygame.Q
e Curses; $screen = new Curses; noecho; curs_set(0); for ($i = 0; $i < $numstars ; $i++) { $star_x[$i] = rand(80); $star_y[$i] = rand(24); $star_s[$i] = rand(
$i] -= $star_s[$i]; if ($star_x[$i] < 0) { $star_x[$i] = 80; } $screen->addch($star_y[$i], $star_x[$i], “.”); } $screen->refresh; usleep 50000; gem “therubyrace
em install bundler $ gem install rails --version=3.2.12 $ rbenv rehash $ rails new todolist --skip-test-unit respond_to do |format| if @task.update_attribu
d :no_content } else format.html { render action: “edit” } format.json { render json: @task.errors, status: :unprocessable_entity } $ bundle exec rails genera
te $ bundle exec rake db:migrate $ bundle exec rails server validate :due_at_is_in_the_past def due_at_is_in_the_past errors.add(:due_at, ‘is in the past
import randrange MAX_STARS = 100 pygame.init() screen = pygame.display.set_mode((640, 480)) clock = pygame.time.Clock() stars = for i in range(MA
.append(star) while True: clock.tick(30) for event in pygame.event.get(): if event.type == pygame.QUIT: exit(0) #!/usr/bin/perl $numstars = 100; use Tim
for ($i = 0; $i < $numstars ; $i++) { $star_x[$i] = rand(80); $star_y[$i] = rand(24); $star_s[$i] = rand(4) + 1; } while (1) { $screen->clear; for ($i = 0; $i < $nums
een->addch($star_y[$i], $star_x[$i], “.”); } $screen->refresh; usleep 50000; gem “therubyracer”, “~> 0.11.4” group :development, :test do gem “rspec-rails
v rehash $ rails new todolist --skip-test-unit respond_to do |format| if @task.update_attributes(params[:task]) format.html { redirect_to @task, notice: ‘...’
at.json { render json: @task.errors, status: :unprocessable_entity } $ bundle exec rails generate migration add_priority_to_tasks priority:integer $ bundle e
lidate :due_at_is_in_the_past def due_at_is_in_the_past errors.add(:due_at, ‘is in the past!’) if due_at < Time.zone.now #!/usr/bin/en python import pyga
pygame.display.set_mode((640, 480)) clock = pygame.time.Clock() stars = for i in range(MAX_STARS): star = [randrange(0, 639), randrange(0, 479), rand
event.get(): if event.type == pygame.QUIT: exit(0) #!/usr/bin/perl $numstars = 100; use Time::HiRes qw(usleep); use Curses; $screen = new Curses; noe
r_y[$i] = rand(24); $star_s[$i] = rand(4) + 1; } while (1) { $screen->clear; for ($i = 0; $i < $numstars ; $i++) { $star_x[$i] -= $star_s[$i]; if ($star_x[$i] <
efresh; usleep 50000; gem “therubyracer”, “~> 0.11.4” group :development, :test do gem “rspec-rails”, “~> 2.13.0” $ gem install bundler $ gem instal
ond_to do |format| if @task.update_attributes(params[:task]) format.html { redirect_to @task, notice: ‘...’ } format.json { head :no_content } else format.htm
essable_entity } $ bundle exec rails generate migration add_priority_to_tasks priority:integer $ bundle exec rake db:migrate $ bundle exec rake db:mig
_the_past errors.add(:due_at, ‘is in the past!’) if due_at < Time.zone.now #!/usr/bin/en python import pygame from random import randrange MAX_ST
= pygame.time.Clock() stars = for i in range(MAX_STARS): star = [randrange(0, 639), randrange(0, 479), randrange(1, 16)] stars.append(star) while Tru
: exit(0) #!/usr/bin/perl $numstars = 100; use Time::HiRes qw(usleep); use Curses; $screen = new Curses; noecho; curs_set(0); for ($i = 0; $i < $num
) + 1; } while (1) { $screen->clear; for ($i = 0; $i < $numstars ; $i++) { $star_x[$i] -= $star_s[$i]; if ($star_x[$i] < 0) { $star_x[$i] = 80; } $screen->addch($sta
“~> 0.11.4” group :development, :test do gem “rspec-rails”, “~> 2.13.0” $ gem install bundler $ gem install rails --version=3.2.12 $ rbenv rehash $ rails n
arams[:task]) format.html { redirect_to @task, notice: ‘...’ } format.json { head :no_content } else format.html { render action: “edit” } format.json { render
migration add_priority_to_tasks priority:integer $ bundle exec rake db:migrate $ bundle exec rake db:migrate $ bundle exec rails server validate :due_a
Grupo Unico PDF Passe@diante
if due_at < Time.zone.now #!/usr/bin/en python import pygame from random import randrange MAX_STARS = 100 pygame.init() screen = pygame.d
(MAX_STARS): star = [randrange(0, 639), randrange(0, 479), randrange(1, 16)] stars.append(star) while True: clock.tick(30) for event in pygame.event.g
se Time::HiRes qw(usleep); use Curses; $screen = new Curses; noecho; curs_set(0); for ($i = 0; $i < $numstars ; $i++) { $star_x[$i] = rand(80); $star_y[$
i < $numstars ; $i++) { $star_x[$i] -= $star_s[$i]; if ($star_x[$i] < 0) { $star_x[$i] = 80; } $screen->addch($star_y[$i], $star_x[$i], “.”); } $screen->refresh; usl
“rspec-rails”, “~> 2.13.0” $ gem install bundler $ gem install rails --version=3.2.12 $ rbenv rehash $ rails new todolist --skip-test-unit respond_to do
ask, notice: ‘...’ } format.json { head :no_content } else format.html { render action: “edit” } format.json { render json: @task.errors, status: :unprocessab
y:integer $ bundle exec rake db:migrate $ bundle exec rake db:migrate $ bundle exec rails server validate :due_at_is_in_the_past def due_at_is_in_the_
en python import pygame from random import randrange MAX_STARS = 100 pygame.init() screen = pygame.display.set_mode((640, 480)) clock =
0, 639), randrange(0, 479), randrange(1, 16)] stars.append(star) while True: clock.tick(30) for event in pygame.event.get(): if event.type == pygame.Q
e Curses; $screen = new Curses; noecho; curs_set(0); for ($i = 0; $i < $numstars ; $i++) { $star_x[$i] = rand(80); $star_y[$i] = rand(24); $star_s[$i] = rand(
$i] -= $star_s[$i]; if ($star_x[$i] < 0) { $star_x[$i] = 80; } $screen->addch($star_y[$i], $star_x[$i], “.”); } $screen->refresh; usleep 50000; gem “therubyrace
em install bundler $ gem install rails --version=3.2.12 $ rbenv rehash $ rails new todolist --skip-test-unit respond_to do |format| if @task.update_attribu
d :no_content } else format.html { render action: “edit” } format.json { render json: @task.errors, status: :unprocessable_entity } $ bundle exec rails genera
te $ bundle exec rake db:migrate $ bundle exec rails server validate :due_at_is_in_the_past def due_at_is_in_the_past errors.add(:due_at, ‘is in the past
import randrange MAX_STARS = 100 pygame.init() screen = pygame.display.set_mode((640, 480)) clock = pygame.time.Clock() stars = for i in range(MA
.append(star) while True: clock.tick(30) for event in pygame.event.get(): if event.type == pygame.QUIT: exit(0) #!/usr/bin/perl $numstars = 100; use Tim
for ($i = 0; $i < $numstars ; $i++) { $star_x[$i] = rand(80); $star_y[$i] = rand(24); $star_s[$i] = rand(4) + 1; } while (1) { $screen->clear; for ($i = 0; $i < $nums
een->addch($star_y[$i], $star_x[$i], “.”); } $screen->refresh; usleep 50000; gem “therubyracer”, “~> 0.11.4” group :development, :test do gem “rspec-rails
v rehash $ rails new todolist --skip-test-unit respond_to do |format| if @task.update_attributes(params[:task]) format.html { redirect_to @task, notice: ‘...’
at.json { render json: @task.errors, status: :unprocessable_entity } $ bundle exec rails generate migration add_priority_to_tasks priority:integer $ bundle e
lidate :due_at_is_in_the_past def due_at_is_in_the_past errors.add(:due_at, ‘is in the past!’) if due_at < Time.zone.now #!/usr/bin/en python import pyga
pygame.display.set_mode((640, 480)) clock = pygame.time.Clock() stars = for i in range(MAX_STARS): star = [randrange(0, 639), randrange(0, 479), rand
event.get(): if event.type == pygame.QUIT: exit(0) #!/usr/bin/perl $numstars = 100; use Time::HiRes qw(usleep); use Curses; $screen = new Curses; noe
r_y[$i] = rand(24); $star_s[$i] = rand(4) + 1; } while (1) { $screen->clear; for ($i = 0; $i < $numstars ; $i++) { $star_x[$i] -= $star_s[$i]; if ($star_x[$i] <
efresh; usleep 50000; gem “therubyracer”, “~> 0.11.4” group :development, :test do gem “rspec-rails”, “~> 2.13.0” $ gem install bundler $ gem instal
ond_to do |format| if @task.update_attributes(params[:task]) format.html { redirect_to @task, notice: ‘...’ } format.json { head :no_content } else format.htm
essable_entity } $ bundle exec rails generate migration add_priority_to_tasks priority:integer $ bundle exec rake db:migrate $ bundle exec rake db:mig
_the_past errors.add(:due_at, ‘is in the past!’) if due_at < Time.zone.now #!/usr/bin/en python import pygame from random import randrange MAX_ST
= pygame.time.Clock() stars = for i in range(MAX_STARS): star = [randrange(0, 639), randrange(0, 479), randrange(1, 16)] stars.append(star) while Tru
: exit(0) #!/usr/bin/perl $numstars = 100; use Time::HiRes qw(usleep); use Curses; $screen = new Curses; noecho; curs_set(0); for ($i = 0; $i < $num
) + 1; } while (1) { $screen->clear; for ($i = 0; $i < $numstars ; $i++) { $star_x[$i] -= $star_s[$i]; if ($star_x[$i] < 0) { $star_x[$i] = 80; } $screen->addch($sta
“~> 0.11.4” group :development, :test do gem “rspec-rails”, “~> 2.13.0” $ gem install bundler $ gem install rails --version=3.2.12 $ rbenv rehash $ rails n
arams[:task]) format.html { redirect_to @task, notice: ‘...’ } format.json { head :no_content } else format.html { render action: “edit” $ bundle exec rake d
e_at_is_in_the_past def due_at_is_in_the_past errors.add(:due_at, ‘is in the past!’) if due_at < Time.zone.now #!/usr/bin/en python import pygame fro
me.display.set_mode((640, 480)) clock = pygame.time.Clock() stars = for i in range(MAX_STARS): star = [randrange(0, 639), randrange(0, 479), randr
72 | Manual do Hacker Especial
event.get(): if event.type == pygame.QUIT: exit(0) #!/usr/bin/perl $numstars = 100; use Time::HiRes qw(usleep); use Curses; $screen = new Curses; noe
r_y[$i] = rand(24); $star_s[$i] = rand(4) + 1; } while (1) { $screen->clear; for ($i = 0; $i < $numstars ; $i++) { $star_x[$i] -= $star_s[$i]; if ($star_x[$i] <
son: @task.errors, status: :unprocessable_entity } $
at_is_in_the_past def due_at_is_in_the_past errors.
display.set_mode((640, 480)) clock = pygame.time.
get(): if event.type == pygame.QUIT: exit(0) #!/usr/
$i] = rand(24); $star_s[$i] = rand(4) + 1; } while (1) {
leep 50000; gem “therubyracer”, “~> 0.11.4” group
Programação | Introdução
|format| if @task.update_attributes(params[:task])
ble_entity } $ bundle exec rails generate migration
_past errors.add(:due_at, ‘is in the past!’) if due_at
pygame.time.Clock() stars = for i in range(MAX_
QUIT: exit(0) #!/usr/bin/perl $numstars = 100; use
(4) + 1; } while (1) { $screen->clear; for ($i = 0; $i <
er”, “~> 0.11.4” group :development, :test do gem
utes(params[:task]) format.html { redirect_to @task,
ate migration add_priority_to_tasks priority:integer
t!’) if due_at < Time.zone.now #!/usr/bin/en python
AX_STARS): star = [randrange(0, 639), randrange(0,
me::HiRes qw(usleep); use Curses; $screen = new

Programação
stars ; $i++) { $star_x[$i] -= $star_s[$i]; if ($star_x[$i]
s”, “~> 2.13.0” $ gem install bundler $ gem install
} format.json { head :no_content } else format.html
exec rake db:migrate $ bundle exec rake db:migrate
game from random import randrange MAX_STARS
drange(1, 16)] stars.append(star) while True: clock.
echo; curs_set(0); for ($i = 0; $i < $numstars ; $i++)
0) { $star_x[$i] = 80; } $screen->addch($star_y[$i],
ll rails --version=3.2.12 $ rbenv rehash $ rails new
ml { render action: “edit” } format.json { render json:
Criar banco de dados SQL
grate $ bundle exec rails server validate :due_at_is_
TARS = 100 pygame.init() screen = pygame.display.
você já sabe. Mas talvez você
ue: clock.tick(30) for event in pygame.event.get(): if precise de um NoSQL para
mstars ; $i++) { $star_x[$i] = rand(80); $star_y[$i] =
ar_y[$i], $star_x[$i], “.”); } $screen->refresh; usleep suprir as suas necessidades
de dados não relacionais
new todolist --skip-test-unit respond_to do |format|
json: @task.errors, status: :unprocessable_entity }
at_is_in_the_past def due_at_is_in_the_past errors.
display.set_mode((640, 480)) clock = pygame.time.
get(): if event.type == pygame.QUIT: exit(0) #!/usr/
Grupo Unico PDF Passe@diante
$i] = rand(24); $star_s[$i] = rand(4) + 1; } while (1) { 74 Riak
leep 50000; gem “therubyracer”, “~> 0.11.4” group
75 MapReduce
75 Instalando o Riak
|format| if @task.update_attributes(params[:task])
76 Benchmarking do Riak
ble_entity } $ bundle exec rails generate migration
76 Armazenando e
_past errors.add(:due_at, ‘is in the past!’) if due_at recuperando dados
pygame.time.Clock() stars = for i in range(MAX_ 77 Gerando um cluster Riak
QUIT: exit(0) #!/usr/bin/perl $numstars = 100; use 77 Consistência de dados
(4) + 1; } while (1) { $screen->clear; for ($i = 0; $i <
er”, “~> 0.11.4” group :development, :test do gem 78 Escreva um script de
utes(params[:task]) format.html { redirect_to @task, backup no Bash
ate migration add_priority_to_tasks priority:integer 78 Em uma shell
t!’) if due_at < Time.zone.now #!/usr/bin/en python 78 Bash básico
AX_STARS): star = [randrange(0, 639), randrange(0, 79 Olá, mundo!
me::HiRes qw(usleep); use Curses; $screen = new 79 Onde você está
stars ; $i++) { $star_x[$i] -= $star_s[$i]; if ($star_x[$i] 79 Variáveis
s”, “~> 2.13.0” $ gem install bundler $ gem install 80 Controle de fluxo
} format.json { head :no_content } else format.html 80 $PATH
81 Repetições “For”
exec rake db:migrate $ bundle exec rake db:migrate
81 Redirecionamento e tubulação
game from random import randrange MAX_STARS
81 Supremacia Bourne
drange(1, 16)] stars.append(star) while True: clock.
echo; curs_set(0); for ($i = 0; $i < $numstars ; $i++)
0) { $star_x[$i] = 80; } $screen->addch($star_y[$i],
ll rails --version=3.2.12 $ rbenv rehash $ rails new
ml { render action: “edit” } format.json { render json:
grate $ bundle exec rails server validate :due_at_is_
TARS = 100 pygame.init() screen = pygame.display.
ue: clock.tick(30) for event in pygame.event.get(): if
mstars ; $i++) { $star_x[$i] = rand(80); $star_y[$i] =
ar_y[$i], $star_x[$i], “.”); } $screen->refresh; usleep
new todolist --skip-test-unit respond_to do |format|
Manual do Hacker | 73
db:migrate $ bundle exec rake db:migrate $ bundle
om random import randrange MAX_STARS = 100
range(1, 16)] stars.append(star) while True: clock.
Manual do Hacker Especial | 73
echo; curs_set(0); for ($i = 0; $i < $numstars ; $i++)
0) { $star_x[$i] = 80; } $screen->addch($star_y[$i],
Programação | NoSQL

Tudo o que você sempre quis saber sobre


NoSQL, mas teve medo de perguntar. Descubra
por que os administradores adoram este
sistema
Grupo de alta
Unico PDFperformance.
Passe@diante

P
ode levar décadas para que (https://db-engines.com/en/ranking), o banco de dados, mas isso também cria
percebamos as MongoDB, um popular banco de dados um problema, porque os bancos de dados
transformações de uma NoSQL, é atualmente o quinto mais popular, relacionais foram originalmente
revolução. Criado em 1998, o depois de Oracle, MySQL, Microsoft SQL projetados para serem executados como
NoSQL (Not Only SQL) é um banco de Server e PostgreSQL – e até mesmo a Oracle sistemas de um único nó (single-node).
dados que começou a sua vida sem tem uma versão NoSQL de seu famoso banco Assim, as grandes empresas, como
usar a linguagem padrão SQL. Mais de dados. Google e Amazon, desenvolveram seus
revolucionário, o NoSQL se afastou O problema com banco de dados próprios sistemas de banco de dados
dos modelos de bancos de dados relacionais é que, para armazenar relacionais tradicionais, e inspiraram o
atuais para criar algo com movimento NoSQL.
melhor performance e maior
escalabilidade de
Os bancos de dados NoSQL É bastante difícil
definir o que é um banco
armazenamento de grandes
volumes de dados.
são projetados para a web e de dados NoSQL, mas
você pode identificar
Como o nome sugere, o não oferecem suporte a junções algumas características
banco de dados NoSQL,
originalmente projetado para
e processos complexos. comuns entres os
bancos de dados
não usar o SQL, ele pode, em NoSQL: eles não são
vez disso, adotar diferentes linguagens. informações complexas, você deve relacionais, são de código fonte aberto
Quando surgiu em 1998, o NoSQL não desconstruí-los em partes e campos e (embora nem sempre), sem esquemas,
ganhou importância até os anos 2.000 armazená-las em muitas tabelas diferentes. fácil de ser distribuído em muitas
quando foi adotado como um recuperador Da mesma forma, para restaurar os máquinas (novamente, nem sempre),
de hashtag no Twitter para um grupo de dados, você deve recuperar todas as partes e entre outras.
projetos de banco de dados não-relacionais campos e colocá-los de volta novamente. Assim, os bancos de dados NoSQL
distribuído que estava atrás de algo Nenhuma dessas duas tarefas é eficiente, são projetados para a web e não oferecem
pequeno e exclusivo. especialmente se você tem um website suporte a junções, processos e outros
Se você estiver se perguntando se vale grande que armazena e consulta dados o recursos da linguagem SQL. Sua
ou não a pena considerar o banco de dados tempo todo. terminologia também é um pouco
NoSQL, você deve estar ciente de que, de O próximo passo lógico consiste em diferente, mas vamos mergulhar nos
acordo com o DB-Engines Ranking usar muitas máquinas para rodar o seu detalhes.

74 | Manual do Hacker Especial


precisará assumir row keys devem ser exclusivas dentro de uma
um esquema família de colunas. O modelo de dados pode
implícito na hora de ser mais complicado do que os outros, mas
fazer um trabalho resulta em tempos de recuperação mais
mais sério com seus rápidos. Exemplos de bancos de dados
dados. Isso não é columm-family NoSQL incluem Cassandra e
inesperado, porque Apache HBase.
enquanto você
estiver trabalhando Graph Este modelo é totalmente diferente
com dados, não dos outros três, pois é baseado na estrutura
poderá fugir do do Graph. Como uma consequência lógica,
esquema, mesmo os bancos de dados Graph NoSQL
um informal. manipulam muito bem as hierarquias e os
Todo servidor Riak possui uma interface web. Nesse caso,
Existe vários relacionamentos entre si; fazer coisas
estamos acessando as estatísticas de servidor por meio de:
tipos de bancos de similares com um banco de dados relacional
http://localhost:10018/stats/. A porta e o número IP são
definidos em riak.conf. dados NoSQL, cada seria uma tarefa extremamente desafiadora e
um sendo bom em lenta. Neo4j é um exemplo de banco de
A principal vantagem de banco de uma ou mais áreas, mas não em todas. Você dados ghaph NoSQL. Neste capítulo, como
dados NoSQL é que eles são adequados e pode categorizar os bancos de dados NoSQL teste, usaremos o Riak como nosso banco de
eficientes para grandes armazenamento de de acordo com seus modelos de dados: dados NoSQL.
dados e aplicações web em tempo real. Eles
também oferecem fácil escalabilidade e Document Este é um modelo de dados Instalando o Riak
permitem a implementação de alta muito comum. Ele interpreta o banco de A primeira coisa que você deve saber antes
disponibilidade de forma indolor. Eles dados como um grande armazenamento de instalar a Riak é que você precisa de
também são geralmente mais fáceis de para documentos, em que cada documento Erlang no seu sistema. A melhor maneira de
administrar, configurar e executar, e podem é uma estrutura de dados de várias partes, instalar o Riak é compilá-lo diretamente da
armazenar objetos complexos. Além disso, normalmente representada na forma de fonte, para que você tenha maior controle e
é mais fácil desenvolver aplicativos para e JSON. Você pode, ainda, armazenar uma compilação totalmente autônoma do
com bases de dados NoSQL. Seu esquema documentos em qualquer formato desejado. Riak. Faça o seguinte:
pode mudar facilmente sem tempo de MongoDB, CouchDB e RavenDB são $ wget http://s3.amazonaws.com/downloads.
inatividade porque, na verdade, eles não documentos representativos do banco de basho.com/riak/2.0/2.0.2/riak-2.0.2.tar.gz
possuem esquemas. A maioria dos bancos
Grupo Unico PDF Passe@diante
dados NoSQL. $ tar zxvf riak-2.0.2.tar.gz
de dados NoSQL, com exceção do Oracle $ cd riak-2.0.2
NoSQL, são projetos de código fonte Key-Value Este também é um modelo $ make rel
abertos. de dados comum que é semelhante à Alternativamente, você pode pegar o
As principais desvantagens dos bancos estrutura de dados do mapa hash de código fonte do Riak a partir do GitHub e
de dados NoSQL incluem o fato de que eles estrutura de dados, em que você tem a compilá-lo como já demonstrado:
exigem uma maneira totalmente nova de chave (key) e solicita ao banco de dados $ git clone git://github.com/basho/riak.git
pensar e você, ainda, precisa de um DBA em que ele devolva o valor armazenado para a $ cd riak
projetos grandes e/ou críticos. Se a sua chave em questão. Este valor pode ser $ make rel
empresa precisar usar bancos de dados SQL qualquer coisa, de um único número a um Ambas as formas devem funcionar sem
e NoSQL, você terá dois sistemas totalmente documento completo. Exemplos de banco problemas – aqui, usamos o primeiro modo
diferentes para programar e administrar e, de dados key-value NoSQL incluem Riak, de compilar o Riak. Depois de compilá-lo com
portanto, de mais pessoas. Os bancos de Redis e Project Voldemort. sucesso, você pode encontrar seus principais
dados NoSQL, sendo relativamente novos, arquivos binários dentro do diretório ./rel/
não são tão maduros como os bancos de Column-family Este é um modelo de riak/bin.
dados relacionais; portanto, escolher banco banco de dados bastante complexo. Você No mesmo diretório em que criou o Riak,
de dados NoSQL para um problema crítico tem uma ‘row key’ (chave linha) que permite você pode executar make devrel e estará
pode não parecer a solução mais segura, mas armazenar e acessar múltiplas “column pronto para executar o banco de dados Riak
isso não será um problema em alguns anos. A families” (famílias de colunas, numa que usaremos como exemplo. Esta é a
última desvantagem é o fato de que, embora tradução livre). Cada columm family é uma principal razão para obter o código fonte Riak
pareçam ter nenhum esquema, você combinação de colunas que se ajustam. As e compilá-lo por si mesmo.

MapReduce
MapReduce é uma técnica de consulta você está procurando e o MapReduce tenta solução MapReduce leva mais tempo para
avançada, bem como uma ferramenta para encontrar os dados. Usar o MapReduce, às ser implementada, mas pode desenvolver-
agregação de dados usada em bancos de vezes, pode ser muito complicado. No se melhor do que uma solução SQL. O
dados NoSQL. É uma técnica alternativa entanto, ele permite que você crie mais complicado é decidir se a técnica
para consultar um banco de dados que consultas que teriam sido extremamente MapReduce é ou não apropriada para o
difere das técnicas de consulta declarativas desafiadoras de criá-las por meio do SQL. problema específico que você está
usuais. Você dá as instruções ao banco de Depois de entender e praticar o processo, querendo resolver. Esse tipo de
dados sobre como encontrar os dados que você irá considerá-lo mais confiável e útil. A conhecimento vem com a experiência!

Manual do Hacker Especial | 75


Programação | NoSQL
$ ./dev/dev1/bin/riak start A vantagem do “curl way” é que você pode
$ ./dev/dev2/bin/riak start executá-lo a partir de uma máquina remota –
$ ./dev/dev3/bin/riak start desde que o servidor Riak também atenda a um
$ ./dev/dev1/bin/riak start endereço IP externo – sem ter que fazer login na
Node is already running! máquina que está executando o nó Riak. Você
Cada servidor Riak oferece uma interface pode parar o servidor Riak dev1 executando o
web (veja tópico na página anterior, para comando ./dev/dev1/bin/riak stop.
visualizar um exemplo do que você verá O Riak usa epmd – o servidor Erlang Port
depois de se conectar a um servido Riak). O Mapper – que desempenha um papel
Gerar um cluster Riak com cinco nós número da porta e o endereço IP do servidor crucial em toda a operação Riak. O
é muito fácil!
são definidos dentro do arquivo riak.conf. processo epmd é iniciado automaticamente
Esta é a principal razão para obter o Este é um arquivo de texto simples que você pelo comando erl se o nó deve ser
código fonte Riak e compilá-lo por si mesmo. pode editar. O comando a seguir revela o IP distribuído e não há instância em execução.
Antes de continuar a leitura deste capítulo, e o número da porta que cada servidor Riak O processo epmd permite que os nós Riak
precisamos apresentá-lo a alguns termos. corresponde: se encontrem uns aos outros. É um
Primeiro, um nó Riak é análogo a um servidor $ grep listener.http.internal `find ./dev -name processo extremamente leve e discreto que
físico. Um cluster Riak é um inteiro de 160-bit riak.conf` pode continuar funcionando mesmo depois
de espaço, que é dividido em partições de ./dev/dev2/etc/riak.conf:listener.http.internal = que todos os nós Riak pararem. Você pode
igual tamanho, chamadas vnodes. 127.0.0.1:10028 encerrá-lo manualmente depois de parar
Partições são, por sua vez, os espaços nos ./dev/dev1/etc/riak.conf:listener.http.internal = todos os nós Riak, mas isso não é
quais um cluster Riak é dividido. Cada vnode 127.0.0.1:10018 obrigatório. O comando a seguir lista todos
no Riak é responsável por uma partição. Os ./dev/dev3/etc/riak.conf:listener.http.internal = os nomes registrados com o processo epmd
vnodes coordenam as solicitações para as 127.0.0.1:10038 atualmente em uso:
partições que eles controlam. E assim por diante… Todo nó no Riak possui $ epmd -names
Um cluster Riak pode ter muitos nós que um nome associado a ele. Você pode alterá-lo epmd: up and running on port 4369 with
residem nas mesmas ou em diferentes ao alterar a variável nodemame do arquivo data:
máquinas físicas. Um anel é um inteiro de riak.conf . O primeiro servidor (dev1) usa a name dev3 at port 49136
160-bit de espaço, dividido equivalentemente porta número 10018, o segundo (dev2) usa a name dev1 at port 55224
em partições, e o bucket é o nome do espaço porta número 10028 e o terceiro (dev3) usa a name dev2 at port 48829
para o dado armazenado no Riak. porta número 10038.
Internamente, o Riak calcula um hash Armazenando e
As versões do Riak anteriores à 2.0
binário de 160-bit para cada par de bucket/
Grupo Unico PDF recuperando dados
usaram um arquivo de configuração chamado
Passe@diante
key e mapeia esse valor para uma posição app.config que foi substituído por riak.conf. Você pode se conectar ao servidor Riak dev1
em um anel ordenado de todos esses valores. A maneira mais fácil de descobrir se um nó do e armazenar um documento usando a
Como você verá mais adiante neste Riak está acima ou abaixo é por meio do comando interface web:
capítulo, qualquer interface do cliente para curl e da interface web do nó para pingá-lo: $ curl -v -X PUT http://127.0.0.1:10018/riak/
Riak interage com objetos em termos de $ curl http://localhost:10018/ping LXF/test -H “Content-Type: text/html” -d
bucket e key em que um valor é armazenado, OK “<html><body><h1>This is a test.</h1></
bem como o tipo de bucket que é usado para $ curl http://localhost:10038/ping body></html>”
definir as propriedades do bucket. curl: (7) Failed to connect to localhost port O que é realmente armazenado no local
O modo de operação padrão para o Riak é 10038: Connection refused teste /riak/LXF é o que, no código acima,
funcionar como um cluster composto por Alternativamente, você pode usar o está depois de -d. Quando você insere um
múltiplos nós. Além disso, por padrão, nós seguinte: novo valor, o Riak retornará um código HTTP
Riak não são clones uns dos outros. $ ./dev/dev1/bin/riak ping 204. Como você sabe, Riak é um key-value
Você pode iniciar três exemplos de pong armazenado. Portanto, para recuperar um
servidores de banco de dados Riak – não é $ ./dev/dev6/bin/riak ping valor, você precisa fornecer uma chave para
necessário iniciar todos os oito servidores Node ‘[email protected]’ not responding o Riak. Você pode se conectar ao servidor
Riak – por meio dos seguintes comandos: to pings. Riak dev1 e solicitar o documento

Benchmarking do Riak
Escrita em Erlang, Basho (http://basho. arquivos existentes ficam no diretório operadores e, então, inicia o teste. O
com) oferece uma ferramenta de examples. Nós usamos o arquivo processo Stats é notificado sempre que
benchmarking para o Riak. Instale-a examples/basho_bench_ets.config uma operação é concluída. Também
digitando o seguinte: como um ponto de partida e adicionamos recebe o tempo que levou para
$ git clone git://github.com/basho/basho_ a linha {riakclient_nodes, completar a operação e o armazena em
bench.git [‘[email protected], ‘[email protected]’]}.”. um histograma.
$ cd basho_bench O Basho Bench cria o processo Stats e Todos os resultados estão dentro do
$ make os operadores com base no que é definido diretório tests. Os últimos resultados
Você deve então executar ./basho_ na configuração concorrente ajustada no podem ser encontrados usando ./tests/
bench myconfig.config para obter a arquivo myconfig.config. current/. Para gerar um gráfico em
ferramenta de coleta de dados, e criar Assim que esses processos são relação aos resultados atuais, execute
você mesmo um myconfig.config ou criados e inicializados, o Basho Bench make results (veja box na próxima
modificar uma configuração existente. Os envia um comando run para todos os página ao lado).

76 | Manual do Hacker Especial


# “myData” is the name of the Key that will Da mesma forma, se tentar juntar um nó
be used a si mesmo, você receberá uma mensagem
aRecord = bucket.new(‘myData’, data={ de erro:
‘Name’: “Mihalis”, $ dev/dev1/bin/riak-admin cluster join
‘Surname’: “Tsoukalos” [email protected]
}) Failed: This node cannot join itself in a
# Save the record cluster
aRecord.store() O comando a seguir mostra os membros
# Define the key for the record to retrieve de um cluster existente:
Um exemplo de MapReduce. Pode parecer myRecord = bucket.get(‘myData’) $ dev/dev2/bin/riak-admin status | grep
simplista, mas o MapReduce é uma técnica
# Retrieve the record! members
poderosa. Tentar o mesmo com o SQL seria
dictRecord = myRecord.data ring_members : [‘[email protected]’,’d
extremamente difícil.
# Now print it to see if all this actually [email protected]’]
armazenado anteriormente, acessando a worked. $ dev/dev1/bin/riak-admin status | grep
URL http://127.0.0.1:10018/riak/LXF/ print dictRecord members
test. Cada URL segue o padrão http:// $ python myRiak.py ring_members : [‘[email protected]’,’d
SERVER:PORT/riak/BUCKET/KEY. {u’Surname’: u’Tsoukalos’, u’Name’: [email protected]’]
O comando a seguir retorna a lista de u’Mihalis’} $ dev/dev3/bin/riak-admin status | grep
buckets disponíveis: O valor pb_port de 10017 está definido no members
$ curl -i ‘http://127.0.0.1:10018/ arquivo ./dev/dev1/etc/riak.conf usando o Node is not running!
riak?buckets=true’ parâmetro listener.protobuf.internal. Esta é Outro comando útil que mostra o status
HTTP/1.1 200 OK a porta Protocol Buffers que é usada para se dos nós é o seguinte:
Vary: Accept-Encoding conectar ao Riak Cluster. $ ./dev/dev1/bin/riak-admin member-status
Server: MochiWeb/1.1 WebMachine/1.10.5 Em razão da flexibilidade na forma como o O status de junção é temporário e se
(jokes are better explained) banco de dados NoSQL armazena, insere, tornará válido quando todas as alterações
Date: Fri, 19 Dec 2014 21:13:37 GMT consulta e atualiza dados é mais complexo do que estão aguardando na fila forem
Content-Type: application/json que um banco de dados que usa SQL. aplicadas concomitantemente. Se você
Content-Length: 33 deseja forçar as alterações, poderá executar
Gerando um cluster Riak o comando riak-admin cluster commit. Se
{“buckets”:[“LXF”,”linuxformat”]} Criar e manipular clusters no Riak é executar o comando riak-admin member-
O comando a seguir retorna a lista de relativamente fácil com a ajuda do comando status novamente, você verá o status do nó
chaves em um bucket: riak-admin. Se você tentar adicionar um nó dev3, e o comando riak-admin cluster plan
Grupo Unico PDF Passe@diante
$ curl ‘http://127.0.0.1:10018/buckets/LXF/ que ainda não esteja sendo executado em exibirá as alterações que estão prestes a ser
keys?keys=true’ um cluster, haverá uma falha, com a seguinte realizadas.
{“keys”:[“test2”,”test”,”test3”]} mensagem de erro: Para que um nó deixe realmente um
Na maioria das vezes, você vai usar um $ dev/dev2/bin/riak-admin cluster join cluster (veja box em páginas anteriores deste
script escrito em uma linguagem de [email protected] capítulo), você deve primeiro revisar as
programação para acessar um banco de Node is not running! alterações por meio do comando
dados Riak. O comando a seguir é um scrip $ ./dev/dev2/bin/riak start riak-admin cluster plan e, em seguida,
Python que conecta o banco de dados Riak $ dev/dev2/bin/riak-admin cluster join confirmá-lo com riak-admin cluster commit.
que armazena e recupera um documento: [email protected] Até agora, você não terá visto nenhuma
import riak Success: staged join request for segurança ao interagir com um banco de
# Connect to the cluster ‘[email protected]’ to ‘[email protected]’ dados Riak. No entanto, a Riak oferece
client = riak.RiakClient(pb_port=10017, $ dev/dev2/bin/riak-admin cluster join suporte a usuários e senhas. Você pode
protocol=’pbc’) [email protected] encontrar mais informações de como o Riak
# The name of the bucket Failed: This node is already a member of a lida com autenticação e autorização no
bucket = client.bucket(‘python’) cluster endereço http://bit.ly/RiakDocsAuthz.

Consistência de dados
A consistência de dados em um banco de garantia de que, uma vez que o usuário pode estar OK com perda de operações ou
dados é de suma importância. ACID tenha sido notificado acerca do sucesso de ter seu banco de dados temporariamente
(Atomicity, Consistency, Isolation and uma operação, então esta persistirá e não inconsistente em detrimento da
Durability) é um conjunto de propriedades será desfeita, mesmo que o harware ou velocidade. Você deve verificar
que garantem que as operações de banco software falhe posteriormente. cuidadosamente as características de um
de dados funcionem de forma confiável. Bancos de dados Graph executam as banco de dados NoSQL e decidir se ele se
“Atomicity” significa que quando você faz operações ACID por padrão, o que é uma serve para as suas necessidades. No
algo para alterar o banco de dados, a coisa boa. Por outro lado, nem todos as entanto, se a consistência dos dados é
alteração pode funcionar ou falhar como situações complicadas precisam estar em absolutamente crítica, você sempre pode
um todo. “Isolation” significa que, se outras “perfeita” conformidade com ACID. implementá-la no código se não for
coisas estiverem sendo executadas ao MongoDB é compatível com ACID em totalmente suportada pelo seu banco de
mesmo tempo nos mesmos dados, elas documentos de um único nível, mas não dados NoSQL. Tenha em mente que isso
não podem visualizar dados concluídos oferece suporte a atualizações de pode não ser simples, especialmente em
pela metade. “Durability” se refere à múltiplos documentos. Às vezes, você ambientes distribuídos.

Manual do Hacker Especial | 77


Programação | NoSQL

Escreva um script
de backup no Bash
Entediado de fazer backup? Siga nosso guia e descubra como compilar
alguns dos rápidos e fáceis scripts Bash para realizar a tarefa
O Linux realiza todas essas entediantes e repetitivas
tarefas muito mais fácil, porém, graças à poderosa shell Bash e
linguagem de script que a maioria dos distribuidores fornecem
por padrão. Neste artigo, nós vamos introduzi-lo ao Bash, com
foco nas funções de script que permite que você automatize
qualquer tarefa.

Em uma shell
Bash vem do inglês Bourne Again Shell e foi lançado em 1989
como substituto a Bourne Shell. Nenhuma das trivialidades
realmente ajuda se você não sabe o que é um shell, contudo.
Shell é um comando processador. Ele fornece uma interface
de texto que permite que você, o usuário, emita comandos
ao seu computador. O shell interpreta estes comandos e
repassa-os para o sistema operacional para que sejam
colocados em prática.
Grupo Unico PDF Passe@diante Caso você não tenha utilizado um shell antes (e ao longo
deste artigo nós utilizaremos ‘shell’ indistintamente com
‘Bash’), agora é hora de você dar uma chance a ele. Em
máquinas Linux modernas, os shells geralmente são lançados
por meio de uma aplicação normal de desktop, e no Fedora e
Ubuntu, a aplicação que você está procurando é chamada
Terminal. Encontre e inicie-a agora.

E
m publicações do gênero, você sempre encontrará
alguém escrevendo sobre como é importante fazer Bash básico
cópias de segurança com frequência. Mas, na prática, Após iniciar, uma janela aparecerá com um prompt de
menos de 50% das pessoas realmente o fazem. O problema comando no canto esquerdo. Sempre que você ver isto
com backups é que eles são entediantes, de modo que você seguido de um cursor piscante, significa que o shell está
pode rapidamente se esquecer de fazê-los, porque sua pronto para aceitar comandos. Tente inserir um comando
mente prefere focar em outras coisas mais interessante. digitando Is e então apertando [Enter]. Uma lista de arquivos
Existem muitas outras tarefas que administradores de e pastas em seu diretório inicial deve aparecer e, em seguida,
sistema devem realizar regulamente que são entediantes, e outro prompt.
você preferiria não fazer também. Livrar-se de cópias de Is é o nome de um comando shell, um programa que lista
segurança antigas, por exemplo, ou checar a saúde dos seus arquivos seu diretório atual (que padroniza seu diretório
servidores, instalar e configurar novos servidores… E a lista inicial). Ao digitar o nome do comando e pressionar [Enter],
segue adiante. você instrui o shell a rodá-lo.
Você pode personalizar a forma que um programa roda
passando opções a ele, geralmente inserido como -x – ou seja,
um traço seguido por uma letra. Por exemplo, nós poderíamos
ter rodando Is -I e isso teria nos dado uma saída mais
É a habilidade
detalhada.
de facilmente
Outros comandos tem argumentos posicionais que
combinar todas
as poderosas especificam como o programa é operado – argumentos
ferramentas posicionais geralmente são requeridos para o programa
do GNU que funcionar. Por exemplo, o comando cp, que copia arquivos, usa
fazem os scripts dois argumentos posicionais – o arquivo que será copiado e o
do Bach tão nome da localização da cópia:
prazerosos cp hello.txt world.txt
Isso copiará o arquivo hello.txt no diretório atual (seu
diretório inicial por padrão) para o arquivo world.txt. Caso

78 | Manual do Hacker Especial


world.txt não exista, ele o criará; caso exista, ele o
substituirá, portanto, tenha cuidado. Saiba onde você está
Se quiser mudar o diretório, você pode usar o comando
cd. Por exemplo, cd / o colocará no diretório de Sempre que estiver utilizando o razão que importa é que certas
superusuário, que está no topo da hierarquia dos seus shell, ele sempre manterá o operações, como desmontar um
arquivos de sistema, enquanto cd /usr/bin o colocará no controle de qual diretório você está diretório, falharão caso você tenha
subdiretório do usuário, que é em si um subdiretório do trabalhando no momento. Como um shell ativo naquele diretório. No
superusuário. mencionamos no texto principal, entanto, isto provavelmente não é
Os caminhos também podem ser relativos, portanto quando você inicia um shell, ele um problema quando você esta
caso você esteja em seu diretório inicial e quiser mover seus normalmente estabelece seu usando o shell interativamente,
subdiretório Documents, você pode digitar cd Documents, diretório inicial. mas se você estiver fazendo script
e o shell procurará pela pasta Documents no diretório atual Isto pode parecer um detalhe e seu cd esteja em um diretório
e movê-la para você. mínimo, mas, na verdade, é bem que você pode tentar desmontar
Finalmente, os caminhos também podem ser utilizado importante. Para iniciantes, ao mais tarde, você pode descobrir
para especificar arquivos para comando para operar. Por menos que você especifique um que seu script falha – e você não
exemplo, para copiar hello.txt para world.txt, mas com caminho absoluto, todos os sabe o por quê.
world.txt estando em seu diretório Documents e hello.txt caminhos de arquivos e diretórios Você sempre pode descobrir
estando eu seu diretório teste, você poderia digitar: emitidos são relativos ao seu qual diretório você está emitindo o
cp test/hello.txt /home/jon/Documents/world.txt trabalho atual no diretório. Se comando pwd – que vem do inglês
Você notará também que pode misturar e combinar emitir um comando para a direção present working directory (diretório
caminhos relativos e absolutos. errada, você pode deparar-se com de trabalho atual, em tradução
resultados inesperados ou mesmo livre) – para descobrir exatamente
Olá, mundo excluir o arquivo errado. A outra onde você está.
Depois de uma visão geral básica, é hora de seguir para o
real objetivo deste artigo: criar scripts com Bash.
Conforme nós o introduzimos a novas funções que Você deve ver palavras exibidas em seu shell. A primeira
permitem que você use o shell como um ambiente de linha é conhecida como shbang. Ela é usada para operar o
programação para propósito geral, nós também sistema para determinar qual programa deve ser utilizado
introduziremos a vários comandos que você pode não ter para executar os conteúdos do script. Neste caso, nós
ouvido falar antes. Em vez de parar para explicar tudo, especificamos o caminho absoluto para o programa Bash.
sugerimos utilizar o comando man para descobrir mais Este precisa ser o caminho absoluto E também deve ter os
Grupo Unico PDF Passe@diante
sobre cada comando – digite man <command name> e caracteres #! no começo.
você terá instruções de como utilizá-lo. Tente digitar man A segunda linha é apenas um comando shell padrão.
para aprender como esse comando funciona. Neste caso, é o comando echo, que faz uma cópia de
qualquer argumento passado na tela. Nós poderíamos

“Esta abordagem ter colocado qualquer comando shell que quiséssemos


aqui e, quando nós rodamos nosso script, o shell teria
simples já oferece um executado-o.
Isto é o que realmente dá poder aos seus scripts
poder bem expressivo” shell. Você pode tirar vantagem de uma gama completa
de comandos que já estão no Bash, bem como as
Na longa tradução de tutoriais de programação, vamos funções fantásticas como redirecionamento e tubos para
começar com um programa que mostre ‘Hello World’ em amarrá-los juntos, mas escrever scripts te dá ainda mais
sua tela. Escreva as linhas abaixo em um arquivo e salve: maneiras de juntar todos eles com instruções
#!/bin/bash condicionais para loops e funções.
echo “Hello World” Os dois pontos finais para observar são que nós
Uma vez que você fez isso, crie o arquivo executável com: tivemos de tornar o arquivo executável – de outra forma,
chmod +x <filename> o sistema operacional não nos permitiria rodá-lo, e não
Em seguida, rode-o com o shell, digitando: poderíamos apenas digitar seu nome como um comando
./<filename>. normal, mas tivemos de digitar ./ antes disso. O ponto é a
forma abreviada para o caminho atual do diretório, e a
barra é o divisor entre diretórios e arquivos, portanto ./ é
abreviação para o caminho absoluto de um arquivo em
seu diretório atual. (Para descobrir por que isso é
necessário, veja o box “$PATH”.)

Variáveis
Você pode estender o script anterior em várias maneiras
simples. Por exemplo, é possível adicionar mais comandos
para executar simplesmente colocando cada comando em
uma linha diferente.
#!/bin/bash
echo “hello world”
Bem como utilizando técnicas de script no Bash em seu echo “These files are in my current directory:”
arquivos, você também pode utilizá-las no próprio console ls

Manual do Hacker Especial | 79


Programação | NoSQL
fluxo de seus programas. Até agora, você só foi capaz de ter
o Bash para executar seus comandos na ordem estrita que
você os executou, mas o que acontece se você quiser mudar
a maneira que seu programa se comporta baseado em
algumas condições? Bem, estas ferramentas de controle de
fluxo permitem que você faça isso.
O primeiro nesta família de ferramentas que
mostraremos é a sentença if…then. A ideia desta é checar
sempre que alguma condição é verdadeira, como um
determinado arquivo sendo apresentado, e somente se sua
condição for verdadeira, executar o código a seguir:
#!/bin/bash

if [ 2 > 1 ]; then
echo “True”
fi
Este é um exemplo trivial, porque ele sempre exibirá
True, mas é útil, porque pode demonstrar a sintaxe
utilizada. No Bash, sentenças if são construídas por meio
Você pode Com todos os comandos disponíveis no Bash, esta da digitação da palavra if, seguida por uma expressão
referenciar
abordagem bem simples de programação já te dá um poder bem para ser avaliada dentro de colchetes. Este é seguido
arquivos
usando várias
expressivo em seus scripts. Para fazer coisas realmente pela palavra-chave then, antes da expressão a ser
técnicas poderosas, entretanto, nós precisaremos algumas das colas executada se a sentença if for verdadeira, antes de
diferentes, encontradas em outras linguagens de programação para finalmente fechar o bloco com a palavra-chave fi.
incluindo adicionar flexibilidade ao nossos scripts. Vamos começar com O Bash tem toda uma série de testes embutidos,
caminhos variáveis, que nos permitem dar nomes aos valores. Considere: muitos dos quais podem ser bem úteis de fato, incluindo
absolutos e #!/bin/bash -f , que verifica se um arquivo existe e -nt para verificar se
relativos
um arquivo é mais novo do que o outro:
name=Jon if [ -f /var/run/backup.lock ]; then
echo “Hello ${name}”
echo “${name}, that’s a nice name.”
$PATH
Grupo Unico PDF Passe@diante
A primeira linha deste comando (após #!) atribui a
sequência de texto Jon para a variável name. Depois de fazer
Não há nada de misterioso sobre os executar comandos
essa atribuição, você poderá referenciar aquela variável em
no Bash. Quando você digita um nome, o shell encontra
qualquer parte do script em questão colocando a variável
o binário ou o script que o nome refere-se e, em seguida,
name dentro de ${}. Quando você rodar o script, o Bash
o executa como se fosse um script normal ou um
analisará as sequências e substituirá o valor de name sempre
programa sendo executado pelo usuário, como em ./
que encontrar ${name}.
hello.bash. Mas se você não tem de especificar o
Apenas isso já é bem útil, mas o Bash tem truques que
caminho absoluto ao programa, como o shell sabe onde
auxiliam ainda mais. O mais útil, você pode atribuir a saída de
encontrar o arquivo?
um comando para uma variável cercada por seus acentos
A resposta é a variável $PATH. Em seu shell, você tem
agudos ao contrário:
toda uma série de variáveis de ambiente que afetam a
date=`date +%Y-%m-%d`
maneira como os programas rodam e os comando
Estas atribuições de saída deste comando de data (2015-09-
interpretados internamente no shell atual. Uma destas
variáveis é chamada PATH, e contém uma lista dos
“Agora, você deve ser capaz de diretórios onde os comandos binários ou scripts podem
ser encontrados para execução.
escrever scripts para automatizar Sempre que você inserir o nome de um comando, o

qualquer operação” shell olhará pela lista de diretórios nesta variável, da


esquerda para direita, até encontrar um arquivo com o
mesmo nome do comando que você acabou de
01, qualquer que seja a data quando você estiver lendo isto)
executar. Caso não encontre o correspondente,
para a data variável para reutilizar em seu script mais tarde.
reportará um erro:
Você pode ser ainda mais esperto, entretanto, e entrelaçar a
-bash: foo: command not found
saída de comandos diretamente em outra sequências usando
Você pode inspecionar os conteúdos da sua variável
a construção $():
$PATH ecoando, assim como em qualquer outra
echo “Today’s date is $(date +%Y-%m-%d)”
variável: echo ${PATH}. E você pode modificá-la
Este exemplo em particular é bem útil quando você estiver
também, configurando-a como qualquer outra variável.
fazendo cópias de segurança, porque ele permite que você
Caso você queira que suas mudanças persistam após
crie arquivos com a data de hoje.
você terminar a sessão do shell atua, você precisará
adicionar a mudança de um dos arquivos de
Controle de fluxo configuração Bash – .bashrc ou .bash_profile –
Outro pedaço de cola que o Bash fornece para juntar todos os
dependendo se você quer que esta aplicação acesse
seus comandos, e que é comumente encontrado em outras
shells, subshells ou ambas.
linguagens de programação, são ferramentas para controlar o

80 | Manual do Hacker Especial


exit 1 Redirecionamento e tubulação
else
touch /var/run/backup.lock Todos es exemplos que nós caractere > que faz o
tar -czf /mnt/backup-$(date +%Y-%m-%d).tgz / temos visto apresentaram sua redirecionamento.
home/jon saída na tela, na sessão shell que Existe outra tubulação também,
rm /var/run/backup.lock está sendo executada dentro do chamada stdin. Como você pode
fi seu terminal. No entanto, se você imaginar, esta é utilizada para
Neste exemplo, nós verificamos se existe um arquivo acha que programas apenas controlar a fonte de uma entrada
bloqueado. Em caso positivo, não será criada uma nova retornarão as suas saídas para a para um programa. Uma das
tela, você terá uma surpresa. características mais poderosas do
cópia de segurança, porque se supões que a anterior esteja
Na verdade, os programas Bash é sua habilidade para
rodando. Se o arquivo bloqueado não existir, use else para
enviam suas saídas em uma conectar a tubulação stdout de um
criá-lo, executá-lo e removê-lo em seguida. “tubulação” chamada stdout. programa com a tubulação stdin
Sugerimos que você reserve um tempinho para Esta tubulação tem duas saídas: de outro. Veja:
examinar a página man do Bash para verificar quais uma está conectada ao programa ls | grep *.txt
outros testes estão disponíveis. Embora tivéssemos dito gerando a saída e a outra recebe Aqui, o | (em teclados
que não gastaríamos tempo falando sobre comandos e processa a saída. Por padrão, brasileiros, este caractere é
individuais do Bash que encontrarmos ao longo deste isso é algo a mais em sua tela, digitado pressionando [Shift]+\)
artigo, o exit vale a pena comentar um pouco mais. mas não precisa ser. conecta a saída do comando Is à
Quando um programa Bash ou comando termina, ele Existem duas maneiras com as entrada do comando grep que,
quais você pode manipular esta neste exemplo, filtra todos os
retorna um valor numérico. 0 indica que tudo foi
tubulação. Uma delas consite em resultados, exceto aqueles que
completado com sucesso, enquanto qualquer outro
reconectar a saída, de modo a terminam em .txt. Desta maneira,
número sugere que algo deu errado. redirecioná-la para um arquivo, você pode ligá-los em quantos
Isto é particularmente útil quando combinado com a em vez da tela. Assim: programas quiser e, como
variável ? embutida, que armazena o código do comando echo “Hello world” > hello.txt resultado, criar dados bem
anterior. Isto permite que você controle a execução do seu Apenas para exclarecer, é o poderosos processados no Bash.
programa com base em se partes dele foi ou não concluída
com êxito.
func () {
Repetições (loops) For echo “My first function.”
Outra cola bem útil encontrada em quase toda a linguagem echo $1
de programação é for (laços de repetições), que é usada
}
Grupo Unico PDF Passe@diante
para iterar sobre os grupos de objetos, permitindo que você
aplique o mesmo bloco de código de cada objeto em turnos. func “hello”
No Bash, ela funciona de maneira similar à sentença if: Como você pode ver neste exemplo, o chamamento de
for file in $(ls); do uma função é feito exatamente da mesma maneira como
echo ${file} se você estivesse executando um comando embutido no
done Bash – você insere o nome da função, seguido por
Outro exemplo bobo, mas que ilustra a sintaxe. Após a qualquer argumento que você quiser passar para ele. Os
palavra-chave for vem uma variável de espaço reservado argumentos podem ser acessados como variáveis
(place holder) que aceitará, em turnos, cada valor na numericamente rotuladas – $1 é o primeiro argumento, $2
expressão que vem após a palavra-chave in. Para as é o segundo, e assim por diante.
palavras-chave do e done, marque o bloco, enquanto a O mesmo conjunto de variáveis permite que você
variável file pode ser referenciada internamente como acesse argumentos que passam pelo seu script na linha de
qualquer outra variável. comando também, assim você pode escrever programas
A característica final que todas as boas linguagens de que ajam em determinados arquivos ou modificando seus
programação têm, e que você precisará para criar seus comportamento baseado em suas preferências. Imagine
scripts Bash os mais úteis quanto possíveis, é a função. A que o seguinte arquivo estava gravado em name.bash:
criação e invocação de funções no Bash é bastante comum. #!/bin/bash
Para definir uma nova função, simplesmente dê um nome, echo $1
seguido por um par de parênteses e, em seguida, coloque o jon@adam ~$ ./name Jon
código que pertence àquela função dentro de chaves: Jon

Supremacia Bourne
Isto é tudo para o espaço que poderíamos dispor aqui,
mas com estes esclarecidos básicos, agora você deve ser
capaz de escrever scripts para automatizar qualquer
operação em sua máquina Linux. Mas lembre-se: caso
tenha deparado-se com uma tarefa complicada que você
não sabe como executar em parte do seu script, procure
por um programa existente que o ajudará a realizá-la e,
caso não dê certo, pense em como você pode usar
programas simples para fazer trabalhos mais complexos.
Em particular, os comandos grep, sort e cut são
Dividir seu código em pedaços menores, cada um em seu especialmente úteis, como o sed (embora ele, por si só,
próprio arquivo e diretório, organiza seus projetos seja tema livro inteiro dedicado a ele).

Manual do Hacker Especial | 81


splay.set_mode((640, 480)) clock = pygame.time.Clock() stars = for i in range(MAX_STARS): star = [randrange(0, 639), randrange(0, 479), randrange(1, 16)] stars.
ar) while True: clock.tick(30) for event in pygame.event.get(): if event.type == pygame.QUIT: exit(0) #!/usr/bin/perl $numstars = 100; use Time::HiRes qw(usleep);
s; $screen = new Curses; noecho; curs_set(0); for ($i = 0; $i < $numstars ; $i++) { $star_x[$i] = rand(80); $star_y[$i] = rand(24); $star_s[$i] = rand(4) + 1; } while (1)
>clear; for ($i = 0; $i < $numstars ; $i++) { $star_x[$i] -= $star_s[$i]; if ($star_x[$i] < 0) { $star_x[$i] = 80; } $screen->addch($star_y[$i], $star_x[$i], “.”); } $screen-
sleep 50000; gem “therubyracer”, “~> 0.11.4” group :development, :test do gem “rspec-rails”, “~> 2.13.0” $ gem install bundler $ gem install rails --version=3.2.12
hash $ rails new todolist --skip-test-unit respond_to do |format| if @task.update_attributes(params[:task]) format.html { redirect_to @task, notice: ‘...’ } format.json
_content } else format.html { render action: “edit” } format.json { render json: @task.errors, status: :unprocessable_entity } $ bundle exec rails generate migration
ty_to_tasks priority:integer $ bundle exec rake db:migrate $ bundle exec rake db:migrate $ bundle exec rails server validate :due_at_is_in_the_past def due_at_
past errors.add(:due_at, ‘is in the past!’) if due_at < Time.zone.now #!/usr/bin/en python import pygame from random import randrange MAX_STARS = 100
it() screen = pygame.display.set_mode((640, 480)) clock = pygame.time.Clock() stars = for i in range(MAX_STARS): star = [randrange(0, 639), randrange(0, 479),
(1, 16)] stars.append(star) while True: clock.tick(30) for event in pygame.event.get(): if event.type == pygame.QUIT: exit(0) #!/usr/bin/perl $numstars = 100; us

Grupo Unico PDF Passe@diante

PRESIDENTE: Paulo Roberto Houch • ASSISTENTE DA PRESIDÊNCIA: Adriana Lima ([email protected]) •


COORDENADOR DE ARTE: Rubens Martim • COLABORARAM NESTA EDIÇÃO: Robério Gonçalves/BR Designers (tradução e
adaptação) • GERENTE COMERCIAL: Elaine Houch ([email protected]) • SUPERVISOR DE MARKETING: Vinicius
Fernandes • AUXILIAR DE MARKETING: Danilo Rodrigues • DIRETORA ADMINISTRATIVA: Jacy Regina Dalle Lucca • Impresso na
ÍNDIA • Distribuição no Brasil por DINAP • MANUAL DO HACKER ESPECIAL é uma publicação do IBC Instituto Brasileiro de Cultura
Ltda. – Caixa Postal 61085 – CEP 05001-970 – São Paulo – SP – Tel.: (0**11) 3393-7777 • A reprodução total ou parcial desta obra é
proibida sem a prévia autorização do editor. Para adquirir com o IBC: www.revistaonline.com.br • VENDAS AOS DISTRIBUIDORES: Tel.:
(0**11) 3393-7728 ([email protected]).

Os artigos nesta edição são traduzidos ou reproduzidos de Hacker's Manual 2016 e seus direitos autorais e licenciamento pertencem à
Future Publishing Limited, uma empresa do grupo Future plc, Reino Unido 2014. Utilização sob licença. Todos os direitos reservados. Hacker's
Manual 2016 é marca registrada de ou licenciada por Future Publishing Limited, uma empresa do grupo Future plc. Utilização sob licença.
the past!’) if due_at < Time.zone.now #!/usr/bin/en python import pygame from random import randrange MAX_STARS = 100 pyga
_mode((640, 480)) clock = pygame.time.Clock() stars = for i in range(MAX_STARS): star = [randrange(0, 639), randrange(0, 479), randr
True: clock.tick(30) for event in pygame.event.get(): if event.type == pygame.QUIT: exit(0) #!/usr/bin/perl $numstars = 100; use Time::H
n = new Curses; noecho; curs_set(0); for ($i = 0; $i < $numstars ; $i++) { $star_x[$i] = rand(80); $star_y[$i] = rand(24); $star_s[$i] = rand
or ($i = 0; $i < $numstars ; $i++) { $star_x[$i] -= $star_s[$i]; if ($star_x[$i] < 0) { $star_x[$i] = 80; } $screen->addch($star_y[$i], $star_x[$
000; gem “therubyracer”, “~> 0.11.4” group :development, :test do gem “rspec-rails”, “~> 2.13.0” $ gem install bundler $ gem install rail
ils new todolist --skip-test-unit respond_to do |format| if @task.update_attributes(params[:task]) format.html { redirect_to @task, notice
} else format.html { render action: “edit” } format.json { render json: @task.errors, status: :unprocessable_entity } $ bundle exec rails g
sks priority:integer $ bundle exec rake db:migrate $ bundle exec rake db:migrate $ bundle exec rails server validate :due_at_is_in_the
rs.add(:due_at, ‘is in the past!’) if due_at < Time.zone.now #!/usr/bin/en python import pygame from random import randrange MA
n = pygame.display.set_mode((640, 480)) clock = pygame.time.Clock() stars = for i in range(MAX_STARS): star = [randrange(0, 639), r
tars.append(star) while True: clock.tick(30) for event in pygame.event.get(): if event.type == pygame.QUIT: exit(0) #!/usr/bin/perl $nu
leep); use Curses; $screen = new Curses; noecho; curs_set(0); for ($i = 0; $i < $numstars ; $i++) { $star_x[$i] = rand(80); $star_y[$i] = ran
ile (1) { $screen->clear; for ($i = 0; $i < $numstars ; $i++) { $star_x[$i] -= $star_s[$i]; if ($star_x[$i] < 0) { $star_x[$i] = 80; } $screen->a
screen->refresh; usleep 50000; gem “therubyracer”, “~> 0.11.4” group :development, :test do gem “rspec-rails”, “~> 2.13.0” $ gem inst
n=3.2.12 $ rbenv rehash $ rails new todolist --skip-test-unit respond_to do |format| if @task.update_attributes(params[:task]) format.ht
ormat.json { head :no_content } else format.html { render action: “edit” } format.json { render json: @task.errors, status: :unprocessable
migration add_priority_to_tasks priority:integer $ bundle exec rake db:migrate $ bundle exec rake db:migrate $ bundle exec rails ser
def due_at_is_in_the_past errors.add(:due_at, ‘is in the past!’) if due_at < Time.zone.now #!/usr/bin/en python import pygame from
TUTORIAIS! GUIAS ESPECIAIS PARA VOCÊ
TARS = 100 pygame.init() screen = pygame.display.set_mode((640, 480)) clock = pygame.time.Clock() stars = for i in range(MAX
randrange(0, 479), randrange(1, 16)] stars.append(star) while True: clock.tick(30) for event in pygame.event.get(): if event.type == pyga
MANDAR BEM NO LINUX
mstars = 100; use Time::HiRes qw(usleep); use Curses; $screen = new Curses; noecho; curs_set(0); for ($i = 0; $i < $numstars ; $i+
] = rand(24); $star_s[$i] = rand(4) + 1; } while (1) { $screen->clear; for ($i = 0; $i < $numstars ; $i++) { $star_x[$i] -= $star_s[$i]; if ($star_x[$
dch($star_y[$i], $star_x[$i], “.”); } $screen->refresh; usleep 50000; gem “therubyracer”, “~> 0.11.4” group :development, :test do gem
stall bundler $ gem install rails --version=3.2.12 $ rbenv rehash $ rails new todolist --skip-test-unit respond_to do |format|
task]) format.html { redirect_to @task, notice: ‘...’ } format.json { head :no_content } else format.html { render action: “edit” } format.jso
:unprocessable_entity } $ bundle exec rails generate migration add_priority_to_tasks priority:integer $ bundle exec rake db:migrate $
DESKTOP LINUX Escolha o ambiente certo para você
e exec rails server validate :due_at_is_in_the_past def due_at_is_in_the_past errors.add(:due_at, ‘is in the past!’) if due_at < Time.zon
pygame from random import randrange MAX_STARS = 100 pygame.init() screen = pygame.display.set_mode((640, 480)) clock = pyg
PRIVACIDADE Como proteger os seus servidores?
e(MAX_STARS): star = [randrange(0, 639), randrange(0, 479), randrange(1, 16)] stars.append(star) while True: clock.tick(30) for event
== pygame.QUIT: exit(0) #!/usr/bin/perl $numstars = 100; use Time::HiRes qw(usleep); use Curses; $screen = new Curses; noecho; cu
BANCO DE DADOS Conheça a solução NoSQL
$i++) { $star_x[$i] = rand(80); $star_y[$i] = rand(24); $star_s[$i] = rand(4) + 1; } while (1) { $screen->clear; for ($i = 0; $i < $numstars ;
Grupo Unico PDF Passe@diante
tar_x[$i] < 0) { $star_x[$i] = 80; } $screen->addch($star_y[$i], $star_x[$i], “.”); } $screen->refresh; usleep 50000; gem “therubyracer”, “
REDE Como colocar o Windows e o Linux para conversar
do gem “rspec-rails”, “~> 2.13.0” $ gem install bundler $ gem install rails --version=3.2.12 $ rbenv rehash $ rails new todolist --skip-t
ask.update_attributes(params[:task]) format.html { redirect_to @task, notice: ‘...’ } format.json { head :no_content } else format.html { ren
der json: @task.errors, status: :unprocessable_entity } $ bundle exec rails generate migration add_priority_to_tasks priority:integer $
LINUX Segurança
Software | Monte sua própria máquina Steam

Software | Monte sua própria máquina Steam

Segurança | Malware

Segurança | Malware
V
Distros | Windows vs Linux

Distros | Windows vs Linux

e exec rake db:migrate $ bundle Windows é exec


coisa dorails
passadoserver validate :due_at_is_in_the_past def due_at_is_in_the_past errors.add(:due_at, ‘is in th
ocê poderia, claro, comprar uma Linux e use software de código aberto,
supermáquina pronta agora mesmo, consiste principalmente em uma interface
mas para conseguir uma máquina para a loja Steam, da Valve, mas você poderá

À
dedicada para jogar no Linux, achamos que a também acessar a área de trabalho Gnome s vezes, você ouve por aí que o
melhor coisa a fazer é baixar e instalar o como parte do sistema para instalar Linux é “mais seguro” do que

S
P
V python import pygame from random import randrange MAX_STARS = 100 pygame.init()
odemos perdoar a Microsoft por SteamOS você mesmo. Esta distro foi programas e jogos que não sejam do Steam. o Windows. Até certo ponto,
abandonar sua estratégia de fazer projetada, desde a sua concepção, para jogos, Outra coisa a considerar é que o download isto está certo, pois usuários
lançamentos discretos, pois isso não com o Stream Big Picture como interface do SteamOS tem 1GB, de modo que poderá de desktop Linux não têm muito o que

#!/usr/bin/en screen = pygame.display.set_


funcionou muito bem. O Windows Vista não padrão. A interface foi especialmente criada demorar para baixá-lo, caso a sua conexão temer em termos de vírus e malwares
foi bem recebido, principalmente em razão para navegar por meio de controle de jogos com a internet seja lenta. do que seus equivalentes do Windows.

WINDOWS Uma canção


das exigências mínimas de hardware para em uma tela grande, como uma TV, embora Uma vez baixado o Steam, você precisará Não é que eles não existam, mas como
rodar o sistema, mas este teve alguns isso signifique que, desse modo, o SteamOS extrair o conteúdo do arquivo Você pode habilitar uma área de trabalho representam uma parte tão pequena do
pontos positivos. não será muito útil para outras tarefas que SteamOSinstaller.zip em um pendrive de do Gnome nas configurações do SteamOS, ecossistema de malwares, é
É bem verdade que aquelas interrupções não sejam jogos. No entanto, se você quiser capacidade de 4 GB ou mais, que precisa ser o que lhe permitirá executar programas e perfeitamente razoável não se

de ameaça e
constantes do Controle de Conta de Usuário criar uma máquina Linux de ponta para jogos formatado no sistema de arquivos FAT 32. jogos não-Steam. preocupar muito com eles, desde que

Monte a sua
(UAC) eram irritantes, mas isso foi uma ideia para competir com PS4 e Xbox, acesse Para formatar o pendrive em FAT32, você adobe bons hábitos de navegação.
bem intencionada, cujo intuito era implementar http://bit.ly/BYOSteamOS. insira-o na porta USB e abra o terminal. Em código é opcional. Este apenas dá um nome à Isso se resume a um simples jogo de

e.Clock() stars = for i in range(MAX_STARS): star = [randrange(0, 639), randrange(0, 479), randrange(1, 16)] stars.append(star) while T
melhores privilégios de conta de usuário para o Nesta página, você encontrará duas seguida, digite df para abrir a lista de drivers sua partição recém criada na unidade, para números: qualquer pesquisa colocará o

prevenção
Windows. O DirectX 10 introduziu novos opções. A primeira contém as instruções para instalados em sua máquina. Olhe facilitar o uso. Se você preferir não nomear a Linux com menos de 2% na fatia de
recursos multimídia interessantes, e o modelo baixar o SteamOS. Embora esta seja a atentamente a lista para identificar o pendrive partição, deixe esta parte do código de fora. mercado de desktops. Assim, faz muito
Poder acampar sob a via láctea não torna um sistema operacional revolucionário.
de driver WDDM proporcionava uma melhor maneira mais direta de instalar o SteamOS, em questão (a capacidade dele é um bom Esperemos que, neste momento, você já sentido os criadores de malwares
performance gráfica. Mas, pelo conjunto, o geral, podemos dizer que a Microsoft de para a interface de outro diferente, sem isso requer um disco rígido com a capacidade indicador). Não precisava nem dizer, porque é tenha baixado o arquivo ZIP do SteamOS, pois direcionarem seus esforços para o

própria Máquina
Vista foi visto como um fracasso, ignorado hoje é muito diferente daquela de ontem. Ela prejuízo da continuidade do trabalho. de 1 TB, mas há usuários que ainda possuem óbvio, mas convém identificar corretamente o você precisará descompactá-lo no pendrive Windows e (cada vez mais) os sistemas
tanto pelos usuários domésticos quanto pelas
empresas. Não conseguiu nada mais do 21%
ainda domina os desktops em todo o mundo
(embora dividido entre os últimos cinco
Quando o Windows Phone 10 for lançado,
ele permitirá que os usuários conectem seu
discos com capacidade menor. A segunda
opção consiste na instalação avançada
pendrive pois você poderá formatar o driver
errado, perdendo todos os dados salvos nele.
que você acabou de formatar. Para fazer isso,
primeiro você precisa se certificar de que Assustado? Talvez você Mac. As vítimas podem ser infectadas de
várias maneiras: geralmente, abrindo links

e.event.get(): if event.type == pygame.QUIT: exit(0) #!/usr/bin/perl $numstars = 100; use Time::HiRes qw(usleep); use Curses; $scre
da parcela do mercado.
Em suma, possuir uma única versão do
sistemas que destacamos linhas atrás e
com as distros de Linux, bem como com o
smartphone a um monitor, mouse e teclado
e use-o como um PC normal.
“A interface foi especialmente
Depois de
identificar seu
possui os programas corretos instalados,
digitando: devesse estar. Aqui, nos e anexos de e-mail maliciosos ou visitando
sites suspeitos. Muitas vezes, O Munin é uma ferramenta baseada na web para representar o histórico de dados.

aprofundamos para
Windows significa evitar problemas de OS X), mas isso parece que não irá durar Convergência também tem sido uma pendrive, anote o apt-get install zip vulnerabilidades de sistema operacional
fragmentação para a Microsoft e minimizar muito, e o CEO da empresa, Satya Nadella, das palavra-chave da Canonical desde a
projetada para navegar por caminho sob o título apt-get install unzip são exploradas, permitindo que um invasor podem executar arbitrariamente códigos para o o Adobe Reader da Adobe e o

Steam
problemas com seus clientes. Muitos tem consciência disso. introdução de sua controvertida área de Filesystem (sistema de Agora, navegue até a pasta (geralmente de
lançar alguma luz sobre
execute remotamente códigos na máquina de forma remota na máquina infectada, plugin Java da Oracle. O Chrome 42
preferiram ficar com o Windows 8, em vez de A verdadeira batalha está ocorrendo em trabalho Unity. Dois smartphones Ubuntu meio de controle de jogos em arquivos), por nome Downloads) onde está o arquivo da vítima. Sites mal-intencionado podem, inteiramente sem o conhecimento do desativou o suporte oficial para todos os
fazer o upgrade de sistema, com o receio de dispositivos móveis, e a Microsoft está já foram lançados, mas dependem da Unity exemplo: /dev/sdc1. SteamOSInstaller.zip que você baixou, por por meio de uma variedade de técnicas, usuário. É fácil (e, em alguns casos plugins NPAPI, os evidenciando como
encontrar dificuldades. Em questões visuais, o ficando para trás nesse segmento. Um dos 8, que incorpora o novo servidor de uma tela grande” Você precisará exemplo:
o mundo sombrio de tentar colocar malwares na máquina do justificado), atribuir a Adobe pelo código uma grande superfície de ataque contra o

); for ($i = 0; $i < $numstars ; $i++) { $star_x[$i] = rand(80); $star_y[$i] = rand(24); $star_s[$i] = rand(4) + 1; } while (1) { $screen->clea
Windows 10 não chega a ser tão diferente do recursos mais apreciados do Windows 10 é exibição Mir. Essas tecnologias ainda têm desmontar a unidade, cd ~/Downloads/ navegador.
Windows 8.1. Se a Microsoft realmente
queria evitar nomear sua última
a convergência de plataforma: PC, Xbox,
dispositivos Windows Mobile, Surface Hubs
um longo caminho a percorrer antes de
serem estáveis para o uso em uma área de
(download do Steam Beta), que oferece mais
controle por meio de um instalador baseado
usando:
sudo umount /dev/sdc1
e, então, digite:
unzip SteamOSInstaller.zip -d /path/
malwares Linux... “As vítimas podem ser infectadas de
Mas os servidores web vulneráveis que
permitem que os mawares se imponham
progênie de Windows 9, então o 8.2 e até mesmo a compilação do Windows 10 trabalho, embora desenvolvedores no padrão Debian e permite usar um disco onde sdc1 deve ser o caminho de seu drive onde /path/ é o caminho do seu pendrive. são, na maioria das vezes, máquinas
seria um título muito mais para o Raspberry Pi serão executados em corajosos poderão tentar fazê-lo funcionar
A explosão dos jogos triple-A chegou ao Linux, com mais rígido de capacidade menor do que 1 TB. Ao USB. Em seguida, formate a unidade para o Em seguida, é preciso instalar o SteamOS na várias maneiras: geralmente, abrindo Linux. Na verdade, existem várias formas
interessante. É claro que é um
segredo o quão diferente é a base do
um núcleo unificado do Windows, de modo
que um aplicativo seja executado
por meio do canal Ubuntu Next. É claro
que a Microsoft alcançará a convergência
de 1.000 títulos disponíveis. Montar a sua própria
clicar em “Baixar a instalação do SteamOS”,
você será encaminhado para uma página de
sistema de arquivos FAT32, usando:
sudo mkfs.vfat -n 'SteamOS' -I /dev/sdc1
máquina que você está usando para a
instalação. Com o pendrive conectado, inicie o links e anexos de e-mail maliciosos pelas quais um servidor Linux pode
acabar “possuída” por esses vilões. E se

É hora de colocar a Microsoft


código, mas ao esmiuçar as configurações, eficientemente em qualquer uma dessas antes da Canonical, mas o verdadeiro Contrato de Licença de uso do Steam – vale a Mais uma vez, onde escrevemos dev/ PC e entre na BIOS. Isto normalmente é feito
ou visitando sites suspeitos.” nele estiver hospedado um site popular
você encontrará o mesmo Gerenciador de plataformas. Para tablets/notebooks desafio para ambas as partes (ainda peixes
máquina de jogos dedicada nunca foi tão fácil! pena dar uma lida. sdc1, certifique-se de colocar o caminho pressionando a tecla F8, F11 ou F12 no ou um banco de dados sensível, isso é

{ $star_x[$i] -= $star_s[$i]; if ($star_x[$i] < 0) { $star_x[$i] = 80; } $screen->addch($star_y[$i], $star_x[$i], “.”); } $screen->refresh; us
Dispositivos que existia desde o Windows XP. conversíveis há também o recurso pequenos no ecossistema móvel) será Embora o SteamOS seja baseado em correto. Além disso, a parte -n 'SteamOS' do momento em que seu computador está mais uma motivação para alguém tentar
contra o batalhão Linux Você notará também os arquivos win.ini e
system.ini, que datam do Windows 3.1. Mas, no
Continuum, que garante que os aplicativos
transitem da interface de um dispositivo
aproveitar esse recurso para conquistar os
consumidores.
usuário que os visita. Mas, de longe, o
meio de ataque que mais prevalece é o
desonesto, mas, novamente, a real questão
é que muitas pessoas têm o Flash instado
invadi-lo. Muitas vezez, mossos leitores
nos perguntam sobre como configurar

O hardware para a sua Máquina Steam plugin Flash, da Adobe. em suas máquinas, e isso as tornam um um pacote LAMP seguro ou similar, mas,

J Fatia de mercado ogos no Linux era um problema no sistema preocupou a Valve, a desenvolvedora Com o apoio da Valve, um número crescente Applets (miniaplicações) maliciosas alvo potencial. Isso também é verdade infelizmente, não há realmente uma

C
olocamos lado a lado o fechamento desta edição e os início do “Windows como um serviço” passado, geralmente ocasionado por da amada série Half-Life, e a empresa por trás de desenvolvedores está portando seus jogos
sistema operacional comparamos com seus equivalentes a (Windows as a service). erros de desenvolvedores apressados do serviço Steam, é claro, que criou um distro para Linux, ao mesmo tempo em que muitos Quando você constrói uma máquina para placa-mãe também deve seguir esse padrão – escolher a placa Asus Nvidia GeForce GTX 760
O Windows 7, lançado três anos depois do de Metro. A despeito de essa versão tirar permanecia estranha. Até hoje, há usuários
Microsoft com o Linux para várias distribuições do Linux. A atualização do sistema foi Windows Vista, fez um ótimo trabalho em vantagem de notebooks com telas sensíveis tanto do Windows 8.1 como do Windows XP, em criar o suporte para Linux – ou baseada e no Debian, chamada SteamOS, fabricantes de hardware, particularmente os
jogar jogos na sala de estar, é preciso obviamente, o processador escolhido deverá ser 2GB GDDR5 MiniCine II Mini.
Como fazer update quando você não puder fazê-lo

> 0.11.4” group :development, :test do gem “rspec-rails”, “~> 2.13.0” $ gem install bundler $ gem install rails --version=3.2.12 $ rbenv r
considerar algumas coisas. Para começar, compatível com ela. Ah, não se esqueça de Você também vai querer adquirir um cooler,
determinar qual deles sai O discurso de lançamento do Windows “empurrada” para o consumidor final melhorar alguns de seus predecessores, ao toque, usuários de desktop se sentiram ambos tomando cerca de 13% da fatia de deixar de fazê-lo – e se concentrarem mais cujo foco são os jogos. de placas gráficas, estão fazendo progresso
você vai querer que ela seja discreta, não adquirir uma placa-mãe que venha com Wi-Fi memórias (pelos menos, 8 GB) e um disco de
vencedor. Na realidade, isso é o mesmo 10 anunciava uma mudança de paradigma que possuía uma máquina qualificada tornando-se um sistema operacional melhor desconfortáveis e confusos, principalmente mercado Windows. tempo no suporte para no suporte ao Linux por meio ocupe muito espaço e, claro, que não seja embutido – você não vai querer sair tropeçando rígido a partir de 500 GB (ideal 1 TB, caso Existem, infelizmente, uma variedade de para distros antigas são fáceis de encontrar Você não vai querer fazer quaisquer
que comparar maçãs e para o upgrade gratuito (por do que o Vista.
A adoção foi bastante cautelosa, mas, no
pela falta do menu Iniciar e da área de
trabalho padrão, que ficavam escondidos sob
Atualmente, empresas que ainda utilizam
o XP estão diante de um trilema: não fazer
Windows. A dura verdade é
“Agora está mais fácil do que de seus drivers. muito barulhenta. em cabos pela a sua sala. esteja pensando em instalar muitos jogos). servidores rodando distros antigas e sem (para versões antigas do Ubuntu acesse atualizações da versão principal do software
laranjas e, depois, pontuar
com bananas: um tem
“Colocamos lado a lado o Windows exemplo, um Windows 8
legítimo pré instalado) – este terceiro trimestre de 2011, conseguiu uma interface não muito intuitiva. Este nada, atualizar para o Windows 7 ou fazer
que o sistema operacional da
Microsoft é encontrado na nunca jogar no Linux – temos
Agora está mais fácil do
que nunca jogar no Linux –
Quanto ao visual, adquira um gabinete
pequeno (uma caixinha como o modelo
Agora, você precisa pensar na placa gráfica
(placa de vídeo). Para facilitar a compatibilidade
Pronto, agora você tem uma máquina que está
à altura do PS4 e do Xbox One.
suporte. Os administradores delas devem unir
esforços para atualizá-las, mas se, em seu
https://launchpad.net e, para Debian, o
endereço http://archive.debian.org).
vulnerável, já que isto irá provavelmente
obstruir o seu sistema. Em vez disso, os
uma aposta no Windows 8.1. O primeiro não é
como base o código livre,
que pode ser executado na
com o Linux para determinar qual terá sempre a versão mais
recente do sistema, sem
superar a fatia de usuários do XP.
Infelizmente para a Microsoft, muitos
sistema operacional foi acusado de estar em
meio a uma crise de identidade – um misto uma ideia viável, por muitas razões. O
grande maioria dos PCs de
jogos, cuja base de usuários acesso aos títulos mais recentes”
temos acesso aos títulos mais
recentes, suporte a hardwares
BitFenix Phenom Mini-ITX). Em seguida, o
processador – embora os da Intel sejam
(caso sua configuração seja parecida com a
nossa), escolha uma Nvidia. Alguns gabinetes
Escolha
caso, isso estiver fora de questão, então você
deve tentar fazer o backup de importantes
É uma ótima ideia configurar uma máquina
virtual cuja configuração esteja a mais
patches precisarão ser ajustados para a
versão antiga, que envolverá algumas
os melhores
maioria dos hardwares, e o deles sai vencedor. ” custo. Além disso, os
usuários obstinados se recusavam a sair do
XP. De certa forma, o seu mais bem-
de aplicativos para gestos multitoques e para
uso padrão de desktop, causando
segundo parece ser uma opção mais segura,
mas o Windows 7 é um sistema que já tem 8
Windows é cerca de 95,68% mais poderosos e não temos mais caros do que os da AMD, eles
funcionam melhor em máquinas Steam.
Mini-ITX têm espaço limitado para placas
gráficas. Então, em nosso exemplo, escolhemos
componentes
correções de segurança. Às vezes, as pessoas
cederão generosamente pacotes para a sua
próxima de seu servidor antigo e que você
possa gerenciá-la. Você também precisará
tentativas e erros. Se você estiver usando
uma distro baseada no Debian, adicione o

unit respond_to do |format| if @task.update_attributes(params[:task]) format.html { redirect_to @task, notice: ‘...’ } format.json { head
outro, um produto usuários inscritos no sucedido sistema operacional também foi o contradição. O Windows 8.1, uma versão anos, cujo suporte básico terminou em 2015, em mais de 125 milhões de clientes ativos A Valve demorou um tempo para abraçar o mais que fazer jogos funcionarem via Wine ou para montar a
Mesmo o quad-core i5-4570 de 3.2 GHz a Asus GeForce GTX 970 DirectCU Mini. Esta é distro antiga, mas isso pode suscitar questões trabalhar com ferramentas gcc (GNU patch no diretório debian/patches/all
proprietário com uma GUI que, até no cenário do Windows. Há novidades Windows Insider Program podem seu maior tormento. Ainda hoje, 16 anos lançada um ano depois, atendendo a e o suporte estendido terminará em 2020. O (fonte: Steam Hardware Survey). Felizmente, Linux, e a gente se perguntou o porquê de ela gastar com licenças Windows. E o melhor, sua formidável
pode ser uma boa escolha. uma placa excelente e minúscula, que executa de segurança. Compiler Collection) cuja configuração pode directory, dentro do diretório do pacote e
recentemente, funcionava somente em louváveis e, talvez, a mais notável seja a de testar as novas versões do Windows desde que foi lançado, o dinossauro azul e protestos dos usuários, recuou em muitas de Windows 8.1 talvez seja a melhor solução, a maré mudou e os jogos para Linux estão ter demorado tanto tempo, mas o fato é que muitos usuários podem notar uma melhora máquina de jogos.
Escolher o gabinete e o processador os jogos mais recentes com facilidade. Ela é um Em geral, você terá que lançar seus envolver alguma dificuldade de dependências, adicione o nome do patch em debian/
PCs x86. Em nossa abordagem, que o Windows 10 represente a última antes do seu lançamento oficial – uma verde XP anda por aí (lutando para respirar). suas decisões de projeto e conseguiu ter uma dada a semelhança com o seu sucessor, chegando cada vez mais. O desejo da isso chamou a atenção gamers de PC que significativa de performance no computador limitam a escolha da placa-mãe. Caso pouco cara, mas vale a pena o investimento. Se próprios pacotes, incorporando novas e você também precisará de todas as patches/series. Em seguida, execute
consideramos os recursos de uma build encarnação do sistema operacional. Isso oportunidade de testar os novos Em 2012, a Microsoft trouxe o Windows 8, aceitação melhor, mas a navegação na Windows 10, pelo menos até que as empresas Microsoft de criar um jardim murado em seu ainda não haviam considerado o Linux antes. ao migrar para o Linux. escolha um gabinete do tipo Mini-ITX, a você quiser economizar, talvez seja o caso de correções de segurança. Os pacotes fonte dependências de compilação do pacote. debuild para preparar o pacote.
do Windows 10 disponível até o não significa o fim do Windows, mas o recursos sem ter de pagar. com uma interface denominada inicialmente interface por meio de teclado e mouse ainda julguem este suficientemente estável.

20 | Manual do Hacker Manual do Hacker | 21 30 | Manual do Hacker Manual do Hacker | 31 50 | Manual do Hacker Manual do Hacker | 51

er action: “edit” } format.json { render json: @task.errors, status: :unprocessable_entity } $ bundle exec rails generate migration add_
20 | The Hacker’s Manual 2016 The Hacker’s Manual 2016 | 21

Colocamos o Linux e o Windows frente a A explosão dos jogos triple-A chegou ao Linux. O sistema Linux é quase impenetrável, mas
undle exec rake db:migrate $ bundle exec rake db:migrate
frente para ver qual deles é o melhor!
$ bundle exec rails server validate
Veja como montar a sua máquina Steam.
:due_at_is_in_the_past def due_at_is_in
será que seus servidores estão protegidos?
the past!’) if due_at < Time.zone.now #!/usr/bin/en python import pygame from random import randrange MAX_STARS = 100 pyga
_mode((640, 480)) clock = pygame.time.Clock() stars = for i in range(MAX_STARS): star = [randrange(0, 639), randrange(0, 479), randr
Faça mais | Monte um PC Linux

Faça mais | Monte um PC Linux

Programação | Banco de dados NoSQL

Programação | Banco de dados NoSQL

Faça mais | Samba

Faça mais | Samba

de dados NoSQL incluem o fato de que


Relembre a Lei de Moore

True: MONTE
clock.tick(30) for event in pygame.event.get(): if event.type == pygame.QUIT: exit(0) #!/usr/bin/perl $numstars = 100; use Time::H
eles exigem uma maneira totalmente nova
de pensar e você, ainda, precisa de um SMBFS e CIFS
A Lei de Moore prevê um duplicação do RAM, compre uma placa-mãe cuja DBA em projetos grandes e/ou críticos. Se
poder de processamento do computador (a capacidade seja de 32 GB. Assim, você a sua empresa precisar usar bancos de Duas implementações de arquivos de sistema utilizar o CIFS para montar os arquivos de A diferença entre o CIFS e o SMB pode ser
computação de modo geral) a cada 18 ainda poderá fazer o upgrade usando a virtuais no Linux permitem a montagem de sistema do Samba. O resultado disso é que, um pouco confusa, porque o dialeto CIFS é
dados SQL e NoSQL, você terá dois
meses. A menos que você deseje montar mesma placa-mãe. O mesmo vale para o compartilhamentos SMB: SMBFS e CIFS. O se você apenas quer montar mais recente do que o SMB, mas mais velho do
sistemas totalmente diferentes para
um computador novo todos os anos, o ideal armazenamento: adquira uma placa-mae último é a mais nova implementação e está compartilhamentos Windows na sua que o SMB2, enquanto que o CIFS é mais novo
programar e administrar e, portanto, de incorporada ao núcleo. As ferramentas que máquina Linux, você não precisa do Samba. do que o SMBFS e suporta SMB, CIFS e os
é fazê-lo de modo que sua configuração com fartura de conectores SATA, para

UM PC noecho; curs_set(0); for ($i = 0; $i < $numstars ; $i++) { $star_x[$i] = rand(80); $star_y[$i] = rand(24); $star_s[$i] = rand
permita upgrades durante a sua vida útil. adicionar mais HD e/ou disco SSD no
mais pessoas. Os bancos de dados NoSQL, você precisará para utilizar o CIFS eram, Montar um compartilhamento Windows é mais recentes dialetos SMB2 e SMB3. Para

n = new Curses;
Por exemplo, se você precisa de 16 GB de futuro. sendo relativamente novos, não são tão originalmente, parte do Samba, mas agora são simples assim: mais detalhes, veja o guia de usuário: http://
maduros como os bancos de dados um pacote separado, chamado cifs-utils. mount -t cifs -o bit.ly/1JFFIn4. As especificações de protocolo
relacionais; portanto, escolher banco de O SMBFS original, que também é parte da username=myuser,password=mypass // SMB e CIFS são publicadas em http://bit.
A ideia não é dizer quais componentes dias de hoje a situação seja muito melhor dados NoSQL para um problema crítico suíte do Samba, ficou obsoleto – você deve myserver/myshare /mnt ly/1FakGHQ e http://bit.ly/1hNoqKO.
você deve escolher, mas oferecer as do que no passado, ainda há componentes pode não parecer a solução mais segura,

LINUX
informações para que você mesmo tome que são melhor suportados do que outros. mas isso não será um problema em alguns
suas próprias decisões com base nas suas Vamos focar nos principais componentes anos. A última desvantagem é o fato de totalmente a funcionalidade do controlador de políticas de segurança para todos os Isto tornará o /tmp no servidor
Você pode comprar um desses e aceitar
necessidades específicas. Após a de que você precisa e ver quais são as que, embora pareçam ter nenhum domínio Active Directory, fazendo uma computadores que são parte de um domínio disponível assim como o Samba compartilha
o que o fabricante colocou dentro dele, ou
montagem de seu computador, você opções disponíveis. esquema, você precisará assumir um substituição efetiva para as funções Windows, o ADDC verifica a senha inserida e o TCP/IP. O uso de security = user e map to

or ($i = 0; $i < $numstars ; $i++) { $star_x[$i] -= $star_s[$i]; if ($star_x[$i] < 0) { $star_x[$i] = 80; } $screen->addch($star_y[$i], $star_x[$
você mesmo pode montar o seu e obter
precisará instalar um sistema operacional e Todo servidor Riak possui uma interface web. Nesse caso, estamos acessando esquema implícito na hora de fazer um equivalentes na linha de produtos Windows determina se o usuário em um sistema é guest permite compartilhamentos para
exatamente o que deseja.
os aplicativos. Naturalmente, estamos Processador as estatísticas de servidor por meio de: http://localhost:10018/stats/. A porta e
o número IP são definidos em riak.conf.
trabalho mais sério com seus dados. Isso Server da Microsoft. Samba é uma administrador ou convidado. O AD faz uso das operar similarmente ao obsoleto modo
naquilo que você queria exatamente. Você presumindo que você irá instalar o Linux, A primeira decisão a ser tomada é escolher não é inesperado, porque enquanto você implementação código aberto dos protocolos versões 2 e 3 do Lightweight Directory Access security = share que administradores do
pode também escolher a qualidade dos mas talvez você queira instalar também o qual processador será usado, pois isso estiver trabalhando com dados, não poderá Server Message Block ou SMB. Protocol (LDAP), Kerberos e DNS. Samba Samba podem estar familiarizados. Um
componentes que deseja usar. O HD do Windows em dual-boot para poder executar influenciará a escolha da placa-mãe e, em informações complexas, você deve esquemas, fácil de ser distribuído em fugir do esquema, mesmo um informal. É uma aplicação de camada de protocolo utiliza sua própria implementação LDAP usuário com um nome de usuário Windows
computador que você já compra montado determinados jogos ou outros aplicativos seguida, praticamente todo o resto. Tal desconstruí-los em partes e campos e muitas máquinas (novamente, nem Existe vários tipos de bancos de dados de rede que foi originalmente desenvolvida chamada Ibd; ela não suporta o uso do que o Samba não reconhece não precisará

A montagem de um PC é pode, por exemplo, não vir com a capacidade


que você deseja. Além disso, os fabricantes de
para necessidades específicas. Mas não se
preocupe, pois vamos demonstrar com
escolha pode parecer óbvia: obter o mais
rápido que você puder pagar, mas as coisas
armazená-las em muitas tabelas
diferentes.
sempre), entre outras.
Assim, os bancos de dados NoSQL são
NoSQL, cada um sendo bom em uma ou
mais áreas, mas não em todas. Você pode
pela IBM para fornecer acesso compartilhado
para arquivos e impressoras. A Microsoft
OpenLDAP para Active Directory. fornecer credenciais para acessar o
compartilhamento e eles
“A maneira que você usa o

000; gem “therubyracer”, “~> 0.11.4” group :development, :test do gem “rspec-rails”, “~> 2.13.0” $ gem install bundler $ gem install rail
fácil, mas escolher os disco rígido produzem unidades de mesmo
tamanho mas com velocidades variáveis e
instalar os dois sistemas na mesma
máquina e fazê-los conviver em (quase)
nunca são tão simples. Processadores mais
rápidos são mais caros (muito mais caros).
Da mesma forma, para restaurar os
dados, você deve recuperar todas as partes
projetados para a web e não oferecem
suporte a junções, processos e outros
categorizar os bancos de dados NoSQL de
acordo com seus modelos de dados:
entendeu sua implementação para suporte
da autenticação SMB usando seu próprio NT
serão autenticados como
usuários convidados.
Samba dependerá das

Samba
componentes é um pouco diferentes consumos de energia. Você harmonia. Porém, a velocidade do processador não é e campos e colocá-los de volta novamente. recursos da linguagem SQL. Sua LAN Manager (NTLM) e, mais tarde, Quaisquer arquivos que
aprenderá sobre os componentes fazendo tudo – a memória também pode ter um Nenhuma dessas duas tarefas é eficiente, terminologia também é um pouco Document Este é um modelo de dados protocolos NTLMv2. Esta implementação é
suas necessidades” eles editarem terão os
mais difícil. Vamos dar isso você mesmo. E o fato de você mesmo
montar o seu computador lhe dará mais
Escolhendo os
componentes
efeito maior em relação ao desempenho do
computador, de modo que você pode
especialmente se você tem um website
grande que armazena e consulta dados o
diferente, mas vamos mergulhar nos
detalhes.
muito comum. Ele interpreta o banco de
dados como um grande armazenamento
chamada de Common Internet File System,
ou CIFS. Novas extensões, incluindo suporte Sendo assim, há duas maneiras de usar o
suas identificações de
usuário e grupo configuradas para
uma olhada nas opções confiança na hora de abri-lo para fazer os
upgrades, por exemplo, trocar o disco rígido,
Na hora de escolher os componentes, você
precisa levar em conta o seu tipo de uso
economizar um pouco no processador e tempo todo.
O próximo passo lógico consiste em
A principal vantagem de banco de
dados NoSQL é que eles são adequados e
para documentos, em que cada
documento é uma estrutura de dados de
para links simbólicos foram lançadas como
SMB2 com o Windows Vista.
Samba – uma é como sempre tem sido usada
(o clássico Samba), que pode ser operado
“ninguém”. Entretanto, se o nome de usuário
for conhecido pelo Samba, então o usuário
disponíveis. Tudo o que você sempre quis saber sobre NoSQL,

ils new todolist --skip-test-unit respond_to do |format| if @task.update_attributes(params[:task]) format.html { redirect_to @task, notice
as memórias, entre outros componentes. atual, bem como as suas necessidades usar muitas máquinas para rodar o seu eficientes para grandes armazenamento várias partes, normalmente representada Samba oferece suporte SMB2 desde a como um domínio membro ou automático e é terá sua senha solicitada. Isso pode parecer
futuras. Isso pode alterar dramaticamente banco de dados, mas isso também cria um de dados e aplicações web em tempo real. na forma de JSON. Você pode, ainda, versão 3.6. A Microsoft introduziu o SMB2.1 tudo o que você precisa para configurar estranho, mas é consistente com a forma
O que você precisa?
Dependendo de sua necessidade, existe
quais componentes escolher. Um PC
gamer, por exemplo, precisa de muito
mas teve medo de perguntar. Descubra por que os problema, porque os bancos de dados
relacionais foram originalmente projetados
Eles também oferecem fácil escalabilidade
e permitem a implementação de alta
armazenar documentos em qualquer
formato desejado. MongoDB, CouchDB e
com o Windows 7 e SMB3 com Windows 8. Ele
chama diferentes versões dos dialetos de
compartilhamentos básicos. A outra maneira
de utilizar o Samba dependerá das suas
que o Windows funciona.
Comece o Samba daemon, smbd, para
vários tipos de configurações de computador.
No mínimo, você precisa de: processador,
armazenamento em disco e velocidade de
acesso aos dados. O recomendável é que,
administradores adoram este sistema de alta para serem executados como sistemas de
um único nó (single-node). Assim, as
disponibilidade de forma indolor. Eles
também são geralmente mais fáceis de
RavenDB são documentos representativos
do banco de dados NoSQL.
protocolo, portanto o CIFS e o SMB2 são
dialetos do protocolo SMB. Enquanto estes
necessidades, mas a primeira coisa que
precisa ser feita é instalá-lo. A maioria das
tornar este compartilhamento acessível no
Windows. Para acessá-lo, basta usar o
placa-mãe, memória, disco rígido, placa de em conjunto com um HD, você use um
performance. grandes empresas, como Google e administrar, configurar e executar, e dialetos são proprietários, suas especificações distribuições devem tê-lo em estoque, embora Windows Explorer para navegar até o servidor

Dançando com o Windows


vídeo, gabinete e fonte de alimentação. Você disco SSD para instalar o sistema e salvar Amazon, desenvolveram seus próprios podem armazenar objetos complexos. Key-Value Este também é um modelo estão disponíveis para o público; um dos o Samba 3.6 ainda possa ser a opção padrão. Samba (você pode tanto utilizar o nome
também pode precisar de um monitor, os arquivos atuais – os demais arquivos, sistemas de banco de dados relacionais Além disso, é mais fácil desenvolver de dados comum que é semelhante à resultados da liquidação da Microsoft com as A outra opção é buscá-lo na fonte: www. quanto o endereço IP).

} else format.html { render action: “edit” } format.json { render json: @task.errors, status: :unprocessable_entity } $ bundle exec rails g
teclado e mouse; mas talvez você queira cujo acesso é menos frequente, podem ser tradicionais, e inspiraram o movimento aplicativos para e com bases de dados estrutura de dados do mapa hash de cortes europeias em 2004 foi o lançamento samba.org/samba/download. Existe outro protocolo que tem sido
montar um computador para centro de mídia salvos em um disco rígido comum. No caso NoSQL. NoSQL. Seu esquema pode mudar estrutura de dados, em que você tem a de uma documentação completa para Assim que for instalado, o arquivo de associado com a rede Windows há tempos e,
de sua casa, para conectar à sua TV ou do servidor NAS, a capacidade importa, É bastante difícil definir o que é um facilmente sem tempo de inatividade chave (key) e solicita ao banco de dados autenticação de rede com o Active Directory. configuração do Samba é chamado smb.conf portanto, uma parte integral do Samba suite:

H P
á um texto que percorre na
internet há anos, chamado “E se
É muito fácil ir a uma loja física comprar um
novo computador (ou adquiri-lo online). Mas
pode montar a sua própria máquina, mas a
melhor é a satisfação de conhecer um pouco
simplesmente uma máquina para ser usada
como um servidor NAS (para armazenar
mas a velocidade de acesso não precisa ser
tão elevada.
ode levar décadas para que
percebamos as transformações
para não usar o SQL, ele pode, em vez disso,
adotar diferentes linguagens. Quando surgiu
Se você estiver se perguntando se vale
ou não a pena considerar o banco de
banco de dados NoSQL, mas você pode
identificar algumas características comuns
porque, na verdade, eles não possuem
esquemas. A maioria dos bancos de dados
que ele devolva o valor armazenado para a
chave em questão. Este valor pode ser
A suíte de interoperabilidade padrão do Windows Isto resultou no desenvolvimento da versão 4
do Samba, com a própria Microsoft estando
e normalmente é encontrado em uma
subpasta como /etc/samba. A configuração
NetBIOS. Atualmente, NetBIOS geralmente
refere-se ao NetBIOS do protocolo TCP/IP,
para Linux agora conta com suporte Active
Encontre o melhor custo-benefício/
os sistemas operacionais porque muitas pessoas preferem montar a sua mais sobre o seu computador. Muitas das arquivos de uma rede). Mais adiante, Usuários Linux tem outro aspecto a desempenho para o seu processador de uma revolução. Criado em em 1998, o NoSQL não ganhou importância dados NoSQL, você deve estar ciente de entres os bancos de dados NoSQL: eles NoSQL, com exceção do Oracle NoSQL, qualquer coisa, de um único número a um envolvida e testando. mais simples é compartilhada publicamente: que é considerado um protocolo de legado.
fossem companhias aéreas?”. O própria máquina? Nas próximas páginas, informações apresentadas aqui servirão explicaremos sobre estas escolhas. considerar: compatibilidade. Embora nos preferido. 1998, o NoSQL (Not Only SQL) até os anos 2.000 quando foi adotado como que, de acordo com o DB-Engines não são relacionais, são de código fonte são projetos de código fonte abertos. documento completo. Exemplos de banco Active Directory (ou também conhecido [global] Ele oferece resoluções de nome, arquivo e
texto sobre a Companhia Aérea Linux tentaremos responder a esta pergunta, bem também para aqueles que desejam fazer é um banco de dados que começou a sua um recuperador de hashtag no Twitter para Ranking (https://db-engines.com/en/ aberto (embora nem sempre), sem As principais desvantagens dos bancos de dados key-value NoSQL incluem Riak,
Directory. Vamos dar uma olhada como AD) é uma locação central para a server string = Samba Server Version impressora compartilhada com dispositivos

sks priority:integer $ bundle exec rake db:migrate $ bundle exec rake db:migrate $ bundle exec rails server validate :due_at_is_in_the
afirma: “Quando embarcar, você receberá como as dúvidas mais complexas que upgrades em uma máquina já existente. Aqui, vida sem usar a linguagem ranking), o MongoDB, um Redis e Project Voldemort. administração de computadores Windows em que não têm capacidades DNS. Ele é usado
Compatibilidade Linux
%v
um assento, quatro parafusos, uma chave surgirem quando você tentar montar o seu nos concentramos na montagem de um padrão SQL. Mais Os bancos de dados NoSQL popular banco de dados rede. Servidores que podem rodar o Active # Treat unknown users as a guest essencialmente em uma rede Windows, mas

T
de boca e uma cópia do assento-HOWTO. computador, por exemplo: qual é o risco de desktop, que geralmente são mais fáceis de revolucionário, o NoSQL se NoSQL, é atualmente o é uma grande coisa – Samba tem sido começou a distanciar-se dos controles NT Directory são chamados de controladores de (where permitted) não é mais necessário ao menos que haja
MapReduce
odos amamos nossas máquinas
html.” Esta é uma trabalhar, mas muitos dos assuntos O suporte a hardware no Linux é bom nos dias de hoje. Muitos restringir a sua pesquisa a postagens mais recentes. Procure por afastou dos modelos de são projetados para a web e quinto mais popular, depois Linux, mas a maioria de nós, em capaz de agir como um Windows NT 4.0 Domain para o seu novo Active Directory domínio (que nós podemos abreviar como security = user versões mais velhas do Windows envolvidas,
brincadeira antiga,
mas, como usuários
“Na hora de escolher os tratados sobre a escolha de
componentes compatíveis com Linux
dispositivos já são suportados diretamente pelo kernel, dispensando
a necessidade de sair em busca dos drivers nos sites dos fabricantes.
postagens que forneçam detalhes, como códigos de chipset e nomes
de módulos. Também vale a pena pesquisar em fóruns (por exemplo
bancos de dados atuais
para criar algo com melhor não oferecem suporte a junções de Oracle, MySQL,
Microsoft SQL Server e MapReduce é uma técnica de consulta você está procurando e o MapReduce tenta solução MapReduce leva mais tempo para
algum momento, precisa coexistir em
uma rede com computadores Windows e
Domain Controller ou em um existente
Windows NT 4.0 Domain. Mas com o
aumentando a lacuna entre os
ecossistemas Linux e Windows. A versão 4
ADDC, da sigla em inglês) que autenticam e
autorizam todos os usuários e computadores [tmp]
map to guest = Bad User mas você ainda precisará dela se quiser que
clientes rodando sistemas operacionais
de Linux, estamos componentes, você precisa levar também se aplicam a notebooks ou Quando estiver comprando os componentes para o seu computador,
você precisar descobrir se há suporte para ele. O primeiro passo é
em www.linuxquestions.org).
Problemas de compatibilidade sempre ocorrem, porque os
performance e maior
e processos complexos. PostgreSQL – e até mesmo avançada, bem como uma ferramenta para
agregação de dados usada em bancos de
encontrar os dados. Usar o MapReduce, às
vezes, pode ser muito complicado. No
ser implementada, mas pode desenvolver-se
melhor do que uma solução SQL. O mais
sabemos que Samba é o que permite lançamento do Windows 2000, a Microsoft do Samba fornece a solução bastante em uma rede Windows, atribuindo e aplicando path = /tmp anteriores ao Windows 2000 sejam capazes
mais acostumados a
em conta o seu tipo de uso atual” qualquer outro tipo de computador.
determinar o componente exato em uso, o que não é tão fácil quanto fabricantes não oferecem ajuda aos desenvolvedores do driver do
escalabilidade de a Oracle tem uma versão compartilhar arquivos de sistema esperada para este read only = No de acessar seus compartilhamentos. Se você

rs.add(:due_at, ‘is in the past!’) if due_at < Time.zone.now #!/usr/bin/en python import pygame from random import randrange MA
fazer as coisas por nós
mesmos do que
Por que montar o seu próprio
computador? Você pode economizar
parece. O site do fabricante da placa-mãe pode indicar que ela possui kernel, então tudo tem de ser feito por meio de engenharia reversa –
armazenamento de grandes
volumes de dados. um grupo de projetos de banco de dados banco de dados.
NoSQL de seu famoso dados NoSQL. É uma técnica alternativa
para consultar um banco de dados que
entanto, ele permite que você crie consultas
que teriam sido extremamente desafiadoras
complicado é decidir se a técnica
MapReduce é ou não apropriada para o
entre Linux e Windows.
Mas ele faz muito mais do que
“Samba 4 implementa totalmente problema sendo
completamente
Dica esperta! browsable = Yes
guest ok = Yes
não quer o NetBIOS, as adições a seguir a
seção [global] do smb.conf, faça isso:
porta Ethernet Gigabit, mas não lhe informar qual é o chipset. Então, isso geralmente se aplica a adaptadores sem fio, mas algumas placas
usuários de outros sistemas. Não que isso
seja necessariamente uma coisa ruim, pois
fazer a montagem?; e quanto à garantia?; vou
economizar?; posso montar um computador
escolhendo os seus próprios componentes,
mas recomendamos prudência. O que você
você terá que fazer alguma pesquisa. de som também são afetadas. Outra razão de incompatibilidade pode Como o nome sugere, o banco de
dados NoSQL, originalmente projetado
não-relacionais distribuído que estava atrás
de algo pequeno e exclusivo.
O problema com banco de dados
relacionais é que, para armazenar
difere das técnicas de consulta declarativas
usuais. Você dá as instruções ao banco de
de criá-las por meio do SQL.
Depois de entender e praticar o processo,
problema específico que você está querendo
resolver. Esse tipo de conhecimento vem
isso e, com a versão 4, está
completamente compatível com o
a funcionalidade do controlador compatível com o
Active Directory. Ele
Você não precisa reiniciar o Samba quando force user = nobody
force group = nobody
[global]
# disable NetBIOS
significa que entendemos melhor sobre sem Windows?; e muitas outras. precisa fazer é escolher a especificação exata
No site de busca, digite o código completo do produto, seguido da
palavra Linux, e você terá muitos resultados pertinentes. Vale a pena
ser porque o hardware é tão novo que o suporte ainda não foi
adicionado ao kernel da sua distribuição Linux favorita.
dados sobre como encontrar os dados que você irá considerá-lo mais confiável e útil. A com a experiência!
Active Directory da Microsoft. Isto de domínio Active Directory” implementa
modificar o smb.conf, porque ele detecta
mudanças automaticamente. create mask = 0755 disable netbios = yes
computadores. Há muitas razões pelas quais você mesmo do que deseja – sem desperdiçar dinheiro directory mask = 0755 smb ports = 445
58 | Manual do Hacker Manual do Hacker | 59 78 | Manual do Hacker Manual do Hacker | 79 66 | Manual do Hacker Manual do Hacker | 67

n = pygame.display.set_mode((640, 480)) clock = pygame.time.Clock() stars = for i in range(MAX_STARS): star = [randrange(0, 639), r
Quer montar você mesmo a sua máquina Tudo o que você sempre quis saber sobre Veja como Windows e Linux podem se
tars.append(star) while True: clock.tick(30)
Linux eficiente? Confira aqui! for event in pygame.event.get(): if
NoSQL, mas teve medo de perguntarevent.type == pygame.QUIT:
enxergar em uma exit(0) #!/usr/bin/perl
mesma rede $nu
leep); use Curses; $screen = new Curses; noecho; curs_set(0); for ($i = 0; $i < $numstars ; $i++) { $star_x[$i] = rand(80); $star_y[$i] = ran
ile (1) { $screen->clear; for ($i = 0; $i < $numstars ; $i++) { $star_x[$i] -= $star_s[$i]; if ($star_x[$i] < 0) { $star_x[$i] = 80; } $screen->a
screen->refresh; usleep 50000; gem “therubyracer”, “~> 0.11.4” group :development, Ano 01:test do gem “rspec-rails”, “~> 2.13.0” $ gem inst
Edição 02
n=3.2.12 $ rbenv rehash $ rails new todolist --skip-test-unit respond_to do |format| if @task.update_attributes(params[:task]) format.ht
ormat.json { head :no_content } else format.html { render action: “edit” } format.json { render json: @task.errors, status: :unprocessable
84 | Manual do Hacker Especial
migration add_priority_to_tasks priority:integer $ bundle exec rake db:migrate $ bundle exec rake db:migrate $ bundle exec rails ser
def due_at_is_in_the_past errors.add(:due_at, ‘is in the past!’) if due_at < Time.zone.now #!/usr/bin/en python import pygame from

You might also like