[Case1] Ao copiar o arquivo do servidor (no cliente) para o cliente, os pacotes são marcados como incorretos com 3 (raiz).
[Case2] Ao copiar o arquivo do servidor (estando no servidor) para o cliente, os pacotes são marcados como corretos com 1003 (teste1).
Servidor ip 192.168.0.16, test1 é o usuário do servidor.
Cliente ip 192.168.0.10, cliente é usuário cliente.
[Caso 1]
[email protected]:~$ scp -P 22 [email protected]:/home/test1/archlinux-bootstrap-2016.03.01-x86_64.tar.gz /tmp/
ps
verifique, ao copiar:
[email protected]:~$ ps aux | grep scp
root 1653 0.1 0.0 32668 4408 ? Ss 19:31 0:00 \_ sshd: test1 [priv]
test1 1655 3.0 0.0 36104 6912 ? S 19:31 0:00 \_ sshd: test1@notty
test1 1656 1.3 0.0 27516 2648 ? Ss 19:31 0:00 \_ scp -f /home/test1/archlinux-bootstrap-2016.03.01-x86_64.tar.gz
bmon [a classe 1:3 é um usuário root] [a classe 1:1003 é um usuário test1]
imq0 (outgoing) │ 1.17MiB 818 │ 1.12MiB 781
qdisc 1: (htb) │ 0 0 │ 1.12MiB 781
cls :3 (fw) │ 0 0 │ 0 0
cls :3eb (fw) │ 0 0 │ 0 0
class 1:1 (htb) │ 0 0 │ 1.12MiB 781 99%
class 1:2 (htb) │ 0 0 │ 430B 1 0%
class 1:3 (htb) │ 0 0 │ 1.12MiB 780 208%
class 1:1003 (htb) │ 0 0 │ 0 0 0%
class 1:5 (htb) │ 0 0 │ 0 0 0%
class 1:6 (htb) │ 0 0 │ 0 0 0%
[Caso2]
[email protected]:~$ scp -P 22 archlinux-bootstrap-2016.03.01-x86_64.tar.gz [email protected]:~/
ps
verifique, ao copiar:
[email protected]:~$ ps aux | grep scp
root 1637 0.0 0.0 32668 4400 ? Ss 19:29 0:00 \_ sshd: test1 [priv]
test1 1639 0.0 0.0 32668 3240 ? S 19:30 0:00 \_ sshd: test1@pts/3
test1 1640 0.0 0.0 20540 3296 pts/3 Ss 19:30 0:00 \_ -bash
test1 1650 0.0 0.0 27516 2640 pts/3 S+ 19:30 0:00 \_ scp -P 22 archlinux-bootstrap-2016.03.01-x86_64.tar.gz [email protected]:~/
test1 1651 0.0 0.0 30636 6748 pts/3 S+ 19:30 0:00 \_ /usr/bin/ssh -x -oForwardAgent=no -oPermitLocalCommand=no -oClearAllForwardings=yes -p 22 -l
bmon [a classe 1:3 é um usuário root] [a classe 1:1003 é um usuário test1]
imq0 │ 142.83KiB 103 │ 98.50KiB 68
qdisc 1: (htb) │ 0 0 │ 98.50KiB 68
cls :3eb (fw) │ 0 0 │ 0 0
cls :3 (fw) │ 0 0 │ 0 0
class 1:1 (htb) │ 0 0 │ 98.50KiB 68 1%
class 1:2 (htb) │ 0 0 │ 533B 2 0%
class 1:3 (htb) │ 0 0 │ 0 0 0%
class 1:1003 (htb) │ 0 0 │ 97.97KiB 66 100%
class 1:5 (htb) │ 0 0 │ 0 0 0%
Regras do Iptables:
# IN
iptables -t mangle -A PREROUTING -i eth0 -j IMQ --todev 1
iptables -t mangle -A PREROUTING -j CONNMARK --restore-mark
# OUT
iptables -t mangle -N IMQ-OUT
iptables -t mangle -A POSTROUTING -o eth0 -j IMQ-OUT
iptables -t mangle -A IMQ-OUT -o eth0 -m owner --uid-owner root -j MARK --set-mark 3
iptables -t mangle -A IMQ-OUT -o eth0 -m owner --uid-owner root -j RETURN
iptables -t mangle -A IMQ-OUT -o eth0 -m owner --uid-owner test1 -j MARK --set-mark 1003
iptables -t mangle -A IMQ-OUT -o eth0 -m owner --uid-owner test1 -j RETURN
iptables -t mangle -A POSTROUTING -j CONNMARK --save-mark
iptables -t mangle -A POSTROUTING -o eth0 -j IMQ --todev 0
Alguém poderia me explicar por que no servidor [Case1] pensa que a conexão de saída é a conexão raiz, mesmo que ps
mostre o usuário test1?
No momento, estou tentando usar o cgroup para moldar o tráfego, por usuário.
Mesma situação com cgroup.
echo '1003' > /cgroup/cpu_mem_blkio/users/test1/net_cls.classid
iptables -t mangle -A IMQ-OUT -o eth0 -m cgroup --cgroup 1003 -j MARK --set-mark 1003
Em [Case1], o socket que se conecta
sshd
ao cliente durante a transferência do arquivo não pertence aoscp
processo. Em vez disso, ele pertence a umsshd
processo que pertence ao root.3
Assim, prevalece a regra que define a marca .Veja meu exemplo. Primeiro, inicio uma tarefa de cópia do cliente:
Então, eu descubro no servidor quais processos e soquetes estão relacionados à cópia.
Observe que:
lsof
mostra que o processo que lê o/tmp/virtualbox-machine.vdi
arquivo é umscp
processo cujo PID é12107
e o proprietário é1000
.netstat
mostra que o socket que envia os dados do arquivo para o cliente remoto é umsshd
processo cujo PID é12089
e dono é0
.Ambos os processos provavelmente estão trocando dados por meio de pipes anônimos.