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

31

Eu recentemente instalei o servidor Ubuntu no meu servidor para testar o Linux como um novo usuário. Eu segui um tutorial sobre como configurar o servidor web que dizia que eu precisava chmod 777 do diretório do servidor web para que ele pudesse ser escrito em.

De qualquer forma, criei uma nova conta para um cara para permitir que ele veja alguns arquivos no servidor que coloquei em seu diretório inicial:

adduser francis

Depois de criar a conta, verifiquei o acesso que ele tem com

groups francis

Ele disse "francis: francis", então não é um problema que eu pensei, o Ubuntu não o incluiu em nenhum grupo por padrão, o que faz sentido, ele criou sem permissões extras de segurança, então está tudo bem e dândi. Uma semana depois, em absoluto e absoluto horror, descobri que mesmo que ele não pudesse fazer coisas como SUDO ou mexer nos diretórios do sistema, ele tinha acesso total a quase todo o resto do servidor. Por exemplo, ele tinha acesso total de leitura / gravação aos arquivos do servidor web em / var / www (e, portanto, senhas armazenadas em arquivos PHP, etc), embora esse diretório NÃO esteja em seu diretório pessoal e eu nunca o inclua em nenhum grupo que possa acessar esse diretório, nem eu concedeu-lhe qualquer acesso especial a qualquer coisa depois de fazer o adduser.

Enfim, o que está acontecendo aqui? Como faço para matar o acesso dele a algo importante? Ele não deve poder acessar coisas como / media ou / var / www. Eu pensei que os novos usuários eram, por padrão, impedidos de fazer qualquer coisa perigosa ou bisbilhotar onde não deveriam estar.

Então, a soma, eu só preciso permitir-lhe o acesso aos diretórios que eu especificar manualmente + para diretórios que ele precisa para funcionar corretamente (sua home dir, vim, nano etc.)

Obrigado

    
por Askerman 27.09.2016 / 16:33

5 respostas

41

Isso é como projetado. E pior. chmod 777 significa ... "Eu gostaria que o dono, qualquer um em seu grupo, e qualquer pessoa, lesse, escrevesse e executasse permissões"

O que é bem terrível.

E para um servidor da Web, o 777 não é ideal. 755 (Proprietário possui grupo de permissões completo e outros leram + executar) é um padrão comum mas do que você disse que deseja pelo menos leitura / gravação ou leitura / gravação para o proprietário (o usuário do servidor web), e talvez o grupo, e sem permissões para o usuário. Há perguntas mais completas sobre os níveis de permissão apropriados em serverfault mas considere algo como 640 ou 740.

Dito isto, 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. Há guias por aí para fazer isso - por exemplo, excelente resposta do oli aqui , que pode ser uma opção dependendo de suas necessidades.

    
por Journeyman Geek 27.09.2016 / 17:12
19

Essencialmente, ele se divide assim:

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

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

Ao aplicar essas permissões com chmod a um arquivo ou local de 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---------

Então, se eu quisesse que eu e meu grupo lesse, escrevesse e executasse permissões para uma pasta que possuía, mas eu não queria que todos pudessem lê-la, d use:

$ chmod 770 myDirectory

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

$ man chmod
    
por Aaron 27.09.2016 / 17:42
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 |
+------------+------+-------+
    
por WhyAyala 28.09.2016 / 19:33
3

Para compartilhar arquivos com uma pessoa para quem você fez login, não é necessário fazer nada em particular. Em uma instalação Debian padrão, 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 read (r) e acesso (x) para qualquer usuário no meu sistema. Só eu adicionalmente tenho acesso write (w) .

Além disso, o padrão umask no Ubuntu é tal que os arquivos e diretórios que os usuários criam são de fácil leitura por padrão . Você poderia definir o umask para 077 se não quisesse isso.

O que isso significa que, em uma configuração padrão, se o usuário you quiser compartilhar o documento ~/README.txt comigo, não haverá nada que you precise fazer. Eu posso simplesmente visualizá-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 em que possuo 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 maioria do sistema é legível por padrão, como eu expliquei em outra resposta no AskUbuntu . No entanto, em um sistema compartilhado, pode fazer sentido tornar os diretórios pessoais inacessíveis aos 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 sábio, entretanto, conscientizar os usuários de que as permissões de arquivos não protegem segredos.

    
por zwets 29.09.2016 / 13:52
1

No Ubuntu, qualquer usuário tem privilégios de superusuário que são adicionados no grupo 'sudo'. Por favor, verifique se nenhum outro usuário foi adicionado a este grupo.

Para proteger seus arquivos e diretório de outros usuários, você pode definir a permissão sugerida 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.

    
por Puneet Dixit 28.09.2016 / 09:43