"사용자"는 호스트의 모든 사용자를 나타내도록 보장됩니까?

"사용자"는 호스트의 모든 사용자를 나타내도록 보장됩니까?

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또 다른 방법은 높은 포트에서 쉘이나 다른 것을 실행하는 것 입니다. 또 다른 접근 방식: 명령을 받아들이고 실행하고 결과를 반환하는 웹 서버를 실행합니다. 또 다른 접근 방식은 미리 명령을 예약한 at(1)다음 로그아웃하는 것입니다.

답변2

users유틸리티는 C로 작성된 매우 작은 프로그램으로 코드가 약 150줄에 불과합니다. 부분이니까GNU 핵심 유틸리티, 너다운로드 가능users.c유틸리티를 사용하고 파일에서 코드를 읽습니다.

실제로 기본적으로 이 유틸리티는 및 에 대한 래퍼 users일 뿐입니다 . 사용자가 로그인했다는 사실을 숨기는 두 가지 확실한 기본 방법이 있습니다.utmpwtmp

users첫 번째 방법은 유틸리티의 코드를 변경 하고 바이너리를 바꾸는 것입니다 /usr/bin/users.

두 번째 방법은 *nix 시스템에 존재할 수 있는 utmp, wtmp, lastlogutmpx의 로그 파일에서 흔적을 지우는 것입니다. wtmpx이 방법에 사용할 수 있는 몇 가지 로그 삭제 도구가 있습니다 cloak.zapclear섹션 3.4를 주의 깊게 읽으십시오.Hacking UNIX의 "침입 후"에서 발췌했습니다.

물론, 특정 애플리케이션과 사용자를 위한 파일 쓰기를 방지하는 다른 방법도 많이 있습니다 utmp.wtmp이 예를 읽어보세요을 위한 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그러나 사용자가 쉘에 로그인하지 않은 경우 출력 에 표시되지 않을 수 있습니다 .이 문제.

관련 정보