「ユーザー」は、ホストのすべてのユーザーを表すことを保証されていますか?

「ユーザー」は、ホストのすべてのユーザーを表すことを保証されていますか?

Linuxホスティングについて非常に基本的な質問があります。

このusersコマンドは、ホストのすべてのユーザーに指示するように保証されていますか?それとも、ユーザーがその時点でホスト上でアクティブであるという事実を隠す方法はありますか?

後者の場合、ユーザーコマンドの出力からユーザーを隠すためにユーザーが使用できる技術が何であるかを知っている人はいますか?

この問題について他の人が提供できる考えは非常に役立ちます。

答え1

読んでいるファイルには表示されず、システムで「システムコマンドを実行してシステムファイルにアクセスできる」ことは/var/run/utmp簡単ですusers(1)

$ ssh testhost sh

たとえば、Centos 7では、誰かが実行中であるというusers指示はありませんが、システムコマンドを実行してシステムファイルにアクセスできます。testhostsh

# users
root
# pstree | grep -3 'sh$'
        |-sshd-+-sshd---sshd
        |      |-sshd---bash-+-grep
        |      |             `-pstree
        |      `-sshd---sshd---sh
        |-sssd-+-sssd_be
        |      `-sssd_nss
        |-systemd-journal

socat別の方法は、高いポートでシェルまたは他のものを実行することです。別のアプローチ:コマンドを受け入れて実行し、結果を返すWebサーバーを実行します。別のアプローチは、事前にコマンドをスケジュールしてからat(1)ログアウトすることです。

答え2

このusersユーティリティはCで書かれた非常に小さなプログラムで、コードは約150行です。部分だからGNUコアユーティリティ、あなたダウンロード可能users.cユーティリティを使用し、ファイルからコードを読みます。

実際、デフォルトでは、このユーティリティはおよびのラッパーにすぎませんusers。ユーザーがログインしているという事実を隠す2つの明確な基本的な方法があります。utmpwtmp

users最初の方法は、ユーティリティのコードを変更してバイナリを変更することです/usr/bin/users

2番目の方法は、* nixシステムに存在できるutmp、、wtmpなどlastlogutmpxログファイルからトレースを消去することです。wtmpxこの方法で使用できるいくつかのログ削除ツールがありますcloakzapclearセクション3.4を注意深く読んでください。Hacking UNIXの「侵入後」から抜粋した。

もちろん、特定のアプリケーションやユーザーのためのファイルの書き込みを防ぐ他の方法もたくさんありますutmpwtmpこの例を読んでくださいのためのssh

loginいくつかの追加のデフォルトおよび一般的なログ記録オプションをファイルで構成できます。

/etc/login.defs

usersユーティリティが管理者とユーザーの観点から情報を解析する場所をより深く理解するには、次のファイルを参照してください。

utmpdump /var/run/utmp
utmpdump /var/log/wtmp
sudo utmpdump /var/log/btmp

またUMP(5)そしてWTMP(5)男性:

ファイルを削除してutmpロギングを無効にできる他のさまざまなシステムとは異なり、Linuxではutmpが常に存在する必要があります。 who(1) を無効にするには、utmp の世界を読めるようにしないでください。

ファイルの種類はシステムによって異なります。ファイルが作成されたシステムのアーキテクチャでのみ処理することをお勧めします。

usersしたがって、質問に対する答えは、「ユーザーがユーティリティからログインしたことを隠すことは可能ですか?」です。はい、可能です。決定方法は決定状況によって異なります。 *nix システムなどへのアクセスレベルによって異なります。

答え3

基本的にそうです。これには、物理​​ログインとリモートホストからログインするユーザーが含まれます。

からman users

FILEによると、現在ログインしている人が誰なのかが出力されます。 FILE を指定しない場合、/var/run/utmp が使用されます。

これユテムデータベースにはchar ut_host[UT_HOSTSIZE];リモートホストログイン情報が含まれています。

usersただし、ユーザーがシェルにログインしていない場合は、出力に表示されないことがあります。この問題

関連情報