루트로 작동하는 여러 Linux sysadmin


40

우리 팀에는 몇 개의 데비안 서버를 관리해야하는 노련한 Linux 시스템 관리자가 있습니다. 이전에는 SSH 공개 키 인증을 사용하여 루트로 작업했습니다. 그러나 우리는 해당 시나리오에 대한 모범 사례가 무엇인지에 대해 토론했으며 아무것도 동의하지 않았습니다.

모든 사람의 SSH 공개 키는 ~ root / .ssh / authorized_keys2에 있습니다.

  • 장점 : 사용하기 쉽고 SSH 에이전트 전달이 쉽게 작동하며 오버 헤드가 거의 없음
  • 단점 : 감사 누락 (어느 "루트"가 변경되었는지 알 수 없음), 사고 가능성

개인 계정 및 sudo 사용

그렇게하면 SSH 공개 키를 사용하여 개인 계정으로 로그인하고 sudo 를 사용 하여 루트 권한으로 단일 작업을 수행 할 수 있습니다. 또한 로그 파일을 볼 수있는 "adm"그룹을 제공 할 수 있습니다.

  • 좋은 감사, sudo 는 우리가 바보 같은 일을 너무 쉽게하지 못하게합니다.
  • 단점 : SSH 에이전트 전달이 중단됩니다. 루트가 아닌 것으로 거의 아무것도 할 수 없기 때문에 번거 롭습니다.

여러 UID 0 사용자 사용

이것은 sysadmins 중 하나의 매우 독특한 제안입니다. UID는 0이지만 로그인 이름은 다른 / etc / passwd에 3 명의 사용자를 만드는 것이 좋습니다. 그는 이것이 실제로 금지 된 것은 아니며 모든 사람이 UID 0이 될 수 있지만 여전히 감사 할 수 있다고 주장합니다.

  • 장점 : 에이전트 포워딩 작동 SSH, 감사의 힘 작업 (안된), 아니 sudo는 번거 로움
  • 단점 : 더러워진 느낌-허용 된 방법으로 문서화 할 수 없음

무엇을 제안 하시겠습니까?


2
"허용 된 방법으로 문서화 할 수 없음"설명 : 설명서 페이지 -o에서 플래그를 살펴보십시오 useradd. 이 플래그는 여러 사용자가 동일한 uid를 공유 할 수 있도록합니다.
jlliagre

6
두 번째 옵션에서 "SSH 에이전트 전달 중단"의 의미를 설명 할 수 있습니까? 우리는 이것을 내 직장에서 사용하고 ssh 에이전트 전달은 잘 작동합니다.
Patrick

4
sudo가 아닌 root가 아닌 계정에서 ssh해야합니다.
Random832

4
sudo 방법의 또 다른 결과 : 더 이상 SCP / FTP를 루트로 사용할 수 없습니다. 파일 전송은 먼저 개인의 홈 디렉토리로 이동 한 다음 터미널에서 복사해야합니다. 이것은 관점에 따라 장점과 단점입니다.
user606723

1
꼭두각시 / 주방장 / 소장 가능 시스템을 고려하지 않는 이유는 무엇입니까?
Alex Holst

답변:


64

두 번째 옵션은 가장 좋은 방법입니다. 개인 계정, sudo 액세스. SSH를 통한 루트 액세스를 완전히 비활성화하십시오. 우리는 몇 백 대의 서버와 6 명의 시스템 관리자를 보유하고 있습니다.

에이전트 전달은 정확히 어떻게 중단됩니까?

또한 sudo모든 작업 앞에서 사용하는 번거 로움이 있으면 sudo 쉘을 호출 sudo -s하거나 루트 쉘로 전환 할 수 있습니다sudo su -


10
SSH로 루트 액세스를 완전히 비활성화하는 대신 SSH 키로 루트 액세스를 수행하여 매우 강력한 키 프레이즈로 하나의 키를 생성하고 비상용으로 만 잠 가두는 것이 좋습니다. 영구적 인 콘솔 액세스 권한이 있으면 유용하지 않지만 그렇지 않은 경우 매우 유용합니다.
EightBitTony

17
보안상의 이유로 SSH를 통한 루트 로그인을 비활성화하는 것이 좋습니다. 루트로 로그인해야하는 경우 루트가 아닌 사용자로 로그인하고 su.
taz

