다른 사용자가이 사용자로 전환 한 것을 알 수있는 방법이 있습니까?


3

서로 다른 시스템 계정을 사용하여 서로 다른 환경을 제어하는 ​​시스템이 있습니다. 내 표준 흐름은 다음과 같습니다.

$ ssh server.example.com
robin@server$ sudo su - env1-controller
env1-controller@server$ deploy

그러나 같은 일을하는 많은 사람들이 env1-controller사용자로 전환 할 수 있습니다. 또한 환경을 동시에 수정하여 서로의 발끝을 밟을 가능성이 있습니다.

다른 env1-controller사용자 가 현재 사용자를 사용하고 있는지 확인할 수있는 방법이 있습니까?


2
모든 사람이 사용하는 경우 sudo당신은 라인을 따라 뭔가를 사용하여 고려할 수 ps -ax | grep sudo현재 사용하고있는 볼 sudo또는 env1-controller실행하고 who당신이 실제로 그것을 실행하는 사람에 대한 아이디어를 얻을 수 있습니다.
세스

감사합니다 @ Seth, ps -ax | grep "sudo su - env1-controller"PID를 얻기 위해 완벽하게 작동합니다. 내가 who실행중인 사용자를 확인하는 데 사용할 수있는 방법을 간략하게 설명해 주 시겠습니까?
Robin Winslow

답변:


2

모든 사람들이 sudo를 사용한다면, ps -ax | grep sudo현재 누가 사용하고 있는지 sudo또는 env1-controller달리기 who를 통해 누군가가 실제로 그것을 사용하고 있는지 알 수 있습니다.

내 컴퓨터에서 내 컴퓨터의 예를 들어 ps -ax | grep sudo다음과 같이 출력됩니다 .

24324 pts/0    S      0:00 sudo su <user>

첫 번째 항목은 PID이고, 두 번째 항목은 TTY, 세 번째 및 마지막 명령입니다. 사용하는 경우 who현재 로그인 한 사용자 및 사용중인 TTY 목록이 표시됩니다. 다음과 같이 보일 수 있습니다 :

<user>     pts/0        Nov 23 10:24 (<IP>)
<user>     pts/2        Nov 23 10:25 (<IP>)

따라서이 조합을 통해 sudo사용자가 사용하는 모든 것에 연결되어 있음을 알 수 있습니다 pts/0. 이것이 수동 확인 방법입니다.

내 생각 엔 그 정보를 결합하는 것이 가능하지만 내 bash 기술은 그 방법에 대한 답변을 게시하기에 충분하지 않습니다.

질문의 최초 작성자가 사용한 최종 솔루션은 다음과 같습니다.

실제로 grep을 사용하여 정확한 TTY 번호를 추출한 ps -aux | grep -v grep | grep "sudo su - whoami" | grep -E -o 'pts/[0-9]+' | grep -E -o '[0-9]+'다음 ls -l /dev/pts/${id}TTY를 소유 한 사람을 결정하는 데 사용 했습니다.

이것이하는 일은 :

  • ps -aux추가 정보를 포함하여 실행중인 모든 프로세스 목록을 얻는 데 사용 하십시오.
  • grepgrepgrep을 출력에서 ​​제외하기 위해 포함되지 않은 모든 행
  • grep포함하는 모든 프로세스에 대한 행 sudo.
  • greppts/<number>그 줄 의 텍스트 .
  • grep 숫자 만.
  • ls해당 TTY의 소유자를 확인하는 데 사용하십시오 .

해당 정보를 사용하여이 작업을 시도 할 수 있습니다 (누가 사용하려는 경우).

who | grep $(ps -ax | grep -v grep | grep "sudo su - whoami" | grep -E -o 'pts/[0-9]+')

그러나 출력에 $()여러 줄이 있기 때문에 단일 결과가있는 한 작동 합니다. 보시다시피 기본 스크립트가 작동하는 데 추가 정보가 필요하지 않으므로 u에서를 건너 뜁니다 ps.


1
실제로 grep을 사용하여 정확한 TTY 번호 ps -aux | grep -v grep | grep "sudo su - whowho 를 추출한 " | grep -E -o 'pts/[0-9]+' | grep -E -o '[0-9]+'다음 ls -l /dev/pts/${id}TTY를 소유 한 사람을 결정하는 데 사용 했습니다.
Robin Winslow

추가해 주셔서 감사합니다. 마음에 들지 않으면 솔루션에 대한 설명을 답변에 통합했습니다.
세스

1
아 그래, 좋은 물건. 내가 /dev/pts/결과를 보지 않고 내용을 검사하는 이유 who는 때로는 첨부 된 TTY가 실제로 직접 로그인 세션이 아니기 때문에 때로는 세션 tmux또는 screen세션 이기 때문 입니다. 이 경우의 출력에서 ​​TTY를 찾을 수 who없지만 /dev/pts세션을 소유 한 사용자에게 여전히 파일이 있습니다 .
로빈 윈 슬로우
당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.