Como impedir que um novo usuário faça algo perigoso?

31

Eu instalei recentemente o servidor Ubuntu no meu servidor para experimentar o linux como um novo usuário. Eu segui um tutorial sobre como configurar o servidor da Web que dizia que eu precisava chmod 777do diretório do servidor da Web para que ele pudesse ser gravado.

Enfim, criei uma nova conta para um cara para permitir que ele visse alguns arquivos no servidor que eu coloquei no diretório principal:

adduser francis

Depois de criar a conta, verifiquei com que acesso ele está.

groups francis

Ele dizia "francis: francis", então não é um problema que eu pensava, o ubuntu não o incluiu em nenhum grupo por padrão, o que faz sentido, ele o criou sem permissões extras em termos de segurança, para que tudo esteja bem e elegante. Uma semana depois, com horror absoluto e absoluto, descobri que, embora ele não pudesse fazer coisas como SUDO ou mexer nos diretórios do sistema, ele tinha acesso total a quase tudo o mais no servidor. Por exemplo, ele tinha acesso total de leitura / gravação aos arquivos do meu servidor da Web em / var / www (e, portanto, senhas armazenadas nos arquivos de configuração php etc), mesmo que esse diretório NÃO esteja no diretório inicial e nunca o adicionei a nenhum grupo que pudesse acessar esse diretório, nem lhe concedi acesso especial a qualquer coisa depois de fazer o adduser.

Enfim, o que está acontecendo aqui? Como eu mato o acesso dele a algo importante? Ele não deve conseguir acessar coisas como / media ou / var / www. Eu achava que, por padrão, os novos usuários eram impedidos de fazer algo perigoso ou bisbilhotar onde não deveriam estar.

Então, resumindo, eu só preciso permitir que ele acesse diretórios que eu especifiquei manualmente + para diretórios que ele precisa para funcionar corretamente (seu diretório home, vim, nano etc.)

Obrigado

Askerman
fonte
30
Você está fazendo o chmod 777 e perguntando por que todo mundo pode ler escrever lá? leia a página man chmod
Anwar
16
Sim, 777 é seu problema, por várias razões.
Android Dev
21
@Askerman - Não, quando você fornece o 777, todos podem acessar tudo , leia isto: linux.com/learn/understanding-linux-file-permissions
Android Dev
11
Todos cometemos erros, principalmente quando aprendemos em um ambiente totalmente novo. É bom aprender com isso, é definitivamente sábio deixar de lado suas noções de como as coisas funcionam no Windows ao usar um sistema operacional baseado em Linux. Depois de reverter suas permissões, observe que o usuário não pode alterar nada do que não deveria. Se você usou em chmodoutro lugar, você pode ter outros problemas.
Arronical
8
Para sua informação, estou votando positivamente nesta questão, porque é realmente uma boa pergunta para as novas pessoas encontrarem. E esse equívoco é provavelmente mais comum do que pensamos. Este também é um bom exemplo de por que você não deve apenas copiar comandos encontrados na internet (mesmo aqui) sem saber o que eles fazem.
Aaron

Respostas:

40

Isto é como projetado. E pior. chmod 777 significa ... "Eu gostaria que o proprietário, qualquer pessoa em seu grupo e qualquer pessoa tivesse permissão de leitura, gravação e execução"

O que é bem terrível.

E para um servidor web, o 777 não é o ideal. 755 (Proprietário tem grupo de permissões completas e outras pessoas têm leitura + execução) é um padrão comum, mas pelo que você disse que deseja pelo menos ler-gravar ou executar leitura-gravação para o proprietário (o usuário do servidor da Web) e talvez o grupo e nenhuma permissão para o usuário. Há perguntas mais completas sobre quais são os níveis de permissões apropriados na falha do servidor, mas considere algo como 640 ou 740.

Dito isso, você também pode colocar o usuário em seu próprio mundinho - configurando o chroot para manter o usuário em seu próprio espaço no sistema. Existem guias por aí para fazer isso - por exemplo, a excelente resposta da oli aqui, que pode ser uma opção, dependendo de suas necessidades.

Journeyman Geek
fonte
4
Ponto secundário: "o proprietário, qualquer pessoa em seu grupo ..." - o proprietário do arquivo não precisa necessariamente pertencer ao grupo de arquivos.
alex_d 27/09/16
2
Agradável. Eu gosto que você se referiu à resposta canônica em falha de serviço.
Elder Geek
3
O jargão histórico para essa situação é " legível / gravável pelo mundo ".
Kaz
19

Essencialmente, ele se divide assim:

R = 4 (read)
W = 2 (write)
X = 1 (execute)

Portanto, as permissões de leitura seriam apenas 4, a leitura e a gravação seriam 6, a leitura e a execução seriam 5 e tudo (leitura, gravação, execução) é 7. É assim que você calcula um valor de octeto de permissão para um proprietário, grupo de proprietários ou todos.

Ao aplicar essas permissões chmoda um local de arquivo ou diretório, os números calculados acima são aplicados assim, com um octeto para proprietário, grupo e todos:

     $ chmod _ _ _ <file or directory>
             | | |