+1 .. "두 번째 옵션이 최고"라고 말하는 것보다 더 나아갈 것입니다. 나는 그것이 유일한 합리적인 옵션이라고 생각했다. 옵션 1과 3은 외부 공격과 실수로 인한 시스템 보안을 크게 저하시킵니다. 게다가, # 2는 시스템이 주로 사용 되도록 설계된 방식 입니다.
Ben Lee

2
에 자세히 설명하십시오 sudo -s. 일반 루트 로그인에 비해 추가 로그 항목을 제외하고 루트로 로그인하거나 기본적으로 로그인하는 것과 sudo -i차이가 없다는 것을 이해하는 것이 맞 su -습니까? 이것이 사실이라면 일반 루트 로그인보다 어떻게 그리고 왜 더 낫습니까?
PF4Public 2018 년

9

useradd -o -u userXXX@jlliagre가 권장 하는 옵션을 제외하고 세 번째 제안 된 전략과 관련 하여 동일한 UID로 여러 사용자를 실행하는 데 익숙하지 않습니다. (따라서 계속 진행하면 발생하는 문제 (또는 성공)로 게시물을 업데이트 할 수 있다면 관심이있을 것입니다 ...)

첫 번째 옵션 인 "모든 사람의 SSH 공개 키는 ~ root / .ssh / authorized_keys2"에 대한 첫 번째 관찰은 다른 시스템에서는 절대로 작업하지 않는 한입니다.

  1. 최소한 시간 이 지나면 사용자 계정으로 작업해야합니다.sudo

두 번째 관찰은 HIPAA, PCI-DSS 준수 또는 CAPP 및 EAL과 같은 것을 목표로하는 시스템에서 작업하는 경우 sudo 문제를 해결해야한다는 것입니다.

  1. 루트가 아닌 개별 사용자 계정을 제공 하는 업계 표준 으로, 일반적으로 일부 중앙 사용자 데이터베이스를 사용하여 감사, 비활성화, 만료 등을 수행 할 수 있습니다.

그래서; 개인 계정 및 sudo 사용

불행히도 sysadmin으로서 원격 시스템에서 수행해야 할 거의 모든 것이 약간의 권한이 필요하지만 대부분의 SSH 기반 도구 및 유틸리티가 사용 중일 때 성가신 것은 성가신 일입니다 sudo

따라서 나는 sudo당신이 언급 한 성가신을 피하기 위해 사용하는 몇 가지 트릭을 전달할 수 있습니다 . 첫 번째 문제는 루트 로그인을 사용하여 루트 로그인이 차단 PermitRootLogin=no되었거나 ssh 키를 사용하여 루트가없는 경우 SCP 파일을 PITA로 만드는 것입니다.

문제 1 : 원격에서 파일을 scp하려고하지만 루트 액세스가 필요하지만 원격 상자에 루트로 직접 로그인 할 수 없습니다.

지루한 해결책 : 파일을 홈 디렉토리, chown 및 scp로 복사하십시오.

ssh userXXX@remotesystem, sudo su -등, cp /etc/somefiles하는 /home/userXXX/somefiles, chown -R userXXX /home/userXXX/somefiles사용 scp를 원격에서 파일을 검색 할 수 있습니다.

정말 지루합니다.

덜 지루한 해결책 : sftp는 -s sftp_server플래그를 지원 하므로 다음과 같은 작업을 수행 할 수 있습니다 (암호없는 sudo를 구성한 경우 /etc/sudoers).

sftp  -s '/usr/bin/sudo /usr/libexec/openssh/sftp-server' \
userXXX@remotehost:/etc/resolv.conf 

(이 hack-around를 sshfs와 함께 사용할 수도 있지만 권장 사항은 확실하지 않습니다 ... ;-)

암호가없는 sudo 권한이 없거나 위의 방법이 깨진 구성 이유로 인해 원격 루트 파일에 액세스하기 위해 지루한 파일 전송 방법을 하나 더 제안 할 수 있습니다.

포트 포워드 닌자 방법 :

원격 호스트에 로그인하되, 원격 포트 3022 (무엇이든 사용 가능하고 관리자를 위해 예약되지 않은 것 (즉,> 1024))가 로컬 측의 포트 22로 다시 전달되도록 지정하십시오.

 [localuser@localmachine ~]$ ssh userXXX@remotehost -R 3022:localhost:22
