Aprenda a usar o comando getfacl do Linux

O comando getfacl é um dos comandos padrão do Linux e serve para obter uma lista do controle de acesso de qualquer arquivo no seu sistema.

O utilitário está presente também no FreeBSD e, para cada arquivo, o getfacl exibe uma quantidade de informações a respeito dele.

De acordo com a documentação, ele relaciona os seguintes dados sobre um arquivo:

  • nome do arquivo
  • nome do usuário que é dono dele
  • nome do grupo a que ele pertence
  • informações sobre permissões

Vamos ver um exemplo, para clarear o assunto:


getfacl /etc/machine-info 

getfacl: Removing leading '/' from absolute path names
# file: etc/machine-info
# owner: root
# group: root
user::rw-
group::r--
other::r--

O resultado do comando, acima, mostra uma mensagem informativa de que ele removeu o primeiro ‘/’ do nome do arquivo — para facilitar a compreensão.
Em seguida, ele mostra o nome do arquivo, seguido pelo usuário e grupo a que ele pertence.
As 3 últimas linhas mostram o ACL (Access Control List), ou seja, a “lista de controle de acesso” — o que cada um (usuário, grupo e outros) pode fazer com o arquivo: (r)ead (ler) e (w)rite (escrever).
No caso do exemplo, o superusuário é o único que pode alterar o arquivo. Os outros podem apenas ler.
Se o getfacl for usado contra um sistema de arquivos que não suporta ACLs, ele exibe as permissões de acesso definidas no modo tradicional de bits de permissão.

Exemplos de uso do getfacl

É possível rodar o programa contra vários arquivos, de uma vez só, usando curingas:


getfacl Documentos/Unigine_Benchmark*

# file: Documentos/Unigine_Benchmark.html
# owner: mclane
# group: mclane
user::rw-
group::r--
other::r--

# file: Documentos/Unigine_Benchmark.html
# owner: justincase
# group: justincase
user::rw-
group::r--
other::r--

É possível usar o comando setfacl para ajustar as permissões, bem como atributos de dono, de seus arquivos.
No exemplo acima, observe que o primeiro arquivos pertence ao usuário ‘mclane’.
Vamos dar permissões de leitura e escrita dele ao usuário ‘justincase’. Veja como:


setfacl -m u:justincase:rw- Unigine_Benchmark.html

getfacl Unigine_Benchmark.html 

Veja o rsultado, na 5a linha:

# file: Unigine_Benchmark.html
# owner: mclane
# group: mclane
user::rw-
user:justincase:rw-
group::r--
mask::rw-
other::r--

Se você tiver “permissão negada” para ajustar as permissões de um arquivo com o setfacl, execute com privilégios administrativos.

Referências

http://linuxcommand.org/man_pages/getfacl1.html.

Verifique se há atualizações no FreeBSD com o portmaster

Se você prefere compilar seus softwares a partir do código fonte, usando o sistema de ports, no FreeBSD, uma alternativa atraente é usar o comando portmaster.
Este comando é usado nas tarefas de gestão de software no FreeBSD — para verificar/aplicar atualizações, instalar/remover ports e todas as suas dependências.
Leia mais sobre gestão de pacotes no FreeBSD, com o Portsnap.
Neste post, estou usando exemplos baseados no FreeBSD 10.3 STABLE.
freebsd flat logo bumper badge
Para obter o utilitário portmaster, faça a sua instalação via ports system, se ainda não vez.

Como instalar o portmaster no FreeBSD

Se ainda não tiver o portmaster instalado no sistema, use um destes 2 métodos de instalação.
Para baixar e instalar, via pkg:

sudo pkg install portmaster
Password:
Updating FreeBSD repository catalogue...
Fetching meta.txz: 100%    944 B   0.9kB/s    00:01
Fetching packagesite.txz: 100%    6 MiB   1.5MB/s    00:04
Processing entries: 100%
FreeBSD repository update completed. 25560 packages processed.
Updating database digests format: 100%
New version of pkg detected; it needs to be installed first.
The following 1 package(s) will be affected (of 0 checked):
Installed packages to be UPGRADED:
    pkg: 1.8.7 -> 1.8.7_1
Number of packages to be upgraded: 1
    2 MiB to be downloaded.

Proceed with this action? [y/N]: 

… ou compile a ferramenta, a partir dos fontes. Para isto, vá até o diretório do pacote, na árvore de ports e instale-o com o make:


