regras sudo baseadas no host com sessão ssh interativa

regras sudo baseadas no host com sessão ssh interativa

Estou tentando configurar sudode forma que não precise digitar minha senha ao me conectar a partir de um intervalo de IP específico. Tentei fazer isso com a seguinte linha no meu /etc/sudoersarquivo:

%wheel  10.1.2.0/24 = (ALL)   NOPASSWD: ALL

visudonão dá erro quando fecho, então a sintaxe é válida. Mas quando eu faço login em um servidor na 10.1.2.0/24faixa de ip com um usuário que está no grupo wheel, ainda preciso fornecer a senha da conta:

[cybertinus@server ~]$ id
uid=500(cybertinus) gid=500(cybertinus) groups=500(cybertinus),10(wheel),48(apache)
[cybertinus@server ~]$ who
cybertinus     pts/0        2015-09-30 09:57 (10.1.2.3)
cybertinus     pts/1        2015-09-30 13:03 (10.1.2.3)
[cybertinus@server ~]$ sudo -i
[sudo] password for cybertinus:

O que notei, entretanto, é que a seguinte linha é adicionada /var/log/securequando eu insiro uma senha incorreta neste prompt:

Sep 30 13:04:31 server sudo: pam_unix(sudo-i:auth): authentication failure; logname=cybertinus uid=500 euid=0 tty=/dev/pts/1 ruser=cybertinus rhost=  user=cybertinus

rhost=está vazia. Portanto, minha teoria é que o sudo não transmite o host remoto da sessão ssh. Existe uma maneira de informar de qual host esta sessão sudointerativa está sendo executada?ssh

Eu sei que isso é um risco de segurança. Mas o intervalo de IP em questão é o intervalo de IP que uso na minha rede VPN. Ou seja: não está conectado diretamente à internet. Se um hacker entrar na minha rede VPN, terei outro problema;).

Para que você tenha uma visão completa, este é meu /etc/sudoersarquivo completo:

## Sudoers allows particular users to run various commands as
## the root user, without needing the root password.
##
## Examples are provided at the bottom of the file for collections
## of related commands, which can then be delegated out to particular
## users or groups.
##
## This file must be edited with the 'visudo' command.

## Host Aliases
## Groups of machines. You may prefer to use hostnames (perhaps using
## wildcards for entire domains) or IP addresses instead.
# Host_Alias     FILESERVERS = fs1, fs2
# Host_Alias     MAILSERVERS = smtp, smtp2

## User Aliases
## These aren't often necessary, as you can use regular groups
## (ie, from files, LDAP, NIS, etc) in this file - just use %groupname
## rather than USERALIAS
# User_Alias ADMINS = jsmith, mikem


## Command Aliases
## These are groups of related commands...

## Networking
# Cmnd_Alias NETWORKING = /sbin/route, /sbin/ifconfig, /bin/ping, /sbin/dhclient, /usr/bin/net, /sbin/iptables, /usr/bin/rfcomm, /usr/bin/wvdial, /sbin/iwconfig, /sbin/mii-tool

## Installation and management of software
# Cmnd_Alias SOFTWARE = /bin/rpm, /usr/bin/up2date, /usr/bin/yum

## Services
# Cmnd_Alias SERVICES = /sbin/service, /sbin/chkconfig

## Updating the locate database
# Cmnd_Alias LOCATE = /usr/bin/updatedb

## Storage
# Cmnd_Alias STORAGE = /sbin/fdisk, /sbin/sfdisk, /sbin/parted, /sbin/partprobe, /bin/mount, /bin/umount

## Delegating permissions
# Cmnd_Alias DELEGATING = /usr/sbin/visudo, /bin/chown, /bin/chmod, /bin/chgrp

## Processes
# Cmnd_Alias PROCESSES = /bin/nice, /bin/kill, /usr/bin/kill, /usr/bin/killall

## Drivers
# Cmnd_Alias DRIVERS = /sbin/modprobe

# Defaults specification

#
# Disable "ssh hostname sudo <cmd>", because it will show the password in clear.
#         You have to run "ssh -t hostname sudo <cmd>".
#
#Defaults    requiretty

#
# Refuse to run if unable to disable echo on the tty. This setting should also be
# changed in order to be able to use sudo without a tty. See requiretty above.
#
Defaults   !visiblepw

