인용하다:루트/수퍼유저가 읽기 보호된 파일을 읽을 수 있습니까?
내 Ubuntu 사용자 계정 이름은 "user-3121"이고 유형은 "Administrator"입니다. 유형이 "admin"인 "admin"이라는 계정도 있습니다. "admin"이 나로 로그인할 수 있는지 또는 "user-3121"에서 내 파일을 볼 수 있는지 어떻게 확인합니까?
/etc/sudoers
나는 이 문제를 다른 사용자들과 논의했고 내 파일을 보호하기 위해 수정을 시도했습니다 .
Cmnd_Alias SHELLS = /bin/sh,/bin/bash,/bin/ksh, /usr/bin/x11/passwd
Cmnd_Alias SU = /usr/bin/su,/bin/su,/usr/bin/gksudo,/usr/bin/sudo,/usr/bin/su bash,/usr/bin/sudo /bin/bash,/usr/sbin/visudo
Cmnd_Alias PASS = /usr/bin/passwd root,/bin/* * root,/bin/* * sysadmin,/bin/* * /home/sysadmin,/usr/bin/passwd
Cmnd_Alias EDIT= /bin/* /etc/sudoers,/bin/* sudoers,/bin/* /etc/passwd,/bin/* passwd,/bin/* /etc/group,/bin/* group,/bin/* /etc/shadow,/bin/* shadow,/*/*/[a-z]* /etc/sudoers,/*/*/[a-z]* /etc/passwd,/*/*/[a-z]* /etc/group,/*/*/[a-z]* /etc/shadow,/*/*/[a-z]* sudoers,/*/*/[a-z]* passwd,/*/*/[a-z]* group,/*/*/[a-z]* shadow
Cmnd_Alias CMDS = /usr/sbin/userdel * sysadmin,/usr/sbin/userdel sysadmin,/usr/sbin/deluser * sysadmin,/usr/sbin/deluser sysadmin
root ALL=(ALL) ALL, !CMDS
%admin ALL=(ALL) ALL, !SHELLS, !SU, !CMDS, !PASS, !EDIT
%sudo ALL=(ALL) ALL,!SHELLS, !SU, !CMDS, !PASS, !EDIT
admin ALL=(ALL) ALL
administrator ALL=(ALL) ALL
"관리자"가 여전히 내 데이터를 읽을 수 있는 경우 이러한 일이 발생하지 않도록 하려면 어떻게 해야 합니까? 또한 이 구성은 어떻게 작동합니까? "user-3121"이 일부 sudo 명령을 실행할 수 있지만 실제로는 "user-3121"이 어디에도 언급되어 있지 않습니까?
PS "root" 사용자의 비밀번호를 아는 사람은 저뿐이므로 "su" 명령을 사용하여 루트로 로그인할 수 있습니다.
답변1
좋아요, 이제 이게 무슨 말인지 이해가 되네요.
Cmnd_Alias CMDS = /usr/sbin/userdel * sysadmin, ... %admin ALL=(ALL) ALL, !SHELLS, !SU, !CMDS, !PASS, !EDIT
불행하게도 이것은 나쁜 생각입니다.
보안 측면에서 일반적인 원칙은 자신이 누구인지 설명할 수 있어야 한다는 것입니다.허용하다. 무엇인지 나열할 수 있는 경우는 의외로 드뭅니다.아니요허용하고 아무것도 놓치지 않도록 하세요.
구체적으로
$ cp /usr/sbin/userdel ./letsbefriends
$ sudo ./letsbefriends sysadmin
sudo su
(동일한 원칙은 / 를 구체적으로 차단하는 구성에도 적용됩니다 sudo sudo
.)
긍정적인 예로 다음 목록을 고려해보세요.허용하다"관리자" 사용자를 위한 작업[*]:
# admin can run `reboot`. (They can't run e.g. `reboot --force`).
admin ALL=(ALL) reboot ""
/etc/sudoers에 "user-3121"이 누락된 이유는 무엇입니까?
좋은 질문입니다! user-3121은 sudo의 회원입니다.그룹. /etc/sudoers
, 그룹은 line 과 일치합니다 %sudo
.
"네가 나에게 보여 준 그 트릭은 귀엽구나. 나도 그걸 막을 방법을 찾아낼 수 있을 거야"라고 생각할 수도 있습니다. 당신이 할 수 있는 일이 몇 가지 있습니다. 그러나 당신은 그것을 위해 논쟁하고 일반적인 원칙을 받아들이지 않으려 고 노력합니다.
다른 사람들은 다른 아이디어를 생각해 냈습니다. 무슨 소용이 있나요? [**]
$ sudo /proc/self/exe sh
다음은 차단하도록 시스템을 구성해야 하는 항목에 대한 두 가지 다른 예입니다. 당신은 내가 더 잘 알고 있다고 믿을 수 있습니다. 너이 복잡한 사용자 정의 구성을 작성하게 되었습니다. 복잡한 시스템에는 필연적으로 오류가 포함됩니다. 맞춤형 시스템을 만들고, 문제를 해결하고, 유지관리하고 싶으신가요? 보통 당신은 일을 해보고 싶어그리고운영 체제를 설치하면 개발, 문서화 및 지원에 들어가는 모든 작업의 이점을 누릴 수 있습니다.
[*] 실제로 sudo를 특정 목적으로 제한하는 것은 생각보다 어렵습니다. 실제 보안 장벽을 제공하기 위해 sudo 규칙에 의존하는 것은 일반적이지 않다고 생각합니다. 대신 사용자 자신을 보호하면서 특정 작업에 대한 권한을 위임하는 데 사용됩니다. 실수로 소중한 하드 드라이브나 네트워크 카드 펌웨어에 0을 쓸 가능성이 줄어듭니다.
[**] 스포일러:
sudo /proc/self/exe sh
쉘은 루트 사용자로 실행됩니다.
SU
차단 목록에 없는 대체 파일 이름을 사용하여 명령(sudo)을 실행하는 것과 동일한 기술을 사용하여 정의된 차단 목록을 우회합니다 . 따라서 두 번째 인스턴스는 sudo
사용자로 성공적으로 실행되고 있습니다 root
. 게시된 구성을 통해 root
사용자는 모든 명령을 실행할 수 있습니다 sudo
. 따라서 두 번째 sudo
인스턴스는 루트 사용자로 셸을 실행할 수 있습니다.
결과 쉘은 모든 명령을 실행하는 데 사용될 수 있습니다 root
. 쉘은 sudo를 사용하지 않으므로 를 찾지 않습니다 sudoers
. 예를 들어, 쉘을 실행 su
하여 비밀번호를 모르는 특정 사용자로 실행 중인 쉘에 로그인할 수 있습니다.
답변2
간단히 말해서, "관리자" 유형의 계정이라면 무엇이든 할 수 있다고 가정해야 합니다. (아래에 예시 제공)
(또한 사용자가 부트로더 메뉴 또는 펌웨어 구성 인터페이스(BIOS 설정 화면이라고도 함)에 액세스할 수 있는 경우에도 마찬가지입니다.
아래에서 원하는 명령을 실행할 수 있는 경우사용자 ID 0(예: sudo) 기본적으로 처음에 OS를 설치한 프로세스와 동일한 액세스 수준을 갖게 됩니다. 또는 다음 중 하나로구조판부팅 가능 - 모든 파일을 백업하거나 업그레이드 등을 위해 한 드라이브에서 다른 드라이브로 마이그레이션할 수 있습니다.
일부 TPM 소프트웨어(Ubuntu 또는 이와 유사하게 구현되지 않음)가 없으면 키로거를 설치하여 비밀번호를 캡처하거나 구현한 인증 확인을 비활성화할 수 있습니다.
사용자당암호화는 무단 액세스를 방지합니다. 2년 전에 마지막으로 업데이트된 Ubuntu 커뮤니티 문서에는 이 기능을 활성화할 수 있다고 명시되어 있습니다.https://help.ubuntu.com/community/EncryptedHome
파일 액세스 예시
예를 들어 일부 사용자는 chmod 0700
디렉토리를 보호하는 것이 가능하다고 생각하는 것 같습니다. 이것은 정확하지 않습니다. 작동하는 상황을 설계할 수 있지만 그 자체로는 충분하지 않습니다. Fedora Workstation 24, ext4 파일 시스템에서 실행되는 예:
$ mkdir secret # directory with "secret" contents
$ chmod 0700 secret # apply access control
$ ls -ld secret # show access control
drwx------. 2 alan-sysop alan-sysop 4096 Nov 13 20:31 secret
$ sudo -u nobody ls -l secret # other user ("nobody") is denied access
[sudo] password for alan-sysop:
ls: cannot access 'test': Permission denied
$ sudo ls -l secret # but root user bypasses access controls (CAP_DAC_OVERRIDE)
total 0
답변3
좋아요, 이런 질문이 있는 분들을 위해 채팅을 요약해 보겠습니다. 기본적으로 그가 한 일은 그의 홈 디렉토리의 권한을 다음으로 변경한 것입니다 0700
(그는 읽기 쓰기 실행만 가능함).
chmod 0700 /홈 디렉토리
그런 다음 나머지 채팅에서는 관리자가 su
해당 사용자를 제어할 수 없는지 확인하려고 시도합니다 sudo su
. (예, 일반적으로 다른 방법으로 파일을 얻을 수 있지만 권한이 없습니다.) 이를 위해서는 제공된 권한을 변경 하고 편집 권한 /etc/sudoers
만 있는지 확인해야 합니다 .root
/etc/sudoers