Comando para rastrear o servidor rsh para verificar o comportamento de determinada chamada do sistema

3

Estou trabalhando com rsh . Eu quero verificar todo o processo do começo ao fim. Para isso usei strace .

O nome é CentOS. Eu estou trabalhando em uma única máquina, servidor e cliente estão na mesma máquina.

Meu comando é rsh localhost ulimit -n

Para traçar, usei strace rsh localhost ulimit -n .

Eu li todos os arquivos que estão abertos durante a execução do comando acima. Mas eu quero rastrear como o servidor rsh define o limite de ulimit -n , porque todos os comandos em rsh são executados pelo daemon rsh.

A chamada do sistema que estou procurando é, setrlimit , mas ela não exibiu essa chamada do sistema usando strace rsh localhost ulimit -n .

Para isso eu tenho que rastrear o servidor rsh, ou seja, o daemon rsh. Mas eu não sei como faço essa tarefa.

Por favor, me diga o comando e suas explicações também.

Eu sei que o rsh não é usado no cenário atual, mas meu projeto está usando isso, então por favor não diga, o rsh não é bom. Eu conheço todas essas coisas.

Editar nº 1

$ sudo lsof -i :514


COMMAND  PID USER    FD   TYPE DEVICE SIZE  NODE  NAME
syslogd 2210 root    9u  IPv4   6259       UDP *:syslog
xinetd  2658 root    8u  IPv4   8745       TCP *:shell (LISTEN)

e, /etc/xinetd.d , não contém rshd, contém rsh, rexec, rlogin, rsync, etc.

Editar não 2 [relacionado ao comentário de Chris Down]

rsh localhost strace -o log_new bash -c 'ulimit -n'

Ele dá uma resposta diferente que dá quando eu corro strace rsh localhost ulimit -n