cd /usr/ports/ports-mgmt/portmaster/ 
sudo make install clean 

freebsd make install clean
Especificamente sobre este processo, o sistema poderá perguntar se você deseja instalar extensões programáveis para uma ou mais shells. Eu optei por não e as desmarquei (figura acima).
É possível ver mensagem sobre adicionar informações ao /etc/make.conf e converter seu banco de dados de pacotes (package database) — o que não é necessário nas versões do FreeBSD 10.1 ou superiores.

Como atualizar o sistema com o portmaster

Uma vez instalado o portmaster, verfique se há atualizações disponíveis:

portmaster -L

Como você pode ver, no exemplo acima, não é necessário ter privilégios administrativos para fazer este procedimento.
O meu resultado (parcial, abaixo), mostra que há 47 atualizações pendentes:

===>>> 47 total installed ports
       ===>>> 2 have new versions available

O portmaster examina todos os softwares instalados no seu sistema e o compara com o arquivo de índice, a procura de novas versões disponíveis.
Funciona como o comando pkg e independe do fato de os softwares terem sido instalados via package ou ports.
No que tange as dependências, ele os categoriza e determina como estão conectados entre si.
Repare a saída (acima) do comando. Todos os que tenham atualização disponível, terão uma linha indentada, em destaque (exemplo abaixo):

===>>> pt-freebsd-doc-48963,1
       ===>>> New version available: pt-freebsd-doc-49071,1

Novamente, você pode optar por um destes 2 métodos de atualização: packages ou portmaster.
Se optar por fazer a atualização através do primeiro, use novamente o comando pkg:

sudo pkg upgrade 
Password: 
Updating FreeBSD repository catalogue...
FreeBSD repository is up-to-date.
All repositories are up-to-date.
Updating database digests format: 100%
New version of pkg detected; it needs to be installed first.
The following 1 package(s) will be affected (of 0 checked):

Installed packages to be UPGRADED:
          pkg: 1.8.7 -> 1.8.7_1

Number of packages to be upgraded: 1

          2 MiB to be downloaded.

Proceed with this action? [y/N]:  

Se você prefere o segundo método, para atualizar todos os ports que necessitam de atualização, use a seguinte opção:

portmaster -aD

Para remover os distfiles velhos, use ‘–clean-distfiles’:

portmaster --clean-distfiles

Fique atento, pois este processo pode pedir sua intervenção algumas ou várias vezes, até ser concluído.

Como descobrir a versão do FreeBSD?

Quando você precisa fornecer informações sobre o software instalado, para obter ajuda ou saber se um determinado tutorial vai servir ou não, conhecer a versão do FreeBSD e o kernel instalado, pode ser muito útil.
Veja, aqui, algumas maneiras de obter estas informações.
O comando freebsd-version procura determinar a versão e o patch level do sistema instalado.
Pode ser executado “puro” ou acompanhado das opções ‘-k’ ou ‘-u’. Veja o exemplo:

freebsd-version 
10.3-STABLE

A opção ‘-k’ exibe a versão e o patch level do kernel instalado.
Diferente do uname, que iremos abordar mais a frente, se alguma versão mais nova do kernel tiver sido instalada, o freebsd-version vai imprimir a versão do novo kernel e não do atual, mesmo que você ainda não tenha reiniciado a máquina.
A opção ‘-u’ exibe a versão e o patch level do userland instalado.


O comando uname vai exibir um conjunto maior de informações, que inclui a versão do kernel instalado e a arquitetura da máquina.
No exemplo, abaixo, o comando exibe todas as informações que ele consegue obter do sistema:

uname -a 
FreeBSD brain 10.3-STABLE FreeBSD 10.3-STABLE #0 r300060: Tue May 17 19:23:37 UT
C 2016
root@releng1.nyi.freebsd.org:/usr/obj/usr/src/sys/GENERIC  amd64

Você pode obter apenas a versão do FreeBSD, com o comando uname, assim:

uname -rs 
FreeBSD 10.3-STABLE

Veja um conjunto de exemplos:

# exibe o kernel ident 
uname -i 
GENERIC

# mostra a versão do kernel do FreeBSD
uname -K 
1003502

# exibe o tipo de arquitetura da plataforma em que está sendo executado
uname -m 
amd64

# mostra o nome dado a este sistema
uname -n 
brain

