Ambiente USER e USERNAME no CentOS 7

4

Eu tropecei em uma diferença no modo sudo alters env variables entre o CentOS 7.3 e o CentOS 7.4.

Aqui está um script que eu executei no CentOS 7.3 e 7.4:

#!/bin/bash
env | grep USER

sudo env | grep USER

unset USERNAME

env | grep USER

sudo env | grep USER

No CentOS 7.3 isso dá (formatado):

USER=gncs
USERNAME=gncs

[sudo] password for gncs: 
USERNAME=gncs
USER=root
SUDO_USER=gncs

USER=gncs

USER=root
USERNAME=root
SUDO_USER=gncs

No CentOS 7.4 isso dá (formatado):

USER=gncs
USERNAME=gncs

[sudo] password for gncs: 
USERNAME=gncs
USER=gncs    # !!!
SUDO_USER=gncs

USER=gncs

USER=root
USERNAME=root
SUDO_USER=gncs

Por que USER ainda gncs quando executo env com sudo no CentOS 7.4? Depois que eu desconfigurar a variável USERNAME , o comportamento é o mesmo.

Eu me deparei com esse problema ao executar o seguinte programa python com sudo :

import getpass
getpass.getuser()

Sob o Centos 7.3, ele retorna root , sob 7,4 gncs . Acredito que isso esteja relacionado às variáveis de ambiente mencionadas acima.

Informações adicionais:

$ sudo --version
Sudo version 1.8.19p2
Sudoers policy plugin version 1.8.19p2
Sudoers file grammar version 45
Sudoers I/O plugin version 1.8.19p2

$ sudo grep -r env /etc/sudo*
[sudo] password for gncs: 
/etc/sudoers:# is already set when the the env_reset option is enabled, so
/etc/sudoers:# env_reset is disabled or HOME is present in the env_keep list.
/etc/sudoers:Defaults    env_reset
/etc/sudoers:Defaults    env_keep =  "COLORS DISPLAY HOSTNAME HISTSIZE KDEDIR LS_COLORS"
/etc/sudoers:Defaults    env_keep += "MAIL PS1 PS2 QTDIR USERNAME LANG LC_ADDRESS LC_CTYPE"
/etc/sudoers:Defaults    env_keep += "LC_COLLATE LC_IDENTIFICATION LC_MEASUREMENT LC_MESSAGES"
/etc/sudoers:Defaults    env_keep += "LC_MONETARY LC_NAME LC_NUMERIC LC_PAPER LC_TELEPHONE"
/etc/sudoers:Defaults    env_keep += "LC_TIME LC_ALL LANGUAGE LINGUAS _XKB_CHARSET XAUTHORITY"
/etc/sudoers:# Adding HOME to env_keep may enable a user to run unrestricted
/etc/sudoers:# Defaults   env_keep += "HOME"
    
por gncs 20.09.2017 / 10:54

2 respostas

0

Aparentemente, o programa sudo foi alterado do CentOS 7.3 para o 7.4. Além disso, aprendi que no módulo getpass Python a função getuser usa variáveis de ambiente primeiro, o que não é o ideal.

Para resolver minha pergunta original, optei pelo seguinte código Python que parece ter o comportamento desejado.

import os
import pwd
pwd.getpwuid(os.getuid()).pw_name
    
por 24.09.2017 / 13:46
1

Houve mudanças no programa sudo no CentOS 7.4. A questão é realmente o usuário quer obter o nome de usuário do sistema operacional em um código python. Todos os métodos parecem depender das variáveis de ambiente, portanto, podem não estar funcionando em todos os cenários.

Você pode tentar estas opções para que pelo menos funcione no CentOS 7.3 e 7.4 em

import commands
username = commands.getoutput("logname")
print username
import os
os.getlogin()

Observação : Eu teria adicionado isso como comentário, mas comecei a responder perguntas e não tenho reputação suficiente para adicioná-lo como comentário.

    
por 24.09.2017 / 05:51