Hangi IP'nin Linux'ta ssh kullanarak belirli bir komutu yürüttüğünü bilmek


10

Ssh kullanan birçok kullanıcı tarafından erişilen bir sunucu var. Hangi kullanıcının belirli bir komutu yürüttüğünü anlamaya çalışıyorum.

Ben şu anda kullanarak sunucuya erişen kullanıcıların listesini de biliyorum. who Ayrıca kullanarak komut listesi biliyorum history.

Ancak hangi kullanıcının cp file1.sh file2.shsunucuda olduğu gibi bir komut yürüttüğünü nasıl bilebilirim ? Kullanıcı komutu zaten yürüttü ve oturumu kapattı

Yanıtlar:


4

Bağlanan her yeni kullanıcı sshd, belirli bir PID ile yeni bir oturum oluşturur. Sen kullanabilirsiniz pstreehangi miras hangi komutlar yazdırmak için sshdbu PID kontrol çapraz sonra oturumuna ve /var/log/auth.log.

Örnek (anonimleştirilmiş): Uzaktaki bir sunucuya aynı anda 3 kullanıcıyla aynı anda oturum açtım. Şimdi istemcinin hangi IP'den komutu çalıştırdığını öğrenmek istiyorum watch date.

$ pstree -p | grep watch
        |           |-sshd(15243)---sshd(15342)---bash(15343)---watch(15450)
$ sudo grep 15243 /var/log/auth.log
Mar  7 15:37:29 XXXXXXXXXX sshd[15243]: Accepted publickey for XXXXXXXXXX from 12.34.56.78 port 48218 ssh2
Mar  7 15:37:29 XXXXXXXXXX sshd[15243]: pam_unix(sshd:session): session opened for user XXXXXXXXXX by (uid=0)
Mar  7 15:37:44 XXXXXXXXXX sudo: XXXXXXXXXX : TTY=pts/7 ; PWD=/home/XXXXXXXXXX ; USER=root ; COMMAND=/bin/grep 15243 /var/log/auth.log

pstree -pbu watchkomutun sshdPID 15243 ile devralındığını gösterir. grepBu PID için /var/auth/auth.logbu oturumu başlatan IP 12.34.56.78 olduğunu gösterir. Bu nedenle bu aynı zamanda başlayan kullanıcıdır watch.

historyÖzellikle bu kullanıcıyı bulmaya gelince , tüm uzak kullanıcılar aynı yerel SSH kullanıcısını kullandığında görebildiğim şeyden yapılamaz. Ayrıca, kolayca sahte / etkisiz hale getirilebilir / vb. Olabilir, bu yüzden gerçekten güvenilir değildir. Geçmiş dosyasına kaydedilirse, cpkomutu arayabilir ve dosyada geriye doğru bakabilirsiniz, ancak orada değilse, yapacak çok şey yoktur.


Şu hatayı söylüyor grep: /var/log/auth.log: No such file or directory:-(
Manu K Mohan

@ManuKMohan: Hangi sistemde olduğunuzu belirtmediniz. RHEL / Fedora / Scientific Linux / etc. Altında ilgili dosyadır /var/log/secure.
Daniel Andersson

Anderson Ubuntu kullanıyorum
Manu K Mohan

@ManuKMohan: /var/log/auth.log.1vb. Varsa , bilgileri içerip içermediklerini görmek için bunları deneyin. Daha sonra, rsyslog( sudo service rsyslog restart) öğesini yeniden başlatın ve doldurmaya başlayıp başlamadığını görün auth.log, zaten yapması gerekir. SSHD /var/log/auth.log, Ubuntu'da varsayılan olarak oturum açar , bu nedenle günlük hedeflerini /etc/ssh/ssd_configveya aracılığıyla açıkça değiştirmediğiniz sürece /etc/syslog.conf( authdüzeyinin burada kaydedildiği dosyayı kontrol edebilirsiniz ), orada olması gerekir. Değilse: bir şey var :-).
Daniel Andersson

1

Bash tarafından yürütülen tüm komutları kaydetmek için bu iki satırı / etc / profile veya / etc / bashrc dosyasına ekleyebilirsiniz:

whoami="$(whoami)@$(echo $SSH_CONNECTION | awk '{print $1}')"                                                                                                  
export PROMPT_COMMAND='RETRN_VAL=$?;logger -p local3.debug "$whoami [$$]: $(history 1 | sed "s/^[ ]*[0-9]\+[ ]*//" ) [$RETRN_VAL]"'

Bu, syslog'u, çalıştırılan kullanıcı ile birlikte yürütülen her komutu kaydetmek için kullanır ve IP adresi aşağıdaki gibi bir formatta:

Jan  8 08:43:49 xpto local3.debug root: root@192.168.x.y [29385]: ls -al [0]

Ayrıca, local3 iletilerini belirli bir dosyaya yeniden yönlendirmek için aşağıdaki satırı syslog yapılandırmanıza (/etc/syslog.conf) ekleyebilirsiniz.

local3.*                                                /var/log/prompt.log

Şimdi bir syslog-nggelişme ve yapılandırma dosyası /etc/syslog-ng/syslog-ng.conf .
Timo

1

Bunun için snoopy kullanabilirsiniz .

Günlük iletisi biçimi tanımında IP =% {env: SSH_CLIENT} belirterek özel çevre değişkenini (SSH_CLIENT) günlüğe kaydedecek şekilde yapılandırmanız gerekir (./configure flag veya 2.x sürümünden beri snoopy.ini içinde yapılandırılabilir).

Açıklama: Snoopy sürdürücü burada.


0

Bash kullandığınızı varsayarsak history, yalnızca SİZİN komut satırı geçmişinizi gösterir. Varsayılan olarak, ~/.bash_historygeçmişi okur . Bunun, benzer bir şey yaparak (çok düşük olasılıkla) değiştirilebileceğini unutmayın HISTFILE=/home/userFoo/.my_alt_history.

Kutuya root olduğunuzu varsayarsak, kullanıcının tüm dizinlerini tarayabilir ve bu komutu kimin çalıştırdığını görmek için geçmişlerini okuyabilirsiniz.


Ve eğer hain oluyorlarsa, bu komutu tarihlerinden kolayca silebilirlerdi. Etkin olarak komutu çalıştıran ps -aux | grep "cp file1.sh file2.sh"

Tüm kullanıcılar ssh kullanarak sunucunun aynı kullanıcı adına uzaktan erişir. Bu kullanıcıya hangi IP'nin eriştiğini bilmek ve komutu yürütmek istiyorum.
Manu K Mohan

Çok sayıda kullanıcının bir kullanıcı adı ve şifre paylaşması iyi bir politika değildir.
pjc50
Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.