# faz o mesmo que -s, para manter a compatibilidade com outros sistemas
uname -o 
FreeBSD

# exibe o tipo de arquitetura do processador atual
uname -p 
amd64

# exibe a versão atual do sistema operacional
uname -r 
10.3-STABLE

# exibe o nome do sistema operacional instalado
uname -s 
FreeBSD

# mostra a versão do FreeBSD dentro do ambiente de usuário
uname -U 
1003502

# mostra o nível de versão do sistema operacional
uname -v
FreeBSD 10.3-STABLE #0 r300060: Tue May 17 19:23:37 UTC 2016     root@releng1.nyi.freebsd.org:/usr/obj/usr/src/sys/GENERIC

Você pode obter informações sobre a arquitetura do sistema com o getconf:

getconf LONG_BIT 
64

Por fim, é possível saber mais sobre o processador do sistema de hardware, com o comando sysctl. Veja um exemplo:

sysctl -a | egrep -i 'hw.machine|hw.model|hw.ncpu' 
hw.machine: amd64
hw.model: AMD Phenom(tm) 9550 Quad-Core Processor
hw.ncpu: 1
hw.machine_arch: amd64

Referências

http://serverfault.com/questions/593318/where-does-uname-get-version-number-in-freebsd-release.

Como instalar e configurar o sudo no FreeBSD

Novos usuários do FreeBSD, recém chegados de distribuições GNU/Linux, como Debian ou Ubuntu, sentirão falta de realizar tarefas administrativas triviais, sem a necessidade de ter que se autenticar como root, o tempo inteiro.
O sudo permite instalar um programa “rapidinho” e seguir usando o sistema como usuário normal e em segurança.
Algumas instalações padrão do FreeBSD podem não vir com o sudo pronto para usar.
Se você já configurou o Ports no seu sistema, siga o procedimento descrito abaixo:

login root
cd /usr/ports/security/sudo
make install clean

Depois de finalizado, será necessário apenas configurar o sudo.
No FreeBSD, o arquivo de configuração do utilitário fica em /usr/local/etc/sudoers.
Para editá-lo, é necessário usar o comando visudo.
Se você não sabe como deve configurar o sudo, leia este post.
Em seguida, faça logout do usuário root e teste o sudo:

exit
sudo ls 
             
            We trust you have received the usual lecture from the local System
            Administrator. It usually boils down to these three things:

                #1) Respect the privacy of others.
                #2) Think before you type.
                #3) With great power comes great responsibility.

            Password: 
            .cshrc          .login_conf     .mailrc         .rhosts         .ssh
            .login          .mail_aliases   .profile        .shrc
            $  

Como instalar aplicativos do Ports Collection no FreeBSD

O sistema operacional FreeBSD, provê o Ports Collection como recurso simplificador da instalação de aplicativos no seu sistema.
Cada port contém todo e qualquer patch necessário para permitir que o código fonte original do software seja compilado — e o binário resultante possa ser executado.
Normalmente, o Ports Collection é selecionado para download, já durante a instalação do sistema. Se isto não foi feito, você terá um diretório /usr/ports vazio.

Como trazer o Ports Collection

Antes de poder usar o recurso, é necessário obter a coleção e guardá-la no diretório /usr/ports.
O comando portsnap, do FreeBSD, automatiza o processo para você — baixando, instalando e, quando necessário, sincronizando o Ports Collection da internet.
Use o ‘fetch’, para pegar “a coleção”:

portsnap fetch
Looking up portsnap.FreeBSD.org mirrors... none found.
Fetching snapshot tag from portsnap.FreeBSD.org... done.
Fetching snapshot metadata... done.
Updating from Wed Jul 20 15:21:53 BRT 2016 to Wed Jul 20 16:36:14 BRT 2016.
Fetching 4 metadata patches... done.
Applying metadata patches... done.
Fetching 0 metadata files... done.
Fetching 5 patches.
(5/5) 100.00%  done.
done.
Applying patches...
done.
Fetching 0 new ports or files... done.

A função deste comando é baixar um snapshot, ou imagem, da árvore de ports ou atualizar o que já existe.
Depois do download/sincronização, é hora de extrair a árvore de ports, colocando cada arquivo em seu lugar.
Note que o comando que segue (extract) só deve ser usado na primeira vez em que você for instalar os Ports Collection em seu sistema — uma vez que ele irá sobrepor todo o conteúdo do /usr/ports e seus subdiretórios.