owner--------  | |
owner's group--  |
everyone---------

Portanto, se eu quisesse fornecer a mim e ao meu grupo permissões de leitura, gravação e execução em uma pasta que eu possuía, mas não queria que todos pudessem lê-la, eu usaria:

$ chmod 770 myDirectory

Para mais informações, consulte a página de manual do chmod :

$ man chmod
Aaron
fonte
Se você não se lembra dos bits que foram adicionados para criar as permissões corretas na ordem certa, também pode usar o que é mais fácil de ler chmod ugo+rwx <...>. Os caracteres repousar durante u Ser, g rupo, o terap; r ead, w rito, de e x ecute. Você pode usar '-' para remover (por exemplo chmod go-wx <...>:). Observe que isso apenas adiciona ou remove exatamente o que você digita. chmod ugo+rwx <file>; chmod u+rwx <file> não remove o acesso ao grupo / outro.
ReactiveRaven
@ReactiveRaven Esse é um ótimo ponto. Mas o OP estava obviamente confuso sobre o que chmod 777fez, e foi aí que eu direcionei minha explicação.
Aaron
@Zanna Boa chamada!
Aaron
6

Como outros já mencionaram, você não deve ter permissões definidas para 777

Aqui está uma folha de referência útil que eu uso.

+-----+---+--------------------------+
| rwx | 7 | Read, write and execute  |
| rw- | 6 | Read, write              |
| r-x | 5 | Read, and execute        |
| r-- | 4 | Read,                    |
| -wx | 3 | Write and execute        |
| -w- | 2 | Write                    |
| --x | 1 | Execute                  |
| --- | 0 | no permissions           |
+------------------------------------+
You can use the octal notation, where the three digits correspond to the user, then group, then other. 
Perhaps this might help 
+------------+------+-------+
| Permission | Octal| Field |
+------------+------+-------+
| rwx------  | 700  | User  |
| ---rwx---  | 070  | Group |
| ------rwx  | 007  | Other |
+------------+------+-------+
WhyAyala
fonte
1
Agradável! Esta é uma grande ajuda para pessoas (como eu) que são aprendizes visuais.
Aaron
3

Para compartilhar arquivos com uma pessoa para quem você fez login, você não precisa fazer nada em particular. Em uma instalação padrão do Debian, os usuários têm acesso aos diretórios pessoais uns dos outros.

Por exemplo,

$ ls -ld ~
drwxr-xr-x 65 zwets zwets 4096 Sep 29 12:06 /home/zwets

As permissões no meu diretório pessoal são de leitura (r) e acesso (x) para qualquer usuário no meu sistema. Além disso, só tenho acesso de gravação (w) .

Além disso, o padrão umaskno Ubuntu é tal que os arquivos e diretórios criados pelos usuários são legíveis mundialmente por padrão . Você pode definir umaskcomo 077se não quiser isso.

O que isso significa que, em uma configuração padrão, se o usuário youdeseja compartilhar um documento ~/README.txtcomigo, não há nada youa fazer. Eu posso simplesmente vê-lo:

$ who am i
zwets    pts/26       2016-09-29 08:05 (:pts/19:S.6)
$ ls -l ~you/README.txt
-rw-r--r-- 1 you you 24 Sep  8 11:23 /home/you/README.txt
$ cat ~you/README.txt
You's shared thoughts.

Não consigo editar ou remover o arquivo, mas posso copiá-lo para um local onde tenho permissão de gravação. Então eu possuo a cópia:

$ echo "Adding my thoughts." >> ~you/README.txt
bash: /home/you/README.txt: Permission denied
$ rm ~you/README.txt
rm: remove write-protected regular file '/home/you/README.txt'? yeah!
rm: cannot remove '/home/you/README.txt': Permission denied
$ cp ~you/README.txt ~zwets
$ ls -l ~/README.txt
-rw-r--r-- 1 zwets zwets 24 Sep  29 14:09 /home/zwets/README.txt

Existem boas razões pelas quais a maior parte do sistema é legível mundialmente por padrão, como expliquei em outra resposta no AskUbuntu . No entanto, em um sistema compartilhado, pode fazer sentido tornar os diretórios pessoais inacessíveis a não proprietários:

$ chmod o-rwx ~
$ ls -l ~
drwxr-x--- 65 zwets zwets 4096 Sep 29 12:06 /home/zwets

... como muitos usuários aparentemente não estão cientes do padrão - QED ;-). Seria mais sensato conscientizar os usuários de que as permissões de arquivo não protegem segredos.

zwets
fonte
1

No Ubuntu, qualquer usuário tem privilégio de superusuário adicionado ao grupo 'sudo'. Verifique se nenhum outro usuário foi adicionado a este grupo.

Para proteger seus arquivos e diretórios de outros usuários, você pode definir a permissão, conforme sugerido pelo Sr. Journeyman Geek na resposta acima.

Você também pode usar permissões especiais para proteger seus arquivos e diretórios de outras pessoas.

Puneet Dixit
fonte