Ubuntu 14 강화 가이드를 읽고 있는데 다음 제안 사항 중 하나입니다.
sudo 그룹의 사용자만 su 명령을 실행하여 루트로 작동(또는 루트가 될)할 수 있도록 하는 것이 현명한 아이디어처럼 보입니다.
dpkg-statoverride --update --루트 추가 sudo 4750 /빈/수
명령을 찾아봤지만 dpkg-statoverride
여전히 위 명령이 정확히 무엇을 하는지 알 수 없나요?
이는 Ubuntu 14에서는 기본적으로 누구나 sudo를 사용할 수 있음을 의미하는 것 같습니다. 테스트하기 위해 새 사용자를 생성하고 해당 사용자로 로그인한 후 sudo를 사용해 보았지만 실패했습니다. 괜찮습니다.
그렇다면 위 조언의 목적은 무엇입니까?
답변1
목적은 일반 사용자가 su 명령을 실행하는 것을 방지하는 것입니다(su는 sudo가 명령을 실행하고 su가 새 사용자로 새 세션을 시작하고 사용자가 종료를 실행할 때까지 계속된다는 점을 제외하면 sudo와 유사합니다).
su의 기본 모드는 4755 또는 rwsr-xr-x이며, "s"는 명령이 set-UID임을 나타냅니다. 즉, 명령을 실행한 사용자가 아니라 항상 명령을 소유한 사용자로 실행된다는 의미입니다. 그것) . 이 경우 su는 루트가 소유하므로 항상 루트 권한으로 실행됩니다.)
su에는 이를 실행하는 사용자가 다른 사용자가 될 수 있는 권한이 있는지 확인하는 자체 보안 조치가 있지만(일반적으로 다른 사용자의 비밀번호를 요청하여) su에는 공격자가 어떻게든 허용하는 보안 구멍이 있을 수 있습니다. 승인 없이 다른 일을 하도록 설득합니다.
모드를 4750으로 변경하면 애초에 일반 사용자(root 및 sudo 그룹의 사용자 이외의 사용자)가 읽거나 실행하는 것을 방지하므로 공격자는 파일의 소유권을 변경하거나 모드를 변경해야 합니다. su의 이론적 취약점을 악용하기 전에 해당 파일에서 유효한 UID/GID를 변경하세요.
dpkg-statoverride 명령은 파일이 최신 버전으로 교체되더라도(즉, apt를 통해 업그레이드됨) 패키지 관리자에게 파일의 소유권/모드 값을 사용하도록 지시하기 때문에 이러한 상황에서 유용합니다. 즉, chown 및 chmod보다 지속성이 높습니다.
이 경우에 제가 권장하는 일반적인 전략은 다음과 같습니다. Linux/UNIX 시스템에서 su/sudo 또는 인증 구성 요소의 구성을 조정할 때마다 해당 서버에 대한 또 다른 ssh/putty 세션을 열고 루트로 로그인하여 실행합니다. 세션을 다른 창에서 열어 두십시오. 이렇게 하면 내가 뭔가를 엉망으로 만들고 나 자신을 잠그더라도 내가 깨뜨린 모든 것을 고칠 수 있는 로그인 세션이 있습니다.
답변2
사용자에 따라 이는 좋은 생각일 수도 있고 나쁜 생각일 수도 있습니다.
일반 사용자는 su
해당 계정의 비밀번호를 알고 있는 경우 이 명령을 사용하여 수퍼유저 계정뿐만 아니라 다른 계정에 로그인할 수 있습니다.
예를 들어 두 명의 사용자가 프로젝트에서 공동 작업을 하고 있는데 그 중 한 명(사용자 A)이 로그인되어 있고 다른 사용자(사용자 B)만 액세스할 수 있는 파일을 읽어야 하는 경우에 유용합니다. 간단히 실행
su -c 'cat /home/userB/file' userB >file
로그인한 사용자의 홈 디렉터리에 파일을 복사하는 데 사용할 수 있지만 이는 su
userA가 명령을 실행할 수 있는 경우에만 가능합니다.
PostgreSQL 데이터베이스 서버에서 데이터베이스 관리자는 종종 postgres
데이터베이스 서버가 실행되는 동안 수행할 수 없는 일부 유지 관리 작업을 수행하도록 사용자로 전환할 수 있습니다 su - postgres
.
이 명령에도 동일한 주의 사항이 적용됩니다 sudo
(이 명령과는 다르고 더 복잡합니다. su
기본 구성일 뿐이므로 이 명령은 주로 그룹에 유용합니다 sudoers
. 해당 그룹은 모든 명령을 실행할 수 있기 때문 root
입니다. 그러나 다음과 같은 사용자 정의 규칙을 추가하는 경우 모든 사용자가 인수 없이 실행할 수 있도록 하려면 그룹 외부 사용자에 대한 실행 권한이 updatedb
필요합니다 .sudoers
sudo
게다가 su
setuid뿐만 아니라
sg
(그룹 비밀번호가 설정되어 있으면 임시 그룹 가입이 허용됩니다.)passwd
(비밀번호 변경 허용)chfn
(사용자 정보 변경 허용)chsh
(기본 쉘 변경 허용)
그리고 다른 몇몇. 이러한 도구는 명령과 많은 코드를 공유하므로 su
모드를 개별적으로 변경해도 /bin/su
많은 이점을 얻을 수 없으며 모든 도구의 모드를 변경하면 특히 passwd
.
답변3
강화된 서버에서는 가능한 한 적은 수의 setuid/setgid 바이너리, 특히 특정 도구가 필요하지 않은 사용자 계정으로 실행할 수 있는 바이너리를 원합니다. 그 이유는 다음과 같습니다.
누군가의 사용을 감시하기 위해 이러한 도구를 정확하게 신뢰하지는 않습니다. 보안 연구원과 공격자는 사용자가 이러한 규정을 우회할 수 있도록 하는 프로그램이나 종속성에서 버그를 발견하고 적극적으로 찾는 경우가 많습니다. 잘못된 구성(su 동작은 PAM 라이브러리 구성에 따라 다름)으로 인해 동일한 문제가 발생할 수 있습니다. 따라서 특정(서비스 또는 사용자) 계정이 실행할 수 있는 모든 setuid/setgid 바이너리는 원치 않는 루트 액세스 권한을 얻을 수 있는 잠재적인 벡터입니다.
이러한 소프트웨어의 알려진 문제로 인해 패치/업데이트가 신속하게 제공되는 경우가 많지만, 강제로 신속하게 설치하면 중단이 발생할 수 있으며, 일부 취약성은 공급업체를 포함한 모든 사람에게 알려지지 않을 수도 있습니다.
따라서 긴급한 문제를 해결할 가능성을 최소화하려면 다음을 수행하는 것이 좋습니다.https://stackoverflow.com/questions/2189976/find-suid-and-gid-files-under-root, 그런 다음 이들 중 어떤 것을 제거할 수 있는지 조사합니다(주로 전용 서버를 실행 중이고 수행 중인 작업을 알고 있는 경우). 이러한 변경 사항을 영구적으로 유지하려면 패키지 관리 시스템에서 지원하는 dpkg-statoverride와 같은 방법을 사용하는 것이 가장 좋습니다.
레거시 NFS의 특정 설정에서 "su"에 대한 액세스를 제한하는 또 다른 이유가 있습니다. 본질적으로 정치적인 이유로 루트 계정에 대한 제한이 있을 수 있습니다(일부 사용자는 정치적인 이유로 계정에 액세스할 수도 있습니다. 그럼에도 불구하고 이는 좋지 않습니다). 연습) su는 NFS 마운트의 root_squash 플래그를 우회하기 때문에 간단합니다.