sudo su "사용자 이름" 대 su "사용자 이름"

sudo su "사용자 이름" 대 su "사용자 이름"

차이점이 무엇인지 설명해 주세요.sudo su "사용자 이름"su "사용자 이름"

어느 쪽이 더 높은 권한을 갖고 있나요? 내가 루트에 로그인하면sudo su "사용자 이름", 나는 하나의 명령에만 루트입니까? 그렇다면 스크립트의 시작 부분은 제대로 작동하지만 나머지는 그렇지 않을 수 있습니까? 그래서 이 경우에는su "사용자 이름"더 높은 권한이 있기 때문에 제안됩니까? 두 명령의 차이점을 설명해 주세요. 감사합니다.

답변1

차이점은 다음과 같습니다.

  • su <someuser>사용자에 대한 쉘을 시작합니다 someuser. 루트가 아닌 경우 의 비밀번호를 묻는 메시지가 표시됩니다 someuser.
  • su(사용자 이름 없이) 사용자에 대한 쉘을 시작합니다 root(루트 비밀번호를 요청한 후).
  • sudo비밀번호를 묻고 (sudo 권한이 있다고 가정) 루트 권한으로 명령을 실행합니다 ( sudo reboot비밀번호를 묻고 컴퓨터를 재부팅합니다).
  • sudo su <somesuer>su루트 권한으로 실행됩니다 . 그래서 someuser의 비밀번호를 묻지 않습니다 . 그러나 그것은 요구할 것입니다당신의sudo 권한을 확인하기 위한 비밀번호입니다. 그 후에는 쉘이 시작됩니다사용자 someuser의 경우.

특권의 측면에서sudo su <someuser>, 또는 에 의해 열린 쉘에는 차이가 없습니다 su <someuser>. 이것그렇지 않다쉘 프로세스가 상위 프로세스의 권한으로 승격될 수 없기 때문에 보안 문제가 발생합니다.

~할 수 있다프로세스 트리를 보면 차이점을 알 수 있습니다. sudo su <someuser>쇼 (bash 가정):

+───bash───su───bash

쇼 중 su <someuser>:

+───bash───sudo───su───bash

다음 질문은 아마도 사용자 입력이 필요하지 않은 무인 스크립트에서 비밀번호를 전달하는 방법일 것입니다. 나는 두 가지 옵션이 있다고 생각합니다.

  • cron(또는 그 변형)에서 스크립트를 실행하고 루트로 실행합니다.
  • 자신의 계정에서 스크립트를 실행하고 다음과 같이 sudo의 -S 옵션을 사용하십시오. echo <yourpassword> | sudo -S su -l <someuser>또는 더 나은 방법은 다음과 같습니다 echo <yourpassword> | sudo -S su -l <someuser> -c '<somecommand>'. 비밀번호가 포함되어 있으므로 스크립트를 본인만 읽을 수 있는지 확인하세요. 보다 간접적으로, 비밀번호를 파일에 저장하고 이를 sudo로 분류할 수 있습니다. 그러면 스크립트를 읽을 수 있지만 비밀번호 파일은 읽을 수 없습니다.

관련 정보