su-to-root falha quando o usuário root é bloqueado?

3

Como posso usar o script /usr/bin/su-to-root depois de bloquear intencionalmente a conta raiz?

Executando o Debian GNU / Linux 6.0.5 "squeeze" e o item de menu "Sistema > Administração > Gerenciador de Pacotes Synaptic" tem o comando padrão:

su-to-root -X -c /usr/sbin/synaptic

que falha mesmo que eu forneça a senha root correta.

Eu tranquei a conta root (via comando sudo passwd -l root ) depois de conceder acesso ao usuário normal sudo via arquivo / etc / sudoers.

Por meio da página homem super-to-root , Eu tentei modificar o comando para usar um usuário específico:

su-to-root -X -p "user" -c /usr/sbin/synaptic

mas isso não parece funcionar.

Em ambos os casos, após três autenticações com falha, recebo a mensagem:

"Starting without administrative privileges. You will not be able to apply any changes. But you can still export the marked changes or create a download script for

Alguma idéia?

Vestígios do script:

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$ 

e

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$ 
    
por iokevins 10.09.2012 / 05:42

1 resposta

4

Parece que o script /usr/bin/su-to-root compara o euid do usuário que está executando su-to-root para o euid de qualquer conta raiz (padrão) ou a conta especificada pelo usuário:

euid=$(id -u)
privid=$(id -u $PRIV)
if test "$euid" = "$privid"; then
  sh -c "$COMMAND"

Se a correspondência do euid, su-to-root pula a autenticação e executa o comando sh -c /usr/sbin/synaptic imediatamente, ignorando gksu / kdesu / ktsuss / sux / e assim por diante.

Então, parece que /usr/bin/su-to-root assume que o usuário chamador tem privilégios de root e não autentica ... o que parece representar uma suposição válida no Debian.

Como solução alternativa, alterei o comando do item de menu do Debian de su-to-root -X -p "user" -c /usr/sbin/synaptic para gksu -S /usr/sbin/synaptic .

Do man gksu:

--sudo-mode, -S : Force gksu to use sudo(1) as its backend for running the programs.

Isso parece forçar o sudo, que representa o que eu quero. O Gerenciador de Pacotes Synaptic é autenticado, se necessário.

    
por 10.09.2012 / 06:19