Erro de sintaxe do arquivo sudoers ao executar comandos sudo
Summary: Depois de configurar uma função, você não consegue executar comandos sudo e é apresentado um erro de sintaxe no arquivo sudoers.
Symptoms
Ao executar um "sudo", ele pode falhar em um ou vários nós, por exemplo:
cluster-1# isi_for_array -s sudo date
cluster-1: Fri Sep 12 16:58:29 CDT 2014
cluster-2: Fri Sep 12 16:58:30 CDT 2014
cluster-3: sudo: >>> /usr/local/etc/sudoers: syntax error near line 124 <<<
cluster-3: sudo: parse error in /usr/local/etc/sudoers near line 124
cluster-3: sudo: no valid sudoers sources found, quitting
cluster-3: sudo: unable to initialize policy pluginCause
Isso pode ocorrer por vários motivos:
1. O usuário ou grupo adicionado a uma função não pode ser resolvido nos nós afetados:
Nos nós que exibem o problema, você pode ver que o usuário ou grupo que foi adicionado não pode ser resolvido:
cluster-1# isi_for_array -n3 'isi auth users view domain\\group'
cluster-3: Failed to find group for 'GROUP:domain\group': No such group
Como o usuário ou o grupo não pode ser resolvido, o nó não consegue localizar um GID/UID para o sudoers e olhando para o /usr/local/etc/sudoers :
cluster-1# isi_for_array -s "egrep -i 'user_alias.*newrole' /usr/local/etc/sudoers"
cluster-1: User_Alias NEWROLE = %#1000010
cluster-2: User_Alias NEWROLE = %#1000010
cluster-3: User_Alias NEWROLE =
Observe que o UID/GID não foi preenchido, o que resulta em um erro sintático.
2. A função criada contém um hífen no nome:
cluster-1# isi auth roles view test-role
Name: test-role
Description: -
Members: DOMAIN\user
Privileges
ID : ISI_PRIV_LOGIN_SSH
Read Only : True
ID : ISI_PRIV_AUTH
Read Only : False
cluster-1% sudo date
sudo: >>> /usr/local/etc/sudoers: syntax error near line 124 <<<
sudo: parse error in /usr/local/etc/sudoers near line 124
sudo: no valid sudoers sources found, quitting
sudo: unable to initialize policy plugin
Por exemplo, este erro existe na linha 124:
cluster-1# grep -n '' /usr/local/etc/sudoers | grep ^124
124:User_Alias TEST-ROLE = #1000003
3. O usuário ou grupo não tem um UID ou GID associado.
Resolution
1. Se os nós não conseguirem converter um nome de usuário ou grupo em um UID/GID, devemos adicionar o usuário/grupo conforme especificado pelo UID/GID.
Remova o nome de usuário ou grupo da configuração da função:
cluster-1# isi auth roles modify --role=newrole --remove-group=domain\\group
cluster-1# isi auth roles view newrole
Name: newrole
Description: -
Members: -
Privileges
ID : ISI_PRIV_LOGIN_SSH
Read Only : True
ID : ISI_PRIV_SMB
Read Only : False
Obtenha o UID/GID adequado para o usuário de um nó que possa executar a operação:
cluster-1# isi auth groups view domain\\group
Name: DOMAIN\group
DN: CN=group,CN=Users,DC=domain,DC=com
SID: S-1-5-21-463481935-3723234361-2963677383-1144
GID: 1000010
Domain: DOMAIN
Sam Account Name: group
Provider: lsa-activedirectory-provider:DOMAIN.COM
Generated GID: Yes
Aplique o UID/GID em vez do nome do grupo:
cluster-1# isi auth roles modify --role=newrole --add-gid=1000010
cluster-1# isi auth roles view newrole
Name: newrole
Description: -
Members: DOMAIN\group
Privileges
ID : ISI_PRIV_LOGIN_SSH
Read Only : True
ID : ISI_PRIV_SMB
Read Only : False
Nota: O mesmo pode ser feito para um usuário, substituindo "add-gid" por "add-uid".
A configuração do arquivo sudoers agora deve refletir corretamente o UID/GID:
cluster-1# isi_for_array -s "egrep -i 'alias.*newrole' /usr/local/etc/sudoers"
cluster-1: User_Alias NEWROLE = %#1000010
cluster-2: User_Alias NEWROLE = %#1000010
cluster-3: User_Alias NEWROLE = %#1000010
Além disso, os comandos sudo devem funcionar corretamente:
cluster-1# isi_for_array -s sudo date
cluster-1: Fri Sep 12 17:20:14 CDT 2014
cluster-2: Fri Sep 12 17:20:14 CDT 2014
cluster-3: Fri Sep 12 17:20:14 CDT 2014
2. Renomeie a função para que ela não contenha um '-'.
Renomeie a função para que ela não contenha um hífen:
cluster-1# isi auth roles modify --role=test-role --name=test_role
Observe que não há mais um erro de sintaxe:
cluster-1% % sudo date
Password:
3. O arquivo sudoers requer um UID ou GID para identificar usuários e grupos, garantindo que todos os usuários e grupos tenham um UID ou GID associado.