Copyright © 2004-2005 Leonardo Serra Maciel de Campos
Este documento é licenciado sobre a licença de Atribuição-Compartilhamento da Creative Commons. Para ver uma cópia desta licença, visite http://creativecommons.org/licenses/by-sa/2.0/ ou envie uma carta para Creative Commons, 559 Nathan Abbott Way, Stanford, California 94305, USA.
| Histórico de Revisões | ||
|---|---|---|
| Revisão 0.5 | 2004-09-01 12:10:05 -0300 | Leonardo Serra Maciel de Campos |
| Revisão 0.6 | 2004-09-08 10:35:42 -0300 | Leonardo Serra Maciel de Campos |
| Revisão 0.7 | 2004-09-09 12:02:55 -0300 | Leonardo Serra Maciel de Campos |
| Revisão 0.8 | 2004-09-13 11:42:12 -0300 | Leonardo Serra Maciel de Campos |
| Revisão 0.9 | 2004-09-15 12:00:43 -0300 | Leonardo Serra Maciel de Campos |
| Revisão 1.0 | 2004-11-19 12:24:03 -0300 | Leonardo Serra Maciel de Campos |
| Revisão 1.1 | 2004-11-22 10:44:00 -0300 | Leonardo Serra Maciel de Campos |
| Revisão 1.2 | 2004-12-02 17:04:09 -0300 | Leonardo Serra Maciel de Campos |
| Revisão 1.3 | 2004-12-07 10:33:25 -0300 | Leonardo Serra Maciel de Campos |
| Revisão 1.4 | 2004-12-14 14:27:09 -0300 | Leonardo Serra Maciel de Campos |
| Revisão 1.5 | 2005-06-17 00:48:21 -0300 | Leonardo Serra Maciel de Campos |
Resumo
Este documento visa ensinar como configurar o Samba de maneira integrada OpenLDAP.
Índice
O Samba é um conjunto de logiciais que forneça serviços de compartilhamento de arquivos e impressão com clientes SMB/CIFS. O Samba está livremente disponível, ao contrário de outras implementações de SMB/CIFS, e permite a interoperabilidade entre usuários de Linux/Unix e clientes baseados em Microsoft Windows.
LDAP significa Lightweight Directory Access Protocol, ou seja, Protocolo de Leve Acesso a Diretórios. Como o nome sugere, é um protocolo leve para acessar serviços de diretório. O LDAP roda em cima do protocolo TCP/IP ou outras conexões de transferência de serviços.
Será presumido que o seu sistema Debian GNU/Linux e o aptitude estão corretamente configurados. Também estaremos acreditando que o servidor OpenLDAP está instalado, configurado e sendo executado da maneira correta. Também é importante que a máquina onde ficará o servidor Samba esteja realizando autenticação no servidor OpenLDAP.
Todos os comandos deverão ser executados pelo usuário root!
A tabelo abaixo mostra as versões de cada logicial usado.
Tabela 1. Versão dos logiciais
| Logicial | Versão |
|---|---|
| Debian GNU/Linux | Sarge |
| OpenLDAP (slapd) | 2.1.30-3 |
| Samba | 3.0.8-2 |
| smbldap-tools | 0.8.5-1 |
A tabelo abaixo mostra as principais caracteristicas do ambiente onde foi feito esta documentação.
Tabela 2. Ambiente
| Nome do servidor Samba |
servidor
|
| Nome do domínio/grupo de trabalho |
exemplo.com.br
|
| Ip do servidor Samba |
192.168.0.1
|
| Mascara de rede |
255.255.255.0
|
| Endereço do servidor OpenLDAP |
ldap.exemplo.com.br
|
| Sufixo da base do servidor OpenLDAP |
dc=exemplo,dc=com,dc=br
|
| Usuário administrador do servidor OpenLDAP |
cn=admin,dc=exemplo,dc=com,dc=br
|
| Senha do usuário administrador do servidor OpenLDAP |
asdf
|
Usaremos palavras desta maneira para indicar substituição.
Execute o seguinte:
#aptitude install samba samba-common samba-doc smbclient smbfs smbldap-tools
Será instalado o pacote Debian para o Samba e ferramentas relacionadas. O DebConf ira fazer algumas perguntas, responda de acordo com a tabela abaixo.
Edite o arquivo /etc/samba/smb.conf. O arquivo deverá estar idêntico ao exemplo abaixo, exceto quando estiver indicado.
# Global parameters [global] # Do something sensible when Samba crashes: mail the admin a backtrace panic action = /usr/share/samba/panic-action %d workgroup =exemplo.com.brnetbios name =servidorserver string = Servidor Samba security = user passdb backend = ldapsam:ldap://ldap.exemplo.com.br:389 encrypt passwords = yes ldap passwd sync = yes guest account = guest ldap admin dn =cn=admin,dc=exemplo,dc=com,dc=brldap suffix =dc=exemplo,dc=com,dc=brldap ssl = no ldap user suffix = ou=People ldap group suffix = ou=Group ldap machine suffix = ou=Computer ldap idmap suffix = ou=Idmap ldap delete dn = yes add user script = /usr/sbin/smbldap-useradd -m "%u" add machine script = /usr/sbin/smbldap-useradd -w "%u" add group script = /usr/sbin/smbldap-groupadd -p "%g" add user to group script = /usr/sbin/smbldap-groupmod -m "%u" "%g" delete user script = /usr/sbin/smbldap-userdel "%u" delete group script = /usr/sbin/smbldap-groupdel "%g" delete user from group script = /usr/sbin/smbldap-groupmod -x "%u" "%g" set primary group script = /usr/sbin/smbldap-usermod -g "%g" "%u" log level = 3 passdb:5 auth:2 log file = /var/log/samba/log.%m max log size = 200 syslog = 0 time server = yes socket options = TCP_NODELAY SO_SNDBUF=8192 SO_RCVBUF=8192 load printers = no os level = 64 preferred master = yes local master = yes domain master = yes domain logons = yes wins support = yes dns proxy = yes hosts allow =192.168.0.0/255.255.255.0127.0.0.0/255.0.0.0 [homes] comment = Pasta dos usuários read only = no browseable = no hide dot files = yes valid users = %S create mask = 0600 directory mask = 0700 [profiles] comment = Serviço de perfil path = /etc/samba/profiles/ profile acls = yes read only = no create mask = 0600 directory mask = 0700 [netlogon] comment = Serviço de logon path = /etc/samba/netlogon/ browseable = no read only = yes share modes = no locking = no
Você pode validar o arquivo /etc/samba/smb.conf através da execução do comando testparm
É necessario criar duas pastas.
Execute o seguinte comando para criar a pasta onde ficaram os scripts de logon:
#mkdir/etc/samba/netlogon
Execute o seguinte comando para criar a pasta onde ficaram os perfis dos usuários:
#mkdir/etc/samba/profiles
Execute o seguinte comando garantir que os usuários apenas poderão acrescentar novas pastas dentro da pasta /etc/samba/profiles:
#chmod 1777/etc/samba/profiles
É necessário criar um arquivo chamado usuario.bat dentro da pasta /etc/samba/netlogon para cada usuário que for utilizar o samba. Este arquivo deverá ter a seguinte estrutura:
echo @off
NET TIME \\servidor /SET /YES
NET USE U: /HOME /YES
Não esqueça de que este arquivo deverá ter suas quebras de linha no formado do Windows.
É necessário informar ao Samba qual é a senha do usuário cn=admin,dc=exemplo,dc=com,dc=br usado no servidor OpenLDAP. Para isto execute:
#smbpasswd -wSetting stored password for "asdfcn=admin,dc=exemplo,dc=com,dc=br" in secrets.tdb
É necessário copiar os arquivos de exemplo de configuração do smbldap-tools e alterar a permissão de um dos arquivos. Para isto execute os passos abaixo.
Copie o arquivo smbldap_bind.conf para a pasta /etc/smbldap-tools/. Para isto execute:
#cp/usr/share/doc/smbldap-tools/examples/smbldap_bind.conf/etc/smbldap-tools/
Para que apenas o root possa executar operações no servidor OpenLDAP como "cn=admin,dc=exemplo,dc=com,dc=br", utilizando as ferramentas do smbldap-tools é necessário alterar a permissão do arquivo /etc/smbldap-tools/smbldap_bind.conf. Para isto execute:
#chmod 600 /etc/smbldap-tools/smbldap_bind.conf
Descompacte o arquivo smbldap.conf.gz para a pasta /etc/smbldap-tools/. Para isto execute:
#gunzip -c/usr/share/doc/smbldap-tools/examples/smbldap.conf.gz>/etc/smbldap-tools/smbldap.conf
Edite o arquivo /etc/smbldap-tools/smbldap.conf para configurar os parâmetros do smbldap-tools.
O parametro $SID deverá ser igual ao retorno da execução de:
#net getlocalsidSID for domaindc=exemplo,dc=com,dc=bris: S-1-5-21-2794849875-3655903006-2346813305
Tabela 4. Parâmetros do arquivo /etc/smbldap-tools/smbldap.conf
| Parametro | Valor | Explicação |
|---|---|---|
| SID |
S-1-5-21-2794849875-3655903006-2346813305
|
|
| slaveLDAP | "ldap.exemplo.com.br" |
|
| masterLDAP | "ldap.exemplo.com.br" |
|
| ldapTLS | "0" | Não ira usar TLS. |
| suffix | "dc=exemplo,dc=com,dc=br" |
Sufixo da base no servidor OpenLDAP |
| usersdn | "ou=People,${suffix}" | |
| computersdn | "ou=Computer,${suffix}" | |
| groupsdn | "ou=Group,${suffix}" | |
| sambaUnixIdPooldn | "cn=NextFreeUnixId,ou=System,${suffix}" | |
| hash_encrypt | "CRYPT" | |
| userLoginShell | "/bin/bash" | Shell padrão para os usuários criados. |
| userHome | "/home/%U" | Localização da pasta pessoal dos usuários criados. |
| defaultUserGid | 10000 | Grupo padrão para os usuários criados. |
| defaultComputerGid | 10000 | Grupo padrão para os computadores criados. |
| userSmbHome | "\\servidor\homes" |
Endereço do compartilhamento onde fica a pasta pessoal dos usuários. |
| userProfile | "\\servidor\profiles\%U" |
Endereço do compartilhamento onde fica o perfil dos usuários. |
| userHomeDrive | "U:" | Unidade onde a pasta pessoal do usuário será mapeada. |
| mailDomain | "exemplo.com.br" |
Domínio para os endereços de correio eletrônico pessoal do usuário. |
Edite o arquivo /etc/smbldap-tools/smbldap_bind.conf para configurar os parâmetros do smbldap-tools.
As etapas abaixo devem ser executadas na máquina ldap.exemplo.com.br.
Edite o arquivo /etc/ldap/slapd.conf. Estaremos editanto este arquivo para ensinar ao servidor OpenLDAP a "sambar".
É necessário incluir o schema do Samba ao servidor OpenLDAP, para isto acrescente abaixo dos includes ja existentes as seguintes linhas:
# Schema for Samba include /etc/ldap/schema/samba.schema
É necessário informar ao servidor OpenLDAP quais atributos do Samba deverão ser indexados, para isto acrescente abaixo dos index ja existentes as seguintes linhas:
# Index for Samba index sambaSID eq index sambaPrimaryGroupSID eq index sambaDomainName eq
É necessário informar ao servidor OpenLDAP uma diretriz de acesso para que os usuários possam alterar sua senha do Samba. Para isto abaixo das linhas:
access to attribute=userPassword,shadowMax,shadowExpire
by dn="cn=admin,dc=exemplo,dc=com,dc=br" write
by anonymous auth
by self write
by * none
Acrescente as linhas:
# The Samba passwords emtries by default can be changed
# by the entry owning it if they are authenticated.
# Others should not be able to see it, except the admin entry below
access to attribute=sambaLmPassword,sambaNtPassword,sambaPwdLastSet,sambaPwdMustChange,sambaPwdCanChange,sambaPasswordHistory
by dn="cn=admin,dc=exemplo,dc=com,dc=br" write
by anonymous auth
by self write
by * none
Não altere a ordem das diretrizes de acesso, pois poderá acarretar em problemas de segurança.
Descompacte o arquivo de schema do Samba para a pasta /etc/ldap/schema/. Para isto execute:
#gunzip -c/usr/share/doc/samba-doc/examples/LDAP/samba.schema.gz>/etc/ldap/schema/samba.schema
Precisamos reiniciar e reindexar o OpenLDAP, para isto execute os passos abaixo.
Para parar o servidor OpenLDAP execute:
#invoke-rc.d slapd stop
Para reindexar a base do servidor OpenLDAP execute:
#slapindex
Para iniciar o servidor OpenLDAP execute:
#invoke-rc.d slapd start
É necessário fazer alguns acréscimos manuais a base do servidor OpenLDAP. Para isto siga os passos abaixo.
É necessário criar quatro objetos do tipo organizationalUnit dentro da base do servidor OpenLDAP, onde serão guardados respectivamente os nomes de domínios, informações dos computadores, entradas Idmap (usado pelo Samba para servir membros de domínio) e informações do sistema. Para isto crie um arquivo com o seguinte conteúdo e salve ele com o nome de organizationalUnit.ldif.
dn: ou=Domain,dc=exemplo,dc=com,dc=brobjectClass: top objectClass: organizationalUnit ou: Domain dn: ou=Computer,dc=exemplo,dc=com,dc=brobjectClass: top objectClass: organizationalUnit ou: Computer dn: ou=Idmap,dc=exemplo,dc=com,dc=brobjectClass: top objectClass: organizationalUnit ou: Idmap dn: ou=System,dc=exemplo,dc=com,dc=brobjectClass: top objectClass: organizationalUnit ou: System
Execute o seguinte comando para adicionar o conteudo do arquivo organizationalUnit.ldif a base do servidor OpenLDAP:
#ldapadd -x -hldap.exemplo.com.br-D "cn=admin,dc=exemplo,dc=com,dc=br" -forganizationalUnit.ldif-W
É necessário criar um objeto do tipo sambaDomain dentro da base do servidor OpenLDAP, onde será guardado o nome do domínio. Para isto crie um arquivo com o seguinte conteúdo e salve ele com o nome de sambaDomainName.ldif.
dn: sambaDomainName=exemplo.com.br,ou=Domain,dc=exemplo,dc=com,dc=brobjectClass: sambaDomain sambaDomainName:exemplo.com.brsambaSID:S-1-5-21-2794849875-3655903006-2346813305sambaAlgorithmicRidBase: 1000
Execute o seguinte comando para adicionar o conteúdo do arquivo sambaDomainName.ldif a base do servidor OpenLDAP:
#ldapadd -x -hldap.exemplo.com.br-D "cn=admin,dc=exemplo,dc=com,dc=br" -fsambaDomainName.ldif-W
É necessário criar um objeto do tipo sambaUnixIdPool dentro da base do servidor OpenLDAP, onde serão guardados o próximo uidNumber e gidNumber disponiveis. Para isto crie um arquivo com o seguinte conteúdo e salve ele com o nome de NextFreeUnixId.ldif.
dn: cn=NextFreeUnixId,ou=System,dc=exemplo,dc=com,dc=br
objectClass: inetOrgPerson
objectClass: sambaUnixIdPool
uidNumber: 10000
gidNumber: 10000
cn: NextFreeUnixId
sn: NextFreeUnixId
Execute o seguinte comando para adicionar o conteúdo do arquivo NextFreeUnixId.ldif a base do servidor OpenLDAP:
#ldapadd -x -hldap.exemplo.com.br-D "cn=admin,dc=exemplo,dc=com,dc=br" -fNextFreeUnixId.ldif-W
É necessário criar tres objetos do tipo posixGroup dentro da base do servidor OpenLDAP que são grupos basicos para o Samba. Para isto crie um arquivo com o seguinte conteúdo e salve ele com o nome de posixGroup.ldif.
dn:cn=Domain Admins,ou=Group,dc=exemplo,dc=com,dc=brobjectClass: posixGroup objectClass: sambaGroupMapping gidNumber: 512 cn: Domain Admins description: Netbios Domain Administrators sambaSID:S-1-5-21-2794849875-3655903006-2346813305-512 sambaGroupType: 2 displayName: Domain Admins memberUid: administrator dn:cn=Domain Users,ou=Group,dc=exemplo,dc=com,dc=brobjectClass: posixGroup objectClass: sambaGroupMapping gidNumber: 513 cn: Domain Users description: Netbios Domain Users sambaSID:S-1-5-21-2794849875-3655903006-2346813305-513 sambaGroupType: 2 displayName: Domain Users dn:cn=Domain Guests,ou=Group,dc=exemplo,dc=com,dc=brobjectClass: posixGroup objectClass: sambaGroupMapping gidNumber: 514 cn: Domain Guests description: Netbios Domain Guests Users sambaSID:S-1-5-21-2794849875-3655903006-2346813305-514 sambaGroupType: 2 displayName: Domain Guests
Execute o seguinte comando para adicionar o conteúdo do arquivo posixGroup.ldif a base do servidor OpenLDAP:
#ldapadd -x -hldap.exemplo.com.br-D "cn=admin,dc=exemplo,dc=com,dc=br" -fposixGroup.ldif-W
É necessário criar dois objeto do tipo posixAccount dentro da base do servidor OpenLDAP que são usuários basicos para o Samba. Para isto crie um arquivo com o seguinte conteúdo e salve ele com o nome de posixAccount.ldif.
dn:uid=administrator,ou=People,dc=exemplo,dc=com,dc=brcn: administrator sn: administrator objectClass: inetOrgPerson objectClass: sambaSAMAccount objectClass: posixAccount objectClass: shadowAccount gidNumber: 512 uid: administrator uidNumber: 0 sambaLogonTime: 0 sambaLogoffTime: 2147483647 sambaKickoffTime: 2147483647 sambaPwdCanChange: 0 sambaHomeDrive: U: sambaProfilePath: \\servidor\profiles\administrator sambaPrimaryGroupSID:S-1-5-21-2794849875-3655903006-2346813305-512 sambaSID:S-1-5-21-2794849875-3655903006-2346813305-2996 loginShell: /bin/false gecos: Netbios Domain Administrator sambaLMPassword: AA25262EEF0F6C9A93E28745B8BF4BA6 sambaAcctFlags: [U] sambaNTPassword: E5537633F2135796F7276F4555185E12 sambaPwdLastSet: 1101929376 sambaPwdMustChange: 1110482976 userPassword: {CRYPT}wTUucIFdXDeB2 homeDirectory: /home sambaHomePath: \\servidor\homes\administrator dn:uid=guest,ou=People,dc=exemplo,dc=com,dc=brcn: guest sn: guest objectClass: inetOrgPerson objectClass: sambaSAMAccount objectClass: posixAccount objectClass: shadowAccount gidNumber: 514 uid: guest uidNumber: 999 homeDirectory: /dev/null sambaPwdLastSet: 0 sambaLogonTime: 0 sambaLogoffTime: 2147483647 sambaKickoffTime: 2147483647 sambaPwdCanChange: 0 sambaPwdMustChange: 2147483647 sambaHomePath: \\servidor\homes\guest sambaHomeDrive: U: sambaProfilePath: \\servidor\profiles\guest sambaPrimaryGroupSID:S-1-5-21-2794849875-3655903006-2346813305-514 sambaLMPassword: NO PASSWORDXXXXXXXXXXXXXXXXXXXXX sambaNTPassword: NO PASSWORDXXXXXXXXXXXXXXXXXXXXX sambaAcctFlags: [NU ] sambaSID:S-1-5-21-2794849875-3655903006-2346813305-2998 loginShell: /bin/false
Execute o seguinte comando para adicionar o conteúdo do arquivo posixAccount.ldif a base do servidor OpenLDAP:
#ldapadd -x -hldap.exemplo.com.br-D "cn=admin,dc=exemplo,dc=com,dc=br" -fposixAccount.ldif-W
Precisamos reiniciar o Samba, para isto execute:
#invoke-rc.d samba restart
Para reiniciar o Samba execute:
#invoke-rc.d samba restart
Para criar usuário execute:
#smbldap-useradd -c "Nome completo" -ausuario
Pode ser passado o parametro -m para que a pasta pessoal do usuário seja criada.
Para apagar usuário execute:
#smbldap-userdelusuario
Pode ser passado o parametro -r para que a pasta pessoal do usuário seja apagada.
Para alterar a senha do usuário execute:
#smbldap-passwdusuario
Para validar o arquivo /etc/samba/smb.conf:
#testparm
# This is the main slapd configuration file. See slapd.conf(5) for more # info on the configuration options. ####################################################################### # Global Directives: # Features to permit #allow bind_v2 # Schema and objectClass definitions include /etc/ldap/schema/core.schema include /etc/ldap/schema/cosine.schema include /etc/ldap/schema/nis.schema include /etc/ldap/schema/inetorgperson.schema # Schema for Samba include /etc/ldap/schema/samba.schema # Schema check allows for forcing entries to # match schemas for their objectClasses's schemacheck on # Where the pid file is put. The init.d script # will not stop the server if you change this. pidfile /var/run/slapd/slapd.pid # List of arguments that were passed to the server argsfile /var/run/slapd.args # Read slapd.conf(5) for possible values loglevel 0 # Search base defaultsearchbasedc=exemplo,dc=com,dc=br# Where the dynamically loaded modules are stored modulepath /usr/lib/ldap moduleload back_bdb ####################################################################### # Specific Backend Directives for bdb: # Backend specific directives apply to this backend until another # 'backend' directive occurs backend bdb ####################################################################### # Specific Backend Directives for 'other': # Backend specific directives apply to this backend until another # 'backend' directive occurs #backend <other> ####################################################################### # Specific Directives for database #1, of type bdb: # Database specific directives apply to this databasse until another # 'database' directive occurs database bdb cachesize 5000 checkpoint 1 60 mode 0600 # The base of your directory in database #1 suffix "dc=exemplo,dc=com,dc=br" # Where the database file are physically stored for database #1 directory "/var/lib/ldap" # Indexing options for database #1 index objectClass eq index default sub index cn sub,pres,eq index sn sub,pres,eq index uid sub,pres,eq index displayName sub,pres,eq index uidNumber pres,eq index gidNumber pres,eq index memberUid pres,eq # Index for Samba index sambaSID eq index sambaPrimaryGroupSID eq index sambaDomainName eq # Save the time that the entry gets modified, for database #1 lastmod on # Where to store the replica logs for database #1 # replogfile /var/lib/ldap/replog # The userPassword by default can be changed # by the entry owning it if they are authenticated. # Others should not be able to see it, except the # admin entry below # These access lines apply to database #1 only access to attribute=userPassword,shadowMax,shadowExpire by dn="cn=admin,dc=exemplo,dc=com,dc=br" write by anonymous auth by self write by * none # The Samba passwords emtries by default can be changed # by the entry owning it if they are authenticated. # Others should not be able to see it, except the admin entry below access to attribute=sambaLmPassword,sambaNtPassword,sambaPwdLastSet,sambaPwdMustChange,sambaPwdCanChange,sambaPasswordHistory by dn="cn=admin,dc=exemplo,dc=com,dc=br" write by anonymous auth by self write by * none # Ensure read access to the base for things like # supportedSASLMechanisms. Without this you may # have problems with SASL not knowing what # mechanisms are available and the like. # Note that this is covered by the 'access to *' # ACL below too but if you change that as people # are wont to do you'll still need this if you # want SASL (and possible other things) to work # happily. access to dn.base="" by * read # The admin dn has full write access, everyone else # can read everything. access to * by dn="cn=admin,dc=exemplo,dc=com,dc=br" write by * read # For Netscape Roaming support, each user gets a roaming # profile for which they have write access to #access to dn=".*,ou=Roaming,o=morsnet" # by dn="cn=admin,dc=laboratorio" write # by dnattr=owner write ####################################################################### # Specific Directives for database #2, of type 'other' (can be bdb too): # Database specific directives apply to this databasse until another # 'database' directive occurs #database <other> # The base of your directory for database #2 #suffix "dc=debian,dc=org"
Os seguintes sítios foram usados como base para a criação desta documentação
The Official Samba-3 HOWTO and Reference Guide. http://us3.samba.org/samba/docs/man/Samba-HOWTO-Collection/.
Samba (v.3) PDC LDAP howto. http://www.unav.es/cti/ldap-smb/smb-ldap-3-howto.html.
SAMBA (v 2.2) PDC LDAP v.3 howto. http://www.unav.es/cti/ldap-smb/ldap-smb-2_2-howto.html.
Configurazione Samba 3 con supporto LDAP su Debian Woody. http://www.slag.it/documenti/samba3_ldap_pdc/samba3_ldap_pdc_howto_0.1.0.php.
The Linux Samba-OpenLDAP Howto. http://www.idealx.org/prj/samba/smbldap-howto.en.html.
Smbldap-tools User Manual. http://www.idealx.org/prj/samba/smbldap-tools.en.html.
O Debian é um sistema operacional (SO) livre para seu computador. Um sistema operacional é um conjunto de programas básicos e utilitários que fazem seu computador funcionar. O Debian usa o kernel (núcleo de um sistema operacional), Linux, mas a maior parte das ferramentas do SO vêm do projeto GNU; daí o nome GNU/Linux.
Conjunto de instruções lógicas. Na informática designa um conjunto de instruções lógicas e suas dependências, também conhecido como programa ou sistema de computador.
Esta palavra é pouco usada no Brasil, onde se usa muito a expressão "Software".
Origem: Wikipédia, a enciclopédia livre.
O samba é um ritmo brasileiro, nascido nos morros do Rio de Janeiro, entre os negros ex-escravos e seus descendentes. O primeiro samba gravado, Pelo telefone, de Donga, foi gravado no ano de 1917. Consta que é uma composição coletiva.
Origem: Wikipédia, a enciclopédia livre.