/usr/bin/su-to-root
의도적으로 루트 계정을 잠근 후 스크립트를 사용하는 방법은 무엇입니까?
Debian GNU/Linux 6.0.5 "squeeze"를 실행하면 "시스템 > 관리 > 시냅틱 패키지 관리자" 메뉴 항목에 기본 명령이 있는 것을 확인했습니다:
su-to-root -X -c /usr/sbin/synaptic
올바른 루트 비밀번호를 제공하더라도 실패합니다.
sudo passwd -l root
/etc/sudoers 파일을 통해 일반 사용자에게 sudo 액세스 권한을 부여한 후 명령을 통해 루트 계정을 잠갔습니다.
su-root를 통해남성페이지에서 특정 사용자를 사용하도록 명령을 수정해 보았습니다.
su-to-root -X -p "user" -c /usr/sbin/synaptic
그러나 이것은 작동하지 않는 것 같습니다.
두 경우 모두 세 번의 인증 실패 후 다음 메시지가 표시됩니다.
"관리자 권한 없이 실행하십시오. 변경 사항을 적용할 수 없습니다. 하지만 표시된 변경 사항을 내보내거나 다운로드 스크립트를 생성할 수는 있습니다.
어떤 아이디어가 있나요?
스크립트 추적:
k@bucket:/tmp$ bash -x /tmp/su-to-root -X -c /usr/sbin/synaptic
+ test -r /etc/su-to-rootrc
+ test -r /home/k/.su-to-rootrc
+ PRIV=root
+ COMMAND=
+ NEEDS=text
++ which gettext
+ gettext=/usr/bin/gettext
+ for i in '"$@"'
+ case "$prev" in
+ prev=-X
+ for i in '"$@"'
+ case "$prev" in
+ NEEDS=X11
+ prev=-c
+ for i in '"$@"'
+ case "$prev" in
+ COMMAND=/usr/sbin/synaptic
+ prev=/usr/sbin/synaptic
+ '[' -z /usr/sbin/synaptic ']'
++ id -u
+ euid=1000
++ id -u root
+ privid=0
+ test 1000 = 0
+ case $NEEDS in
+ test -z ''
+ which gksu
+ SU_TO_ROOT_X=gksu
+ test X = Xtrue
+ case $SU_TO_ROOT_X in
+ gksu -u root /usr/sbin/synaptic
k@bucket:/tmp$
그리고
k@bucket:/tmp$ bash -x /tmp/su-to-root -X -p k -c /usr/sbin/synaptic
+ test -r /etc/su-to-rootrc
+ test -r /home/k/.su-to-rootrc
+ PRIV=root
+ COMMAND=
+ NEEDS=text
++ which gettext
+ gettext=/usr/bin/gettext
+ for i in '"$@"'
+ case "$prev" in
+ prev=-X
+ for i in '"$@"'
+ case "$prev" in
+ NEEDS=X11
+ prev=-p
+ for i in '"$@"'
+ case "$prev" in
+ PRIV=k
+ prev=k
+ for i in '"$@"'
+ case "$prev" in
+ prev=-c
+ for i in '"$@"'
+ case "$prev" in
+ COMMAND=/usr/sbin/synaptic
+ prev=/usr/sbin/synaptic
+ '[' -z /usr/sbin/synaptic ']'
++ id -u
+ euid=1000
++ id -u k
+ privid=1000
+ test 1000 = 1000
+ sh -c /usr/sbin/synaptic
k@bucket:/tmp$
답변1
스크립트가 /usr/bin/su-to-root
비교되는 것 같습니다.UIDsu-to-root
계정 루트(기본값) 또는 사용자의 사용자 지정 계정 euid로 실행:
euid=$(id -u)
privid=$(id -u $PRIV)
if test "$euid" = "$privid"; then
sh -c "$COMMAND"
euid가 일치하면 su-to-root는 인증을 건너 sh -c /usr/sbin/synaptic
뛰고 gksu/kdesu/ktsuss/sux/etc를 건너뛰고 명령을 직접 실행합니다.
그러므로 호출하는 사용자는 루트 권한을 갖고 있고 인증되지 않았다고 가정하는 것 같습니다 /usr/bin/su-to-root
. 이는 데비안에서 유효한 가정을 나타내는 것 같습니다.
해결 방법으로 Debian 메뉴 항목 명령을 su-to-root -X -p "user" -c /usr/sbin/synaptic
에서 gksu -S /usr/sbin/synaptic
.
man gksu에서:
--sudo-mode, -S : gksu가 프로그램 실행을 위한 백엔드로 sudo(1)를 사용하도록 강제합니다.
이것은 내가 원하는 것을 수행하는 sudo를 강제하는 것 같습니다. 필요한 경우 Synaptic Package Manager가 인증합니다.
답변2
내용이 "SU_TO_ROOT_SU="sudo"인 "~/.su-to-rootrc"라는 파일을 만듭니다.
예:
echo 'SU_TO_ROOT_SU="sudo"'>~/.su-to-rootrc
또는 시스템 전체에 /etc를 생성하십시오. 이 rc 파일이 없는 su-to-root는 항상 su를 시도하지만 차단된 루트 계정에서는 작동하지 않습니다. rc 파일을 생성하면 대신 sudo를 사용하고 모든 것이 정상입니다.