보안상의 이유로 사용자 셸 비활성화


58

시스템 간 파일 전송, 모니터링 등과 같이 세분화 된 권한이 필요한 자동화 된 작업을 위해 생성 한 여러 사용자 계정이 있습니다.

이러한 "사용자"에게 쉘이없고 로그인 할 수 없도록 이러한 사용자 계정을 어떻게 잠급니까? 우리는 누군가 이러한 사용자 계정 중 하나로 SSH에 접속할 수 없도록합니다.

답변:


63

usermod명령을 사용하여 사용자의 로그인 쉘을 변경할 수 있습니다 .

usermod -s /sbin/nologin myuser

또는

usermod -s /usr/sbin/nologin myuser

OS가 / sbin / nologin을 제공하지 않으면 쉘을 / bin / false와 같은 NOOP 명령으로 설정할 수 있습니다.

usermod -s /bin/false myuser

1
/bin/false보다 일반적인 것 같습니다 /bin/true.
jw013

@ jw013 답변을 업데이트했지만 둘 다 정상적으로 작동합니다.
jordanm

1
Debians에 그주의, nologin사실에서 찾을 수있다/usr/sbin/nologin
xebeche

불행히도 일부 사용자 계정의 '유효한'사용은 설정시 비활성화됩니다.nologin
Javier

2
@ jw013 실제로 나는 그 두 가지 중에서 /usr/local/bin/maybe어느 것을 /dev/urandom선택 해야 합니다. 어쩌면 나는 그것을 사용해야한다 : D
hegez

21

로그인 쉘을 변경한다고해서 반드시 사용자 인증을 막을 수있는 것은 아닙니다 (사용자 쉘이에 언급되어 있는지 확인하는 일부 서비스는 제외 /etc/shells).

사용자는 여전히 시스템이 UNIX 사용자에게 제공하는 다양한 서비스를 인증 할 수 있으며, 임의의 명령을 직접 실행하지는 않지만 일부 조치를 수행 할 권한이 여전히있을 수 있습니다.

셸을 변경 /bin/false또는 /usr/sbin/nologin만 명령을 실행하는 데 사용할 수있는 서비스 (콘솔 로그인, SSH, 텔넷, RLOGIN, REXEC ...)에서 명령을 실행하는 것을 방지되므로 영향을 미치는 권한을 일부 서비스.

ssh를 들어, 여전히 포트 포워딩을 수행 할 수 있습니다.

passwd -l암호 인증을 사용하지만 사용자는 여전히 (같은 다른 인증 방법을 사용하는 것이 허용 될 수 authorized_keysssh).

pam적어도 리눅스에, 당신은 사용할 수 있습니다 pam_shells허용 쉘 (그가에 언급과 사용자 인증 또는 승인을 제한 할 모듈 /etc/shells). 의 경우 다른 인증 방법 (예 :) 외에도 인증 용도 대해 ssh권한 부여 ( account) 수준 에서 수행하거나, (예 : 친구)의 지시문으로 수행 할 수 있습니다 .sshdpam authorized_keyssshd_config/etc/ssh/sshd_configAllowUsers

전역 pam 인증에 일부 제한을 추가하면 cron해당 사용자로 작업을 실행하지 못할 수 있습니다.


감사합니다. 그런 다음 다음 스키마를 고려할 때 권장되는 사항은 다음과 같습니다. sftp 또는 sshfs를 통해 홈 폴더에 액세스해야하는 사용자를 작성해야하지만 쉘로 로그인 할 수 없어야합니다. 가능합니까? 나는 PAM 모듈이 goto 솔루션 :|
일지 모르지만

- 당신은 rssh 한 번 봐 걸릴 수 @Stphane manpages.ubuntu.com/manpages/trusty/man1/rssh.1.html
하트 Simha

4

/etc/passwd파일을 편집하고 사용자 쉘을 /bin/bash에서 또는 /bin/sh로 변경하십시오./sbin/nologin


8
정답은 정확하지만 수동 편집 / etc / passwd는 권장하지 않습니다.
jordanm

3
왜? 이것은 제가 전문적인 시스템 관리자 인 한 우리가 해왔 던 일입니다. (약 20 년) 사실, 모든 리눅스 / 유닉스 배포판에 / etc / passwd 또는 / etc / group 수정 도구가있는 것은 아닙니다. 설정을 캐시하고 덮어 쓰는 도구 인 Yast 또는 Smit와 같은 것을 사용하지 않는 한 수작업 편집에는 아무런 해가 없습니다.
마크 코헨

6
단일 사용자가 아닌 수동 편집으로 "모든 사람의 로그인을 차단"하는 실수를하는 것이 훨씬 쉽습니다.
jordanm

2
@ jordanm : vipw그런 종류의 실수를 막는 것이 있습니다.
eudoxos

4

먼저을 사용하여 비밀번호를 비활성화하십시오 passwd -l username.

옵션 에 대한 man페이지 도 참고 하십시오 .passwd-l

   -l, --lock
       Lock the password of the named account. This option disables a password by changing it to a value which matches no
       possible encrypted value (it adds a ´!´ at the beginning of the password).

       Note that this does not disable the account. The user may still be able to login using another authentication token
       (e.g. an SSH key). To disable the account, administrators should use usermod --expiredate 1 (this set the account's
       expire date to Jan 2, 1970).

       Users with a locked password are not allowed to change their password.

1
바람직하지 않을 수 있습니다. 예를 들어 이메일에 액세스하려면 시스템 계정에 비밀번호가 필요할 수 있습니다.
jordanm

1
일부 이메일 시스템은 자체 비밀번호 메커니즘을 사용할 수 있습니다. 이메일 전용 비밀번호로 Dovecot 및 Exim을 사용합니다. 시스템 암호를 사용하지 않는 서버에서 웹 메일을 사용할 수 있습니다. 가상 이메일 도메인은 서버 비밀번호 시스템에 연결되어 있지 않으므로 고유 한 비밀번호가 필요합니다.
BillThor

2

chsh 명령을 사용할 수 있습니다 :

~# chsh myuser

요청시 새로운 쉘 세부 사항을 입력하십시오.

Login Shell [/bin/sh]: /bin/nologin

또는 더 짧은 버전 :

~# chsh myuser -s /bin/nologin

0

(설명으로 포트 포워딩을 가능하게 로깅에서 사용자와 ssh를 한층 인증 방지하기 위해 여기 스테판)을, 나는 시스템과 유사하게 사용자를 수정하는 nobody사용자 :

  • /etc/shadow( 적합한 필드에서 *또는 !!적절한 필드에서) 비밀번호 인증 차단
  • 비활성화 된 쉘 /etc/passwd(예 /sbin/nologin: 적절한 필드)
  • 읽기 전용 홈 디렉토리 /etc/passwd(예 /: 적절한 필드)
당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.