基于主机的sudo规则与交互式ssh会话

我试图以这种方式configurationsudo ,以便在从特定IP范围连接时不必input密码。 我试图在我的/etc/sudoers文件中使用以下行:

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

当我closures它时, visudo不会给出错误,所以语法是有效的。 但是当我从10.1.2.0/24 ip范围内的一个服务器login到一个轮组中的用户时,我仍然需要提供这个帐户的密码:

 [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: 

但是我注意到,当我在此提示下input不正确的密码时,以下行被添加到我的/var/log/secure

 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=是空的。 所以我的理论是,sudo不会从ssh会话传递远程主机。 有没有办法让sudo知道这个交互式ssh会话在哪个主机上运行?

我知道这是一个安全风险。 但是有关的IP范围是我在我的VPNnetworking上使用的IP范围。 换句话说:它不直接连接到互联网。 如果黑客进入我的VPNnetworking,我还有一个问题;)。

为了让你得到完整的图片,这是我的entier /etc/sudoers文件:

 ## 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 

你在最后看到/etc/sudoers.d的引用。 这是该目录的内容:

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

换句话说:在/etc/sudoers.d是没有任何东西可以否决正常的/etc/sudoers文件。

sudo的主机列表function检查/匹配执行sudo的主机的主机名,IP地址,networking号,networking组,而不是远程主机的networking组。

这个想法是,一个单一的通用sudoers文件可以分发到大量的服务器/工作站,并且某些特权只能授予系统子集上的用户。

检查手册底部的EXAMPLES部分

 # /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 

用户插孔可以在CSNETS别名(networking128.138.243.0,128.138.204.0和128.138.242.0)的机器上运行任何命令。 在这些networking中,只有128.138.204.0具有明确的networking掩码(以CIDR表示),表示它是C类networking。 对于CSNETS中的其他networking,匹配期间将使用本地机器的networking掩码。

用户bob可以在OP Runas_Alias(root和operator)中列出的任何用户在SPARC和SGI机器上运行任何操作。

用户jen可以在除SERVERS Host_Alias(master,mail,www和ns)之外的任何机器上运行任何命令。