Como faço login como usuário não interativo? (por exemplo, mysql)

0

Eu preciso executar um comando mysql_upgrade que, quando executado como root, retorna

Looking for 'mysql' as: mysql
Looking for 'mysqlcheck' as: mysqlcheck
Running 'mysqlcheck' with connection arguments: '--port=3306' '--socket=/var/lib/mysql/mysql.sock' 
mysqlcheck: Got error: 1045: Access denied for user 'root'@'localhost' (using password: NO) when trying to connect
FATAL ERROR: Upgrade failed

Então, decidi fazer login como usuário mysql . Como posso fazer isso?

Eu configurei a senha para o usuário mysql com passwd e tente efetuar login:

$ ssh -l mysql 12.34.56.78
[email protected]'s password: 
Permission denied, please try again.

Eu efetuei login como root e configurei o shell para mysql com chsh -s /bin/bash mysql . Eu verifiquei que /etc/ssh/sshd_config ' AllowUsers entry contém o usuário mysql e DenyGroups contém apenas deniedssh ; o último grupo não contém o usuário mysql :

# getent group deniedssh
deniedssh:x:500:

O que posso fazer para efetuar login como o usuário não interativo mysql ?

    
por Nickolai Leschov 25.04.2014 / 20:06

2 respostas

1

Seu raciocínio é falho, você não precisa fazer login no shell como o usuário mysql. As falhas de autenticação que você vê vêm do mysqld, você precisa dizer ao mysql_upgrade qual nome de usuário e senha usar para falar com o mysql, a autenticação unix não está envolvida de forma alguma aqui.

    
por 27.04.2014 / 12:37
0

Este é um caso de uso comum para sudo , que permite executar comandos (dependendo da configuração até mesmo um shell) como qualquer usuário que o administrador do sistema concedeu a você (não apenas root , como a maioria dos novatos pensar).

Dependendo da sua configuração de sudo , você poderá fazer apenas

$ sudo -s -u mysql

como sua conta de usuário »normal«. Você pode verificar quais usuários você pode se tornar emitindo

$ sudo -l

Isso pode parecer com o seguinte (minha instalação local e meu usuário »normal«):

$ sudo -l
Matching Defaults entries for aw on swiftsure:
    env_keep+=HOME, env_keep+=XDG_SESSION_COOKIE, env_keep+="XMODIFIERS GTK_IM_MODULE QT_IM_MODULE QT_IM_SWITCHER", insults, tty_tickets, editor=/usr/bin/vim, !lecture

Runas and Command-specific defaults for aw:
    Defaults>root targetpw, env_file=/etc/sudo/root.env

User aw may run the following commands on swiftsure:
    (ALL) ALL
    (ALL) NOPASSWD: /usr/bin/htop, /usr/sbin/iotop, /usr/sbin/powertop
    (ALL) NOPASSWD: /usr/bin/wpa_cli
$

As últimas linhas são as mais importantes. Neste exemplo, ele informa que o usuário aw pode executar todos os comandos ( ALL ) como cada usuário ( (ALL) ) e htop , iotop , powertop e wpa_cli como todos os usuários ( (ALL) ) sem precisar dar uma senha ( NOPASSWD ).

Se o usuário tiver uma entrada (ALL) ALL , você está bem e só pode emitir o comando acima para se tornar o usuário mysql . Caso contrário, talvez você queira editar o arquivo /etc/sudoers ( visudo ) e adicionar uma linha contendo

username      (ALL)=ALL

que permitiria que você se tornasse todo usuário (depois de digitar a senha de username ) ou algo como

username      (mysql)=ALL

que só permitiria que você se tornasse o usuário mysql .

    
por 25.04.2014 / 20:24

Tags