portsnap extract

O processo pode ser um pouco demorado, a depender da sua conexão.
Se o diretório /usr/ports não estiver vazio, o comando ‘update’ deverá ser usado no lugar do ‘extract’.
Daqui pra frente, em resumo, não use mais o ‘extract’.
O comando ‘update’ pode ser usado para atualizar a árvore de ports previamente extraída.
É necessário rodar este comando para aplicar as mudanças feitas aos ports, após os downloads de atualizações através do ‘fetch’ ou do ‘cron’.
Este comando sobrescreve o conteúdo preexistente.

portsnap update
portsnap update 
Removing old files and directories... done.
Extracting new files:
/usr/ports/devel/avro-c/
 ...
/usr/ports/net/ntpa/
Building new INDEX files...  

Como encontrar aplicativos para instalar no FreeBSD

Você pode pesquisar dentro dos ports ou dentro do próprio diretório /usr/ports — para encontrar os aplicativos que necessita e saber exatamente o nome do pacote a ser instalado.
Se souber o nome exato do pacote, pode usar o comando whereis, assim:

whereis mpg123 
mpg123: /usr/ports/audio/mpg123

Caso queira encontrar os nomes dos pacotes relacionados ao Apache 2.4, use um dos dois métodos abaixo:

pkg search apache24 
apache24-2.4.23_1              Version 2.4.x of Apache web server

ou (preferível):

make search name=apache24 

Certifique-se de estar sob o diretório /usr/ports, para executar este comando.

Port:   apache24-2.4.23_1
Path:   /usr/ports/www/apache24
Info:   Version 2.4.x of Apache web server
Maint:  apache@FreeBSD.org
B-deps: apr-1.5.2.1.5.4 autoconf-2.69_1 autoconf-wrapper-20131203 automake-1.15_
1 automake-wrapper-20131203 db5-5.3.28_4 expat-2.2.0 gdbm-1.12 gettext-runtime-0.19.8.1 indexinfo-0.2.4 libtool-2.4.6 libxml2-2.9.3 m4-1.4.17_1,1 pcre-8.39 perl 5-5.20.3_13
R-deps: apr-1.5.2.1.5.4 db5-5.3.28_4 expat-2.2.0 gdbm-1.12 gettext-runtime-0.19.8.1 indexinfo-0.2.4 libxml2-2.9.3 pcre-8.39 perl5-5.20.3_13
WWW:    http://httpd.apache.org/

Ao usar o ‘make search’ ou o ‘pkg search’, não é necessário saber o nome exato do pacote. Você pode fazer uma busca por parte do nome e usar o comando grep para filtrar os resultados:

make search name=libreoffice | grep -i portuguese
Path:   /usr/ports/portuguese/libreoffice
Path:   /usr/ports/portuguese/libreoffice-pt_BR

Use os parâmetros ‘search key’ para obter uma lista de pacotes relacionados ao que você deseja:

make search key=php7

Se a lista for muito grande, use o comando less, para pausar a exibição:

make search key=php7 | less 

Como instalar aplicativos no sistema

Entre no diretório do aplicativo e execute a instalação.
Veja um exemplo de como instalar o emulador dosbox no FreeBSD:

cd /usr/ports/emulators/dosbox
make install clean  
===> Building/installing dialog4ports as it is required for the config dialog
===>  Cleaning for dialog4ports-0.1.6
===> Skipping 'config' as NO_DIALOG is defined
===>  License BSD2CLAUSE accepted by the user
===>   dialog4ports-0.1.6 depends on file: /usr/local/sbin/pkg - found
=> dialog4ports-0.1.6.tar.gz doesn't seem to exist in /usr/ports/distfiles/.
=> Attempting to fetch http://m1cro.me/dialog4ports/dialog4ports-0.1.6.tar.gz
===>  License GPLv2 accepted by the user
===>  Found saved configuration for dosbox-0.74_11
===>   dosbox-0.74_11 depends on file: /usr/local/sbin/pkg - found
=> dosbox-0.74.tar.gz doesn't seem to exist in /usr/ports/distfiles/.
=> Attempting to fetch http://downloads.sourceforge.net/project/dosbox/dosbox/0.
74/dosbox-0.74.tar.gz

Para remover este mesmo pacote, futuramente, use o ‘deinstall’:

make deinstall all

Note que o comando deve ser executado dentro daquele mesmo diretório. Fique atento.