다음을 수행하는 것이 더 안전합니까?
$ sudo dnf update
[사용자 비밀번호를 입력하세요]
또는
$ su - [enter root password] # dnf update
sudo는 setuid-root를 활용하므로 sudo의 첫 번째 인수로 실행되는 프로세스는 sudo의 유효 ID인 루트로 실행되기 때문에 나는 항상 그것들이 완전히 똑같다고 가정했습니다.
내 질문은 다음과 같습니다.sudo는 결국 유효 ID를 일반 사용자의 ID로 삭제합니까? 그렇다면 sudo가 실행 중인 프로그램이 공격자에 의해 손상되면 위의 1번이 더 안전한 내기가 될 것입니다. 권한이 이미 삭제되었기 때문에 공격자가 루트로 실행되지 않을 가능성이 있기 때문입니다.
답변1
이 첫 번째 명령은 (아마도) 올바른 비밀번호를 요구하고 dnf update
루트로 실행한 후 종료됩니다.
$ sudo dnf update [enter user password]
이 두 번째 명령에는 루트의 비밀번호가 필요하며 루트 쉘을 시작합니다. 해당 쉘에서 다음을 실행합니다 dnf update
.
$ su - [enter root password] # dnf update
당신은 실제로 같은 것을 비교하는 것이 아닙니다. 이 두 명령을 비교할 수 있습니다. 둘 다 적어도 명령을 실행하는 루트 셸을 시작합니다.dnf update
sudo -s
dnf update
su -
dnf update
dnf update
또는 루트 권한 인스턴스를 시작한 다음 호출자의 셸로 다시 종료하는 두 명령을 비교할 수도 있습니다.
sudo dnf update
su root -c 'dnf update'
실제로 귀하가 묻고 있는 것은 루트 권한으로 단일 명령을 호출하는 것이 더 나은지, 아니면 하나 이상의 명령을 실행할 루트 권한 있는 셸을 시작하는 것이 더 나은지 여부입니다.
- 기능이나 다운로드가 어떤 방식으로든 손상된 경우
dnf
실행 방법은 중요하지 않습니다. 문제는 전혀 실행된다는 것입니다. - 시스템 손상에 대해 이야기하고 있다면 이는 사용자 비밀번호(
sudo
)와 루트 비밀번호(su
) 의 보안에 관한 것입니다. - 사용자를 신뢰할 수 있는지 고려 중이라면 여러 명령을 실행하는 루트 셸을 사용하는지, 한 번에 하나의 명령을 실행하는 루트 셸을 사용하는지 여부는 중요하지 않습니다. 문제는 명령을 루트로 실행할 수 있다는 것입니다.
개인적으로 필요에 따라 사용법을 혼합하고 일치시킵니다. 나는 거의 사용하지 않지만 빠른 일회성 또는 여러 명령을 실행해야 하는 짧은 세션(예: 데비안 패키지 관리 도구, 이어서 ) su
에 사용합니다 .sudo {command....}
sudo -s
apt-get update
apt-get upgrade
답변2
Yes는 sudo
하위 프로세스가 종료되면 권한을 삭제합니다. 이 경우에는 dnf
. su
하위 프로세스가 종료되면 권한이 삭제됩니다 . 이 경우 대화형 쉘입니다. 따라서 이 sudo
예에서는 권한을 더 빨리 삭제합니다.
sudo
여기서 다루지 않은 다른 장점도 있습니다. (예: sudoers
파일을 사용하여 각 사용자가 수행할 수 있는 작업과 수행할 수 없는 작업을 더 효과적으로 제어할 수 있습니다.)