Cron 작업을 루트로 실행하면 sshd 서비스가 중지되고 다른 사용자가 로그인할 수 없게 되는 이유는 무엇입니까?

Cron 작업을 루트로 실행하면 sshd 서비스가 중지되고 다른 사용자가 로그인할 수 없게 되는 이유는 무엇입니까?

루트로 Cron 작업을 실행하는 다른 서버에서 Clamav 업데이트를 가져오는 스크립트가 있습니다. 또한 루트 로그인을 비활성화했습니다 /sbin/nologin. 그러나 이는 sshd 서비스를 중지하고 내 사용자의 /bin/bash 로그인을 삭제하므로 시스템에 심각한 영향을 미칩니다. 이 상태에 도달하기 위해 취한 단계는 다음과 같습니다.

  1. /root/에 실행 가능한 스크립트를 만듭니다. 제 경우에는 Clamav를 업데이트하는 스크립트입니다.
  2. 루트 사용자의 쉘을 /bin/bash에서 /sbin/nologin으로 변경하여 루트 로그인이 비활성화되었는지 확인하십시오.
  3. 이 스크립트를 루트로 매분 실행하려면 /etc/crontab에 항목을 수동으로 추가하세요.
  4. 이제 SSH 서비스를 다시 시작하고 5분 후에 SSH를 시도해보세요.

내가 /etc/crontab들어가면서.

* *  * * * root    /root/clamu.sh >/dev/null 2>&1

다음은 clamu.sh스크립트 입니다

#this script need to run by root user

#create a folder temp
mkdir /temp

#go to the temp dir
cd /temp

#clean this folder
rm -f *

#Copying the files from server to temp dir

scp -P 2277 [email protected]:/var/lib/clamav/daily.* .
scp -P 2277 [email protected]:/var/lib/clamav/bytecode.* .

#Updating the files to actual location

rm -f /var/lib/clamav/daily.*
cp -u daily.* /var/lib/clamav/
cp -u bytecode.* /var/lib/clamav/

#do scanning & save report

cd /
clamscan --recursive=yes >> /var/log/clamav/clamd.log

# Clean the /temp folder
cd /temp
rm -f *

을 사용하고 있습니다 CentOS 7 x64. 이것이 배포와 관련이 없다고 생각하지만 이는 일반적인 문제입니다.

크론에서 이 스크립트를 루트로 실행하면 문제가 발생한다는 것을 알고 있습니다. 그러나 이것이 ssh 실패와 커널 패닉을 일으키는 이유는 단지 무슨 일이 일어나고 있는지 이해하기 위해 알고 싶은 것입니다. 저는 아마추어 Linux 사용자이므로 설명을 좀 주시면 감사하겠습니다. 감사해요.

편집하다 안녕하세요. 원래 질문이 아니기 때문에 연구 결과를 보여주지 않았습니다. 이 문제는 내 원격 가상 머신 중 하나에서 발생하며 디버깅할 로그가 없습니다. 로그에 액세스하는 방법을 알아낸 후 문제 해결을 시도했고 crontab 항목에서 다른 사용자를 사용하여 문제를 해결할 수 있었습니다. 하지만 크론 작업이 어떻게 그렇게 많은 피해를 입힐 수 있는지에 대한 의문은 남아 있습니다. 이것이 나에게 필요한 답이었고, 어쩌면 내가 찾을 수 있는 방향이기도 했습니다.

답변1

정말 존재하나요 ? /temp(그렇게 말하지 않았나요 /tmp?)

그렇지 않은 경우 스크립트는 cd실행을 시도 /temp하고 실패하며 모든 명령은 시작 디렉터리에서 실행됩니다.

마지막 두 명령은 cd먼저 /, 그 다음 cd( /temp존재하지 않을 수도 있음), rm모든 것(대개 루트 파일 시스템)을 수행하기 때문에 특히 위험합니다.

rm명령의 전체 경로를 지정 해야 합니다 .

왜 이렇게 보시는 결과가 나오는지 모르겠지만 스크립트가 매우 위험하기 때문에 먼저 수정해서 문제가 해결되는지 확인해보겠습니다.

답변2

제 생각에는 루트 사용자를 완전히 비활성화해서는 안 됩니다. 루트로 로그인할 수 없도록 하려면 에서 지시문을 설정해야 합니다 ssh.PermitRootLogin no/etc/ssh/sshd_config

다른 응용 프로그램의 경우 대부분의 동등한 설정이 가능합니다.

관련 정보