루트가 아닌 사용자가 로그인할 때 루트로 스크립트 실행

루트가 아닌 사용자가 로그인할 때 루트로 스크립트 실행

전에 이런 질문을 본 적이 있어요여기그리고여기하지만 그들은 꽤 오래되었고 작동할 해결책을 찾지 못했습니다.

기본적으로 루트가 아닌 사용자 SSH가 서버에 접속할 때마다 루트로 자동으로 스크립트나 명령을 실행해야 합니다. 서버는 Ubuntu 16.04를 실행하고 있으며 차이가 있는 경우 OpenSSH를 사용하고 있습니다.

pkill miner.sh편집: 좀 더 구체적으로 말하자면, 사용자 B가 로그인할 때 사용자 A가 생성한 프로세스를 종료하고 싶습니다. 룸메이트와 저는 헤드리스 게임 서버에서 암호화폐를 채굴하고 있으며 누군가 로그인할 때 자동으로 실행될 수 있도록 하고 싶습니다. 누가 시작했든 관계없이 말이죠. 사용자가 서로의 프로세스를 종료하도록 허용하는 것은 엄청나게 안전하지 않기 때문에 예상보다 어려운 것 같습니다.

답변1

pam_exec는 올바른 방향을 지적했지만 setuid는 나쁜 조언입니다. 대부분의 (모두?) 최신 Linux는 쉘 스크립트에서는 이를 무시하고 바이너리 실행 파일에서만 이를 존중합니다.

로그인이 아닌 다른 시간에 스크립트가 루트로 실행되면 문제가 될까요? 엄격하게 필요한 것보다 더 자주 실행해도 괜찮다면 sudo(암호 없음)를 사용하여 스크립트를 루트로 실행하는 사용자 권한으로 모든 SSH 로그인에서 실행되는 래퍼 스크립트를 만들 수 있습니다. 그러나 이는 사용자가 원하는 만큼 자주 수동으로(루트로) 실행할 수도 있음을 의미합니다.

이를 설정하려면 다음 줄을 /etc/pam.d/sshd에 추가하세요.

account optional pam_exec.so /etc/pam.d/LoginWrapper.sh

그런 다음 내용이 포함된 /etc/pam.d/LoginWrapper.sh 파일을 만듭니다.

#!/bin/bash if [[ $EUID -ne 0 ]]; then # Execute only when a user other than root logs in /usr/bin/sudo /path/to/your/root_script.sh fi

sudo가 다른 경로에 있는 경우 위에서 업데이트해야 합니다.

이제 /etc/sudoers에 다음 줄을 추가합니다.

ALL ALL=(root) NOPASSWD: /path/to/your/root_script.sh

답변2

mygroup이라는 그룹에 모든 사용자를 추가하여 이 문제를 해결했습니다.

sudo groupadd mygroup
sudo usermod -aG mygroup user1
sudo usermod -aG mygroup user2

그런 다음 sudoers에 다음을 추가하여 이 그룹이 비밀번호 없이 /etc/sudoers실행될 수 있도록 수정합니다.sudo pkill

%mygroup ALL=(ALL) NOPASSWD: /usr/bin/pkill

sudo pkill그런 다음 맨 아래에 명령을 추가했는데 /etc/profile정말 효과가 있었습니다.

관련 정보