Last login: Mon May 21 05:46:07 2012 from 123.123.123.123
------------------------------------------------------------------------
This is a private system; blah blah blah
------------------------------------------------------------------------

정상적인 방식으로 뿌리 내리십시오 ...

-bash-3.2$ sudo su -
[root@remotehost ~]# 

이제 파일의 중간 복사본을 만드는 지루한 보링 단계를 피하면서 파일을 다른 방향으로 scp 할 수 있습니다.

[root@remotehost ~]#  scp -o NoHostAuthenticationForLocalhost=yes \
 -P3022 /etc/resolv.conf localuser@localhost:~
localuser@localhost's password: 
resolv.conf                                 100%  
[root@remotehost ~]#  

 

 

문제 2 : SSH 에이전트 전달 : 로그인 쉘을 지정하여 루트 프로파일을로드하면 SSH 에이전트 전달에 필요한 환경 변수 (예 : SSH 에이전트 전달) SSH_AUTH_SOCK가 재설정되므로 SSH 에이전트 전달이 아래에서 "깨졌습니다" sudo su -.

반 구운 답변 :

제대로 루트 쉘을로드하도록 뭐든지, 정당 환경을 재설정 할 것입니다, 그러나 약간의 작업은 주위가 귀하의 캔을 사용하면, BOTH 루트 권한과 SSH 에이전트를 사용하는 능력을 필요로 할 때 동시에 AT

이것은 일종의 키메라 프로파일을 얻습니다. 그것은 실제로 사용해서는 안됩니다 . 불쾌한 해킹이기 때문에 원격 호스트에서 루트로 다른 SCP 파일에 대해 SCP 파일을 필요로 할 때 유용합니다.

어쨌든 sudoers에서 다음을 설정하여 사용자가 ENV 변수를 보존 할 수 있습니다.

 Defaults:userXXX    !env_reset

이를 통해 불쾌한 하이브리드 로그인 환경을 만들 수 있습니다.

정상적으로 로그인하십시오.

[localuser@localmachine ~]$ ssh userXXX@remotehost 
Last login: Mon May 21 12:33:12 2012 from 123.123.123.123
------------------------------------------------------------------------
This is a private system; blah blah blah
------------------------------------------------------------------------
-bash-3.2$ env | grep SSH_AUTH
SSH_AUTH_SOCK=/tmp/ssh-qwO715/agent.1971

그 실행을 bash 쉘을 생성 /root/.profile하고 /root/.bashrc. 그러나 보존SSH_AUTH_SOCK

-bash-3.2$ sudo -E bash -l

따라서이 쉘에는 루트 권한과 루트가 있습니다 $PATH(그러나 borked 홈 디렉토리 ...)

bash-3.2# id
uid=0(root) gid=0(root) groups=0(root),1(bin),2(daemon),3(sys),4(adm),6(disk),10(wheel) context=user_u:system_r:unconfined_t
bash-3.2# echo $PATH
/usr/kerberos/sbin:/usr/local/sbin:/usr/sbin:/sbin:/home/xtrabm/xtrabackup-manager:/usr/kerberos/bin:/opt/admin/bin:/usr/local/bin:/bin:/usr/bin:/opt/mx/bin

그러나이 호출을 사용하여 원격 sudo 루트가 필요한 작업뿐만 아니라 SSH 에이전트 액세스도 수행 할 수 있습니다.

bash-3.2# scp /root/.ssh/authorized_keys ssh-agent-user@some-other-remote-host:~
/root/.ssh/authorized_keys              100%  126     0.1KB/s   00:00    
bash-3.2# 

1
나는 핵을 좋아한다.
sjbotha

2

세 번째 옵션은 이상적으로 보이지만 실제로 어떤 일이 일어나고 있는지 확인하려고 시도 했습니까? 인증 단계에서 추가 사용자 이름 표시 될 수 있지만 모든 역방향 조회는 동일한 값을 반환합니다.

컴퓨터가 인터넷에 연결되어 있지 않거나 강력한 암호를 사용하더라도 루트 직접 ssh 액세스를 허용하는 것은 좋지 않습니다.

일반적으로 루트 액세스에는 sudo 대신 'su'를 사용합니다.