#
# Preserving HOME has security implications since many programs
# use it when searching for configuration files. Note that HOME
# is already set when the the env_reset option is enabled, so
# this option is only effective for configurations where either
# env_reset is disabled or HOME is present in the env_keep list.
#
Defaults    always_set_home

Defaults    env_reset
Defaults    env_keep =  "COLORS DISPLAY HOSTNAME HISTSIZE INPUTRC KDEDIR LS_COLORS"
Defaults    env_keep += "MAIL PS1 PS2 QTDIR USERNAME LANG LC_ADDRESS LC_CTYPE"
Defaults    env_keep += "LC_COLLATE LC_IDENTIFICATION LC_MEASUREMENT LC_MESSAGES"
Defaults    env_keep += "LC_MONETARY LC_NAME LC_NUMERIC LC_PAPER LC_TELEPHONE"
Defaults    env_keep += "LC_TIME LC_ALL LANGUAGE LINGUAS _XKB_CHARSET XAUTHORITY"

#
# Adding HOME to env_keep may enable a user to run unrestricted
# commands via sudo.
#
# Defaults   env_keep += "HOME"

Defaults    secure_path = /sbin:/bin:/usr/sbin:/usr/bin

## Next comes the main part: which users can run what software on
## which machines (the sudoers file can be shared between multiple
## systems).
## Syntax:
##
##  user    MACHINE=COMMANDS
##
## The COMMANDS section may have other options added to it.
##
## Allow root to run any commands anywhere
root    ALL=(ALL)   ALL

## Allows members of the 'sys' group to run networking, software,
## service management apps and more.
# %sys ALL = NETWORKING, SOFTWARE, SERVICES, STORAGE, DELEGATING, PROCESSES, LOCATE, DRIVERS

## Allows people in group wheel to run all commands
%wheel  10.1.2.3=(ALL)   NOPASSWD: ALL
%wheel  ALL=(ALL)   ALL

## Same thing without a password
# %wheel    ALL=(ALL)   NOPASSWD: ALL
## Allows members of the users group to mount and unmount the
## cdrom as root
# %users  ALL=/sbin/mount /mnt/cdrom, /sbin/umount /mnt/cdrom

## Allows members of the users group to shutdown this system
# %users  localhost=/sbin/shutdown -h now

## Read drop-in files from /etc/sudoers.d (the # here does not mean a comment)
#includedir /etc/sudoers.d

Você vê uma referência /etc/sudoers.dno final. Este é o conteúdo desse diretório:

[root@server ~]# ls /etc/sudoers.d | wc -l
0

Em outras palavras: In /etc/sudoers.dnão há nada que possa anular o /etc/sudoersarquivo normal.

Responder1

O recurso de lista de hosts sudoverifica/corresponde aos nomes de host, endereços IP, números de rede, grupos de rede do host no qual sudoé executado, não aqueles de um host remoto.

A ideia é que um único arquivo universal sudoerspossa ser distribuído para um grande número de servidores/estações de trabalho e certos privilégios sejam concedidos apenas a usuários em um subconjunto de sistemas.

Verifique a seção EXEMPLOS na parte inferior domanual

# /etc/sudoers
# Runas alias specification
Runas_Alias OP = root, operator

# Host alias specification
Host_Alias  SPARC = bigtime, eclipse, moet, anchor :\
        SGI = grolsch, dandelion, black :\
        ALPHA = widget, thalamus, foobar :\
        HPPA = boa, nag, python
Host_Alias  CUNETS = 128.138.0.0/255.255.0.0
Host_Alias  CSNETS = 128.138.243.0, 128.138.204.0/24, 128.138.242.0
Host_Alias  SERVERS = master, mail, www, ns

# example users
jack        CSNETS = ALL
jen         ALL, !SERVERS = ALL 
bob         SPARC = (OP) ALL : SGI = (OP) ALL

O usuário jack pode executar qualquer comando nas máquinas no alias CSNETS (as redes 128.138.243.0, 128.138.204.0 e 128.138.242.0). Dessas redes, apenas 128.138.204.0 possui uma máscara de rede explícita (em notação CIDR) indicando que é uma rede classe C. Para as outras redes no CSNETS, a máscara de rede da máquina local será utilizada durante a correspondência.

O usuário bob pode executar qualquer coisa nas máquinas SPARC e SGI como qualquer usuário listado no OP Runas_Alias ​​(root e operador).

O usuário jen pode executar qualquer comando em qualquer máquina, exceto aqueles nos SERVIDORES Host_Alias ​​(master, mail, www e ns).

informação relacionada