나는 bash 스크립트를 가지고 있습니다 (x11docker) 일부 명령은 루트( docker
)로 실행해야 하고, 일부 명령은 권한이 없는 사용자(예: X 서버 Xephyr
)로 실행해야 합니다. 스크립트에서 때때로 비밀번호를 묻는 메시지가 표시됩니다. 먼저 시스템을 구성할 필요 없이 모든 Linux 시스템에서 실행되어야 합니다.
일부 시스템에서는 이를 사용 su
하고 일부 시스템에서는 이를 사용하여 sudo
루트 권한을 얻습니다. 어느 것이 유효한지 어떻게 확인할 수 있나요? 나는 노력했다 sudo -l docker
. 그것이 허용되는지 알려줄 것입니다 sudo docker
. 안타깝게도 이 정보에도 비밀번호가 필요합니다.
요점은 루트에 비밀번호가 있을 수도 있고 없을 수도 있고(사용하려면 비밀번호가 필요함 su -c
) sudo
docker 실행이 허용되거나 허용되지 않을 수도 있다는 것입니다. 어느 것이 작업을 수행할지 결정하는 방법(=루트 권한으로 명령 실행)
/etc/sudoers
그룹 sudo를 확인하는 것은 좋은 추측일 수 있지만 그룹 sudo 임의 루트 액세스를 허용하도록 구성되었는지 알려주지 않으므로 신뢰할 수 없습니다 . 또한 사용자가 sudo 그룹의 구성원이 아니더라도 docker
접근을 허용할 수 있습니다 ./etc/sudoers
pkexec
해결책이 되어야 하지만 신뢰할 수는 없습니다. 비밀번호 프롬프트는 콘솔에서 실패하고, 다른 X 서버에서도 실패하고 DISPLAY=:0
, OpenSuse에서도 전혀 실패합니다.
현재 이 스크립트는 기본적으로 사용되며 , 사용을 허용하는 su
스위치가 있습니다 . 가능하지만 예쁘지는 않습니다.--sudo
sudo
logname
저는 스크립트를 루트로 실행하고 , 및 를 사용하여 SUDO_USER
권한이 없는 "실제" 사용자를 확인할 수 있는 업데이트를 작업 중입니다 PKEXEC_UID
. 장난스럽지도 않습니다.
su
또는 을 사용해야 하는지 알 수 있는 방법이 있나요 sudo
?
답변1
최소한 root
비밀번호가 있는지 테스트할 수 있습니다. 이 경우 다음을 시도해 볼 수 있습니다 sudo
.
if [ foo = "$(echo | su -c "echo foo")" ]; then
su -c whatever
else
sudo whatever
fi
답변2
다른 옵션 없이 su 명령을 실행하면 슈퍼유저(또는 루트 사용자)로 전환됩니다. 루트 계정의 비밀번호를 입력해야 합니다. 하지만 이것이 su 명령이 할 수 있는 전부는 아닙니다. 이를 사용하여 모든 사용자 계정으로 전환할 수 있습니다. sub bob 명령을 실행하면 Bob의 비밀번호를 묻는 메시지가 표시되고 쉘은 Bob의 사용자 계정으로 전환됩니다.
루트 셸에서 명령을 실행한 후 루트 셸을 종료하고 제한된 권한 모드로 돌아가려면 종료를 입력해야 합니다.
Sudo는 루트 권한으로 단일 명령을 실행합니다. sudo 명령을 실행하면 루트로 명령을 실행하기 전에 현재 사용자 계정의 비밀번호를 묻는 메시지가 표시됩니다. 기본적으로 Ubuntu는 비밀번호를 15분 동안 기억하고 15분이 지나기 전까지는 비밀번호를 다시 묻지 않습니다.