4
동일한 UID로 여러 사용자를 추가하면 문제가 발생합니다. 응용 프로그램이 UID 번호의 사용자 이름을 찾으려하면 잘못된 사용자 이름을 찾을 수 있습니다. 루트에서 실행되는 응용 프로그램은 잘못된 사용자로 실행되고 있다고 생각할 수 있으며 많은 이상한 오류가 발생하기 시작합니다 (한 번 시도했습니다).
Patrick

8
세 번째 옵션은 피의 나쁜 아이디어 입니다. 본질적으로 UID와 사용자 이름 사이의 1 : 1 관계를 깨뜨리고 있으며, 유닉스의 모든 것은 그 관계가 유지되기를 기대합니다. 하지 말아야 할 명백한 규칙이 없다고해서 그것이 좋은 생각임을 의미하지는 않습니다.
Shadur

죄송하지만 세 번째 옵션은 끔찍한 아이디어입니다. 여러 UID 0 사용자가 로그인하면 문제를 곱할 것을 요구합니다. 옵션 번호 2는 제정신입니다.
Doug

세 번째 옵션은 많은 다운 보트를받을 자격이 없습니다. 유닉스에는이 트릭으로 혼란스러워하는 명령이 없습니다. 사람은있을 수 있지만 명령은 신경 쓰지 않아야합니다. 로그인 이름은 다르지만 로그인하자마자 비밀번호 데이터베이스의 uid와 일치하는 이름이 사용되므로 실제 사용자 이름 (여기서는 루트)이 맨 앞에 표시되도록하십시오.
jlliagre

@ 패트릭 당신은 실제로 이것을 본 적이 있습니까? 내가 테스트 한만큼 사용자가 UID 0을 처음 root사용하는 경우 응용 프로그램이 사용자를 선택 합니다. 나는 jlliagre에 동의하는 경향이 있습니다. 내가 볼 수있는 유일한 단점은 각 사용자가 사용자이며 때로는 누가 무엇을했는지 이해하는 것이 혼란 스러울 수 있다는 것입니다. root/etc/passwdroot
Martin

2

나는 (1)을 사용하지만

rm -rf / tmp *

당신이 소수의 관리자 이상이 있다면 나는 충분히 나쁘다는 것을 알 수 있습니다.

(2) 아마도 더 공학적이며 sudo su를 통해 본격적인 루트가 될 수 있습니다. 그래도 사고는 여전히 가능합니다.

(3) 바지선으로 만지지 않을 것입니다. Barebone-sh가 아닌 루트 계정을 갖기 위해 Sun에서 사용했지만 (올바르게 기억하는 경우) 강력하지는 않았습니다.


2

2에 답하십시오.

  1. 으로 SSH 액세스를 허용 함을 의미합니다 root. 이 기계가 어떤 식 으로든 대중을 향하고 있다면 이것은 끔찍한 생각 일뿐입니다. 포트 22에서 SSH를 실행했을 때 VPS는 매시간 여러 번 루트로 인증을 시도했습니다. 여러 번 실패한 IP를 기록하고 금지하도록 기본 IDS를 설정했지만 계속 시도했습니다. 고맙게도 내 계정과 sudo를 구성하자마자 루트 사용자로 SSH 액세스를 비활성화했습니다. 또한이를 수행하는 감사 내역이 거의 없습니다.

  2. 필요에 따라 루트 액세스를 제공합니다. 그렇습니다. 표준 사용자로서의 특권은 거의 없지만, 이것은 거의 원하는 것입니다. 계정이 손상되면 기능이 제한되기를 원합니다. 수퍼 유저가 액세스하려면 비밀번호를 다시 입력해야합니다. 또한 sudo 액세스는 사용자 그룹을 통해 제어 할 수 있으며 원하는 경우 특정 명령으로 제한 할 수 있으므로 누가 무엇에 액세스 할 수 있는지 더 많이 제어 할 수 있습니다. 또한 sudo로 실행되는 명령을 기록 할 수 있으므로 문제가 발생할 경우 훨씬 더 나은 감사 추적을 제공합니다. 오, 로그인하자마자 "sudo su-"를 실행하지 마십시오. 끔찍하고 끔찍한 연습입니다.

  3. 시스템 관리자의 생각이 나쁩니다. 그리고 기분이 나빠 야합니다. 아닙니다. * nix 시스템은이 작업을 중단하지 않을 것입니다. 그러나 파일 시스템과 거의 모든 응용 프로그램은 각 사용자가 고유 한 UID를 갖기를 기대합니다. 이 길을 따라 가기 시작하면 문제가 생길 것입니다. 아마도 즉시는 아니지만 결국은 어쩌면. 예를 들어, 친숙한 이름을 표시하더라도 파일과 디렉토리는 UID 번호를 사용하여 소유자를 지정합니다. UID가 중복되는 문제가있는 프로그램을 실행하는 경우 심각한 수동 파일 시스템 정리를 수행하지 않고도 나중에 passwd 파일의 UID를 변경할 수 없습니다.