execve("/bin/bash", ["bash", "-c", "ulimit", "-n"], [/* 15 vars */]) = 0
brk(0)                                  = 0x13e86000
mmap(NULL, 4096, PROT_READ|PROT_WRITE, MAP_PRIVATE|MAP_ANONYMOUS, -1, 0) = 0x2af7bbab2000
uname({sys="Linux", node="jhamb.XXX.XXX", ...}) = 0
access("/etc/ld.so.preload", R_OK)      = -1 ENOENT (No such file or directory)
open("/etc/ld.so.cache", O_RDONLY)      = 3
fstat(3, {st_mode=S_IFREG|0644, st_size=57641, ...}) = 0
mmap(NULL, 57641, PROT_READ, MAP_PRIVATE, 3, 0) = 0x2af7bbab3000
close(3)                                = 0
open("/lib64/libtermcap.so.2", O_RDONLY) = 3
read(3, "7ELF
# grep -e ulimit -e setrlimit rsh.strace.



rsh.strace.31472:14:22:42.966361 setrlimit(RLIMIT_NOFILE, {rlim_cur=1024, rlim_max=1024}) = 0
rsh.strace.31474:14:22:43.085822 execve("/bin/bash", ["bash", "-c", "ulimit -n"], [/* 4 vars */]) = 0
rsh.strace.31474:14:22:43.546754 setrlimit(RLIMIT_CORE, {rlim_cur=RLIM_INFINITY, rlim_max=RLIM_INFINITY}) = 0
*                soft    core            unlimited
*                hard    core            unlimited
@service          hard    nofile          13000
@service          soft    nofile          13000
*                soft    nofile          12000
*                hard    nofile          12000
$ sudo lsof -i :514


COMMAND  PID USER    FD   TYPE DEVICE SIZE  NODE  NAME
syslogd 2210 root    9u  IPv4   6259       UDP *:syslog
xinetd  2658 root    8u  IPv4   8745       TCP *:shell (LISTEN)
rsh localhost strace -o log_new bash -c 'ulimit -n'
execve("/bin/bash", ["bash", "-c", "ulimit", "-n"], [/* 15 vars */]) = 0
brk(0)                                  = 0x13e86000
mmap(NULL, 4096, PROT_READ|PROT_WRITE, MAP_PRIVATE|MAP_ANONYMOUS, -1, 0) = 0x2af7bbab2000
uname({sys="Linux", node="jhamb.XXX.XXX", ...}) = 0
access("/etc/ld.so.preload", R_OK)      = -1 ENOENT (No such file or directory)
open("/etc/ld.so.cache", O_RDONLY)      = 3
fstat(3, {st_mode=S_IFREG|0644, st_size=57641, ...}) = 0
mmap(NULL, 57641, PROT_READ, MAP_PRIVATE, 3, 0) = 0x2af7bbab3000
close(3)                                = 0
open("/lib64/libtermcap.so.2", O_RDONLY) = 3
read(3, "7ELF
# grep -e ulimit -e setrlimit rsh.strace.



rsh.strace.31472:14:22:42.966361 setrlimit(RLIMIT_NOFILE, {rlim_cur=1024, rlim_max=1024}) = 0
rsh.strace.31474:14:22:43.085822 execve("/bin/bash", ["bash", "-c", "ulimit -n"], [/* 4 vars */]) = 0
rsh.strace.31474:14:22:43.546754 setrlimit(RLIMIT_CORE, {rlim_cur=RLIM_INFINITY, rlim_max=RLIM_INFINITY}) = 0
*                soft    core            unlimited
*                hard    core            unlimited
@service          hard    nofile          13000
@service          soft    nofile          13000
*                soft    nofile          12000
*                hard    nofile          12000
%pre%%pre%%pre%%pre%%pre%%pre%%pre%%pre%>%pre%%pre%%pre%%pre%@0T4%pre%%pre%%pre%"..., 832) = 832 fstat(3, {st_mode=S_IFREG|0755, st_size=15584, ...}) = 0 mmap(NULL, 4096, PROT_READ|PROT_WRITE, MAP_PRIVATE|MAP_ANONYMOUS, -1, 0) = 0x2af7bbac2000 mmap(0x3454c00000, 2108688, PROT_READ|PROT_EXEC, MAP_PRIVATE|MAP_DENYWRITE, 3, 0) = 0x3454c00000 mprotect(0x3454c03000, 2093056, PROT_NONE) = 0 mmap(0x3454e02000, 4096, PROT_READ|PROT_WRITE, MAP_PRIVATE|MAP_FIXED|MAP_DENYWRITE, 3, 0x2000) = 0x3454e02000 close(3) = 0 open("/lib64/libdl.so.2", O_RDONLY) = 3 read(3, "7ELF%pre%%pre%%pre%%pre%%pre%%pre%%pre%%pre%%pre%%pre%>%pre%%pre%%pre%%pre%@T4%pre%%pre%%pre%"..., 832) = 832 fstat(3, {st_mode=S_IFREG|0755, st_size=23360, ...}) = 0 mmap(0x3454400000, 2109696, PROT_READ|PROT_EXEC, MAP_PRIVATE|MAP_DENYWRITE, 3, 0) = 0x3454400000 mprotect(0x3454402000, 2097152, PROT_NONE) = 0 mmap(0x3454602000, 8192, PROT_READ|PROT_WRITE, MAP_PRIVATE|MAP_FIXED|MAP_DENYWRITE, 3, 0x2000) = 0x3454602000 close(3) = 0 open("/lib64/libc.so.6", O_RDONLY) = 3 read(3, "7ELF%pre%%pre%%pre%%pre%%pre%%pre%%pre%%pre%%pre%%pre%>%pre%%pre%%pre%%pre%02T4%pre%%pre%%pre%"..., 832) = 832 fstat(3, {st_mode=S_IFREG|0755, st_size=1726320, ...}) = 0 mmap(0x3454000000, 3506520, PROT_READ|PROT_EXEC, MAP_PRIVATE|MAP_DENYWRITE, 3, 0) = 0x3454000000 mprotect(0x345414f000, 2097152, PROT_NONE) = 0 mmap(0x345434f000, 20480, PROT_READ|PROT_WRITE, MAP_PRIVATE|MAP_FIXED|MAP_DENYWRITE, 3, 0x14f000) = 0x345434f000 mmap(0x3454354000, 16728, PROT_READ|PROT_WRITE, MAP_PRIVATE|MAP_FIXED|MAP_ANONYMOUS, -1, 0) = 0x3454354000 close(3) = 0 mmap(NULL, 4096, PROT_READ|PROT_WRITE, MAP_PRIVATE|MAP_ANONYMOUS, -1, 0) = 0x2af7bbac3000 mmap(NULL, 4096, PROT_READ|PROT_WRITE, MAP_PRIVATE|MAP_ANONYMOUS, -1, 0) = 0x2af7bbac4000 arch_prctl(ARCH_SET_FS, 0x2af7bbac3dd0) = 0 mprotect(0x3454602000, 4096, PROT_READ) = 0 mprotect(0x345434f000, 16384, PROT_READ) = 0 mprotect(0x3453e1c000, 4096, PROT_READ) = 0 munmap(0x2af7bbab3000, 57641) = 0 rt_sigprocmask(SIG_BLOCK, NULL, [], 8) = 0 open("/dev/tty", O_RDWR|O_NONBLOCK) = -1 ENXIO (No such device or address) ioctl(0, SNDCTL_TMR_TIMEBASE or TCGETS, 0x7fffb504cb00) = -1 EINVAL (Invalid argument) brk(0) = 0x13e86000 brk(0x13ea7000) = 0x13ea7000 getuid() = 500 getgid() = 500 geteuid() = 500 getegid() = 500 rt_sigprocmask(SIG_BLOCK, NULL, [], 8) = 0 open("/proc/meminfo", O_RDONLY) = 3 fstat(3, {st_mode=S_IFREG|0444, st_size=0, ...}) = 0 mmap(NULL, 4096, PROT_READ|PROT_WRITE, MAP_PRIVATE|MAP_ANONYMOUS, -1, 0) = 0x2af7bbab3000 read(3, "MemTotal: 3920228 kB\nMemFre"..., 4096) = 777 close(3) = 0 munmap(0x2af7bbab3000, 4096) = 0 rt_sigaction(SIGCHLD, {SIG_DFL, [], SA_RESTORER, 0x3454030330}, {SIG_DFL, [], 0}, 8) = 0 rt_sigaction(SIGCHLD, {SIG_DFL, [], SA_RESTORER, 0x3454030330}, {SIG_DFL, [], SA_RESTORER, 0x3454030330}, 8) = 0 rt_sigaction(SIGINT, {SIG_DFL, [], SA_RESTORER, 0x3454030330}, {SIG_DFL, [], 0}, 8) = 0 rt_sigaction(SIGINT, {SIG_DFL, [], SA_RESTORER, 0x3454030330}, {SIG_DFL, [], SA_RESTORER, 0x3454030330}, 8) = 0 rt_sigaction(SIGQUIT, {SIG_DFL, [], SA_RESTORER, 0x3454030330}, {SIG_DFL, [], 0}, 8) = 0 rt_sigaction(SIGQUIT, {SIG_DFL, [], SA_RESTORER, 0x3454030330}, {SIG_DFL, [], SA_RESTORER, 0x3454030330}, 8) = 0 rt_sigprocmask(SIG_BLOCK, NULL, [], 8) = 0 rt_sigaction(SIGQUIT, {0x1, [], SA_RESTORER, 0x3454030330}, {SIG_DFL, [], SA_RESTORER, 0x3454030330}, 8) = 0 uname({sys="Linux", node="jhamb.XXX.XXX", ...}) = 0 stat("/home/service", {st_mode=S_IFDIR|0700, st_size=4096, ...}) = 0 stat(".", {st_mode=S_IFDIR|0700, st_size=4096, ...}) = 0 getpid() = 30873 getppid() = 30829 stat(".", {st_mode=S_IFDIR|0700, st_size=4096, ...}) = 0 stat("/home/service/bin/bash", 0x7fffb504cab0) = -1 ENOENT (No such file or directory) stat("/usr/local/sbin/bash", 0x7fffb504cab0) = -1 ENOENT (No such file or directory) stat("/usr/local/bin/bash", 0x7fffb504cab0) = -1 ENOENT (No such file or directory) stat("/usr/sbin/bash", 0x7fffb504cab0) = -1 ENOENT (No such file or directory) stat("/sbin/bash", 0x7fffb504cab0) = -1 ENOENT (No such file or directory) stat("/usr/kerberos/bin/bash", 0x7fffb504cab0) = -1 ENOENT (No such file or directory) stat("/usr/bin/bash", 0x7fffb504cab0) = -1 ENOENT (No such file or directory) stat("/bin/bash", {st_mode=S_IFREG|0755, st_size=801512, ...}) = 0 access("/bin/bash", X_OK) = 0 access("/bin/bash", R_OK) = 0 stat("/bin/bash", {st_mode=S_IFREG|0755, st_size=801512, ...}) = 0 access("/bin/bash", X_OK) = 0 access("/bin/bash", R_OK) = 0 getpgrp() = 30829 rt_sigaction(SIGCHLD, {0x436080, [], SA_RESTORER, 0x3454030330}, {SIG_DFL, [], SA_RESTORER, 0x3454030330}, 8) = 0 rt_sigprocmask(SIG_BLOCK, NULL, [], 8) = 0 getpeername(0, {sa_family=AF_INET, sin_port=htons(61000), sin_addr=inet_addr("127.0.0.1")}, [5255137823777882128]) = 0 rt_sigprocmask(SIG_BLOCK, NULL, [], 8) = 0 rt_sigprocmask(SIG_BLOCK, NULL, [], 8) = 0 getrlimit(RLIMIT_FSIZE, {rlim_cur=RLIM_INFINITY, rlim_max=RLIM_INFINITY}) = 0 fstat(1, {st_mode=S_IFSOCK|0777, st_size=0, ...}) = 0 mmap(NULL, 4096, PROT_READ|PROT_WRITE, MAP_PRIVATE|MAP_ANONYMOUS, -1, 0) = 0x2af7bbab3000 write(1, "unlimited\n", 10) = 10 exit_group(0) = ?
%pre%%pre%%pre%%pre%%pre%>%pre%%pre%%pre%%pre%@0T4%pre%%pre%%pre%"..., 832) = 832 fstat(3, {st_mode=S_IFREG|0755, st_size=15584, ...}) = 0 mmap(NULL, 4096, PROT_READ|PROT_WRITE, MAP_PRIVATE|MAP_ANONYMOUS, -1, 0) = 0x2af7bbac2000 mmap(0x3454c00000, 2108688, PROT_READ|PROT_EXEC, MAP_PRIVATE|MAP_DENYWRITE, 3, 0) = 0x3454c00000 mprotect(0x3454c03000, 2093056, PROT_NONE) = 0 mmap(0x3454e02000, 4096, PROT_READ|PROT_WRITE, MAP_PRIVATE|MAP_FIXED|MAP_DENYWRITE, 3, 0x2000) = 0x3454e02000 close(3) = 0 open("/lib64/libdl.so.2", O_RDONLY) = 3 read(3, "7ELF%pre%%pre%%pre%%pre%%pre%%pre%%pre%%pre%%pre%%pre%>%pre%%pre%%pre%%pre%@T4%pre%%pre%%pre%"..., 832) = 832 fstat(3, {st_mode=S_IFREG|0755, st_size=23360, ...}) = 0 mmap(0x3454400000, 2109696, PROT_READ|PROT_EXEC, MAP_PRIVATE|MAP_DENYWRITE, 3, 0) = 0x3454400000 mprotect(0x3454402000, 2097152, PROT_NONE) = 0 mmap(0x3454602000, 8192, PROT_READ|PROT_WRITE, MAP_PRIVATE|MAP_FIXED|MAP_DENYWRITE, 3, 0x2000) = 0x3454602000 close(3) = 0 open("/lib64/libc.so.6", O_RDONLY) = 3 read(3, "7ELF%pre%%pre%%pre%%pre%%pre%%pre%%pre%%pre%%pre%%pre%>%pre%%pre%%pre%%pre%02T4%pre%%pre%%pre%"..., 832) = 832 fstat(3, {st_mode=S_IFREG|0755, st_size=1726320, ...}) = 0 mmap(0x3454000000, 3506520, PROT_READ|PROT_EXEC, MAP_PRIVATE|MAP_DENYWRITE, 3, 0) = 0x3454000000 mprotect(0x345414f000, 2097152, PROT_NONE) = 0 mmap(0x345434f000, 20480, PROT_READ|PROT_WRITE, MAP_PRIVATE|MAP_FIXED|MAP_DENYWRITE, 3, 0x14f000) = 0x345434f000 mmap(0x3454354000, 16728, PROT_READ|PROT_WRITE, MAP_PRIVATE|MAP_FIXED|MAP_ANONYMOUS, -1, 0) = 0x3454354000 close(3) = 0 mmap(NULL, 4096, PROT_READ|PROT_WRITE, MAP_PRIVATE|MAP_ANONYMOUS, -1, 0) = 0x2af7bbac3000 mmap(NULL, 4096, PROT_READ|PROT_WRITE, MAP_PRIVATE|MAP_ANONYMOUS, -1, 0) = 0x2af7bbac4000 arch_prctl(ARCH_SET_FS, 0x2af7bbac3dd0) = 0 mprotect(0x3454602000, 4096, PROT_READ) = 0 mprotect(0x345434f000, 16384, PROT_READ) = 0 mprotect(0x3453e1c000, 4096, PROT_READ) = 0 munmap(0x2af7bbab3000, 57641) = 0 rt_sigprocmask(SIG_BLOCK, NULL, [], 8) = 0 open("/dev/tty", O_RDWR|O_NONBLOCK) = -1 ENXIO (No such device or address) ioctl(0, SNDCTL_TMR_TIMEBASE or TCGETS, 0x7fffb504cb00) = -1 EINVAL (Invalid argument) brk(0) = 0x13e86000 brk(0x13ea7000) = 0x13ea7000 getuid() = 500 getgid() = 500 geteuid() = 500 getegid() = 500 rt_sigprocmask(SIG_BLOCK, NULL, [], 8) = 0 open("/proc/meminfo", O_RDONLY) = 3 fstat(3, {st_mode=S_IFREG|0444, st_size=0, ...}) = 0 mmap(NULL, 4096, PROT_READ|PROT_WRITE, MAP_PRIVATE|MAP_ANONYMOUS, -1, 0) = 0x2af7bbab3000 read(3, "MemTotal: 3920228 kB\nMemFre"..., 4096) = 777 close(3) = 0 munmap(0x2af7bbab3000, 4096) = 0 rt_sigaction(SIGCHLD, {SIG_DFL, [], SA_RESTORER, 0x3454030330}, {SIG_DFL, [], 0}, 8) = 0 rt_sigaction(SIGCHLD, {SIG_DFL, [], SA_RESTORER, 0x3454030330}, {SIG_DFL, [], SA_RESTORER, 0x3454030330}, 8) = 0 rt_sigaction(SIGINT, {SIG_DFL, [], SA_RESTORER, 0x3454030330}, {SIG_DFL, [], 0}, 8) = 0 rt_sigaction(SIGINT, {SIG_DFL, [], SA_RESTORER, 0x3454030330}, {SIG_DFL, [], SA_RESTORER, 0x3454030330}, 8) = 0 rt_sigaction(SIGQUIT, {SIG_DFL, [], SA_RESTORER, 0x3454030330}, {SIG_DFL, [], 0}, 8) = 0 rt_sigaction(SIGQUIT, {SIG_DFL, [], SA_RESTORER, 0x3454030330}, {SIG_DFL, [], SA_RESTORER, 0x3454030330}, 8) = 0 rt_sigprocmask(SIG_BLOCK, NULL, [], 8) = 0 rt_sigaction(SIGQUIT, {0x1, [], SA_RESTORER, 0x3454030330}, {SIG_DFL, [], SA_RESTORER, 0x3454030330}, 8) = 0 uname({sys="Linux", node="jhamb.XXX.XXX", ...}) = 0 stat("/home/service", {st_mode=S_IFDIR|0700, st_size=4096, ...}) = 0 stat(".", {st_mode=S_IFDIR|0700, st_size=4096, ...}) = 0 getpid() = 30873 getppid() = 30829 stat(".", {st_mode=S_IFDIR|0700, st_size=4096, ...}) = 0 stat("/home/service/bin/bash", 0x7fffb504cab0) = -1 ENOENT (No such file or directory) stat("/usr/local/sbin/bash", 0x7fffb504cab0) = -1 ENOENT (No such file or directory) stat("/usr/local/bin/bash", 0x7fffb504cab0) = -1 ENOENT (No such file or directory) stat("/usr/sbin/bash", 0x7fffb504cab0) = -1 ENOENT (No such file or directory) stat("/sbin/bash", 0x7fffb504cab0) = -1 ENOENT (No such file or directory) stat("/usr/kerberos/bin/bash", 0x7fffb504cab0) = -1 ENOENT (No such file or directory) stat("/usr/bin/bash", 0x7fffb504cab0) = -1 ENOENT (No such file or directory) stat("/bin/bash", {st_mode=S_IFREG|0755, st_size=801512, ...}) = 0 access("/bin/bash", X_OK) = 0 access("/bin/bash", R_OK) = 0 stat("/bin/bash", {st_mode=S_IFREG|0755, st_size=801512, ...}) = 0 access("/bin/bash", X_OK) = 0 access("/bin/bash", R_OK) = 0 getpgrp() = 30829 rt_sigaction(SIGCHLD, {0x436080, [], SA_RESTORER, 0x3454030330}, {SIG_DFL, [], SA_RESTORER, 0x3454030330}, 8) = 0 rt_sigprocmask(SIG_BLOCK, NULL, [], 8) = 0 getpeername(0, {sa_family=AF_INET, sin_port=htons(61000), sin_addr=inet_addr("127.0.0.1")}, [5255137823777882128]) = 0 rt_sigprocmask(SIG_BLOCK, NULL, [], 8) = 0 rt_sigprocmask(SIG_BLOCK, NULL, [], 8) = 0 getrlimit(RLIMIT_FSIZE, {rlim_cur=RLIM_INFINITY, rlim_max=RLIM_INFINITY}) = 0 fstat(1, {st_mode=S_IFSOCK|0777, st_size=0, ...}) = 0 mmap(NULL, 4096, PROT_READ|PROT_WRITE, MAP_PRIVATE|MAP_ANONYMOUS, -1, 0) = 0x2af7bbab3000 write(1, "unlimited\n", 10) = 10 exit_group(0) = ?

Editar No.3

%pre%

Editar nº 4: /etc/security/limits.conf com comentários removidos

%pre%     
por devsda 19.03.2013 / 08:07

3 respostas

2

Você precisará identificar qual processo do servidor no servidor executa o serviço rsh aka shell . Tradicionalmente, ele é iniciado pelo inetd ou xinetd meta-daemon que escuta na porta shell TCP (514) e executa o comando rshd em uma conexão de entrada.

lsof -i tcp:shell

(como root) informará qual processo está escutando nessa porta.

Você pode avaliar isso com:

strace -tt -ff -o rsh.strace -p "the-PID"

A opção -ff segue os garfos e cria um arquivo de log por processo, o que facilita a leitura.

Os arquivos de log serão nomeados rsh.strace.<pid> , em que <pid> é o ID do processo correspondente. xinetd gerará um novo processo para executar o rshd server, que por si só pode gerar outro processo para executar o shell de login do usuário, que possivelmente gerará vários processos ao interpretar ~/.bashrc (yes bash (se for o shell de login do usuário), interpreta ~/.bashrc quando executado sobre rsh , mesmo que não seja um shell de login.

Então, você pode ver quem faz o setrlimit com:

grep setrlimit rsh.strace.*

Depois de identificar o processo. Você pode fazer um

grep execve rsh.strace.<that-pid>

Para ver se esse processo executou um comando antes de fazer isso setrlimit , o que lhe dirá qual comando fez o ulimit . Se esse processo não fez o execve , então seu pai ou avô fez. Você pode descobrir o pai, verificando qual processo fez o fork / clone que resultou nesse <pid> como:

grep -E '(clone|fork).*= <that-pid>' rsh.strace.*

Se o processo for inetd / xinetd e inetd estiver atendendo muitos outros serviços além de shell , alternativamente, você poderá alterar sua configuração para executar strace -tt -ff -o /var/log/rsh.strace in.rshd em vez de in.rshd para o shell service ou crie um script de wrapper em torno de in.rshd para chamar o verdadeiro in.rshd em strace .

Agora, as duas prováveis coisas que definem o ulimit são PAM (via pam_limits module e /etc/security/limits.conf ) e os scripts de inicialização do shell de login do usuário remoto.

No último caso, em vez de stracing rshd , você poderia ativar o rastreamento de shell no shell de login. Por exemplo, se o shell de login do usuário remoto for bash ou sh , sh sendo um link simbólico para bash , você poderá alterar /usr/sbin/in.rshd (ou qualquer que seja o local do comando rsh daemon) para um script de wrapper que faz:

#! /bin/sh -
exec /usr/bin/env SHELLOPTS=xtrace "$0.bin" "$@"

Depois de renomeá-lo para in.rshd.bin .

    
por 19.03.2013 / 09:20
1

Eu não tenho muita experiência com rsh , mas é assim que eu resolvo usando strace .

Você pode coordenar um processo em execução usando o sinalizador -p . Então, algo assim

linux$ strace -p $(pidof rshd) -o logfile.txt

Ou você pode modificar o script que inicia o rsh deamon para usar strace. Pode ser bom usar strace -o logfile para isso, pois senão a saída pode ser ocultada pelos scripts que iniciam o daemon rsh.

    
por 19.03.2013 / 08:18
0

Muito fácil: o que o rsh machine command faz é lançar command on machine . Ou seja, se você usar rsh localhost ulimit -u , o que acontece é que o comando ulimit -u é executado em localhost (ou seja, nesta mesma máquina). Que rsh está envolvido em chamar isso é completamente irrelevante. Se você quiser saber o que acontece lá, basta olhar para o que o ulimit -u faz.

Você pode analisar rshd até ficar azul na cara, ele nunca fará nada, mas (1) obter a conexão e verificar se é permitido, (2) coletar o comando para executar, (3) / exec para executar o comando, conectado para enviar a saída de volta. Em particular, você não verá nenhum ulimit frobbing dessa maneira.

    
por 19.03.2013 / 17:07