No meu /etc/passwdarquivo, posso ver que o www-datausuário usado pelo Apache, assim como todos os tipos de usuários do sistema, tem um /usr/sbin/nologinou /bin/falsecomo seu shell de login. Por exemplo, aqui está uma seleção de linhas:
daemon:x:1:1:daemon:/usr/sbin:/usr/sbin/nologin bin:x:2:2:bin:/bin:/usr/sbin/nologin sys:x:3:3:sys:/dev:/usr/sbin/nologin games:x:5:60:games:/usr/games:/usr/sbin/nologin www-data:x:33:33:www-data:/var/www:/usr/sbin/nologin syslog:x:101:104::/home/syslog:/bin/false whoopsie:x:109:116::/nonexistent:/bin/false mark:x:1000:1000:mark,,,:/home/mark:/bin/bash
Conseqüentemente, se eu tentar trocar para qualquer um desses usuários (o que às vezes eu gostaria de fazer para verificar meu entendimento de suas permissões e quais provavelmente existem outras razões pelo menos pela metade), falho:
mark@lunchbox:~$ sudo su www-data
This account is currently not available.
mark@lunchbox:~$ sudo su syslog
mark@lunchbox:~$
Obviamente, isso não é muito inconveniente, porque ainda posso iniciar um shell para eles através de um método como este:
mark@lunchbox:~$ sudo -u www-data /bin/bash
www-data@lunchbox:~$
Mas isso me deixa pensando em que objetivo é servido negar a esses usuários um shell de login. Procurando uma explicação na Internet, muitas pessoas afirmam que isso tem algo a ver com segurança, e todos parecem concordar que seria de alguma forma uma má idéia alterar as conchas de login desses usuários. Aqui está uma coleção de citações:
Definir o shell do usuário do Apache para algo não interativo geralmente é uma boa prática de segurança (na verdade, todos os usuários do serviço que não precisam fazer logon interativamente devem ter seu shell definido como algo não interativo).
- https://serverfault.com/a/559315/147556
o shell para o usuário www-data está definido como / usr / sbin / nologin e está definido por uma boa razão.
- https://askubuntu.com/a/486661/119754
[contas do sistema] podem ser falhas de segurança , especialmente se eles tiverem um shell ativado:
Ruim
bin:x:1:1:bin:/bin:/bin/shBoa
bin:x:1:1:bin:/bin:/sbin/nologin
- https://unix.stackexchange.com/a/78996/29001
Por motivos de segurança, criei uma conta de usuário sem shell de login para executar o servidor Tomcat:
# groupadd tomcat # useradd -g tomcat -s /usr/sbin/nologin -m -d /home/tomcat tomcat
- http://www.puschitz.com/InstallingTomcat.html
Embora essas postagens estejam em acordo unânime de que não fornecer shell de logon reais aos usuários do sistema é bom para segurança, nenhum deles justifica essa reivindicação e não consigo encontrar uma explicação sobre isso em nenhum lugar.
Contra qual ataque estamos tentando nos proteger, não fornecendo a esses usuários informações reais sobre o login?