sudo앞으로 나아갈 길입니다. 명령을 루트로 실행하면 번거로울 수 있지만 액세스 및 감사 측면에서보다 안전한 상자를 제공합니다.


1

반드시 옵션 2이지만 그룹을 사용하여 sudo를 사용할 필요없이 각 사용자에게 최대한 많은 제어권을 부여하십시오. 모든 명령 앞에 sudo는 항상 위험 구역에 있기 때문에 이익의 절반을 잃습니다. sudo없이 sysadmins가 관련 디렉토리를 쓸 수 있도록하면 sudo를 예외로 되돌려 모든 사람이 더 안전하다고 느끼게합니다.


1

옛날에는 sudo가 없었습니다. 결과적으로 UID 0 사용자가 여러 명인 것이 유일한 대안이었습니다. 그러나 사용자 이름을 얻기 위해 UID를 기반으로 로깅하면 여전히 좋지 않습니다.

요즘 sudo가 유일한 해결책입니다. 다른 건 잊어 버려


0

실제로 허용되는 것으로 문서화되어 있습니다. BSD 유니스는 오랜 시간 동안 계정을 유지해 왔으며, bashroot 사용자는 csh가 표준 인 시스템에서 실습을 받아들이는 경향이 있습니다 (실수로 받아 들여짐).


0

어쩌면 나는 이상하지만 방법 (3)은 내 마음에 먼저 떠오른 것입니다. 장점 : 모든 사용자 이름을 로그에 넣고 누가 루트로 누가했는지 알 수 있습니다. 단점 : 그들은 항상 뿌리가 될 것이므로 실수는 치명적일 수 있습니다.

모든 관리자에게 루트 액세스 권한이 필요한 이유를 묻고 싶습니다. 제안한 3 가지 방법 모두 한 가지 명백한 단점이 있습니다. 관리자가 한 sudo bash -lsudo su -이상을 실행하면 누가 무엇을하는지 추적 할 수있는 능력을 잃어 버리고 실수는 치명적일 수 있습니다. 또한, 잘못된 행동이 발생할 경우, 훨씬 더 악화 될 수도 있습니다.

대신 다른 방법으로 이동하는 것이 좋습니다.

  • 관리자를 일반 사용자로 작성
  • 누가 어떤 일을해야하는지 결정하십시오 (apache 관리 / postfix 관리 등)
  • 관련 그룹에 사용자 추가 (예 : "martin"을 "postfix"및 "mail"에 추가, "amavis"를 사용하는 경우 등)
  • 수정 권한 (chmod -R g + w postfix : postfix / etc / postfix)
  • 상대 sudo 권한 만 제공하십시오 (visudo-> martin에게 /etc/init.d/postfix, / usr / bin / postsuper 등을 사용하도록하십시오)

이런 식으로 Martin은 접미사를 안전하게 처리 할 수 ​​있으며 실수 나 오작동이 발생하면 전체 서버가 아닌 접미사 시스템 만 잃게됩니다.

Apache, mysql 등과 같은 다른 서브 시스템에도 동일한 로직을 적용 할 수 있습니다.

물론 이것은 현재로서는 이론적 인 것이며 설정하기가 어려울 수 있습니다. 그것은 더 좋은 방법처럼 보입니다. 적어도 나에게 누군가 이것을 시도하면 어떻게되었는지 알려주십시오.


이 맥락에서 SSH 연결 처리를 추가해야합니다. 어떤 방법을 사용하든 SSH를 통한 루트 로그인을 허용하지 말고 개별 사용자가 자신의 자격 증명을 사용하여 ssh를 허용하고 거기에서 sudo / nosudo / etc를 처리하십시오.
Tuncay Göncüoğlu
당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.