登录
首页 >  数据库 >  MySQL

SSH安全通信与端口转发(二)

来源:SegmentFault

时间:2023-02-20 13:24:39 322浏览 收藏

怎么入门数据库编程?需要学习哪些知识点?这是新手们刚接触编程时常见的问题;下面golang学习网就来给大家整理分享一些知识点,希望能够给初学者一些帮助。本篇文章就来介绍《SSH安全通信与端口转发(二)》,涉及到MySQL、docker、Linux、python、centos,有需要的可以收藏一下

博文参考

http://www.178linux.com/48542
https://segmentfault.com/a/1190000010279082

利用openssl建立私有CA,完成证书颁发和管理

openssl配置文件中关于CA的配置段介绍

openssl的配置文件为/etc/pki/tls/openssl.cnf,其中定义了openssl完成CA工作时的相关属性定义

建立私有CA

在确定配置为CA的服务器上生成一个自签证书,为CA提供所需的目录及文件即可

        步骤:

        生成CA自己的私钥,而在openssl的配置文件中定义了私钥存放的位置为/etc/pki/CA/private/cakey.pem
        为CA提供工作所需要的目录及文件:
`
            mkdir /etc/pki/CA/{certs,crl,newcerts}  注意:如果目录不存在才创建

            touch /etc/pki/CA/{serial,index.txt}

            echo 01 >>/etc/pki/CA/serial

            创建两个CA工作需要用到的文件,serial为存放证书编号的文件,并且要给该文件提供一个初始的编号,标号必须是2位数字。

index.txt文件用于存放签署过的证书的索引

            (umask 077;openssl genrsa -out /etc/pki/CA/private/cakey.pem 2048 )
             生成CA自己的自签证书,而在openssl的配置文件中,也定义了自签证书的存放位置为/etc/pki/CA/cacert.pem

            发起签署CA证书的请求

            openssl req -new -x509 -key /etc/pki/CA/private/cakey.pem  -out /etc/pki/CA/cacert.pem -days 3650  

                表示发起CA证书签署请求,

                    -new表示这是一个新申请的签署请求

                    -x509 表示这是自签证书,该选项只有在CA为自己生成自签证书时使用

                    -key指明私钥的存放路径

                    -out 标明所生成的请求的文件存放路径,如果是自签证书,将直接生成签署过的证书,如果不是自签证书,则将生成的签署请求文件发送给CA服务器,由CA服务器根据请求文件生成证书文件

                    -days 指明申请的证书的有效期限为多少天

            命令执行后会要求填入一些信息:

                国家代码:CN

                省份:beijing

                城市:beijing

                公司名:nwc

                部门:ops

                持有者名称:ca.nwc.com(注意:此处最好与此CA服务器的主机名保持一致)

                管理员的邮件地址:nwc@nwc.com

另一个主机建立CA申请请求,CA进行签署颁发证书

    某服务器需要用到证书进行安全通行时,需要向CA服务器请求签署证书:

        步骤:

        在需要使用证书的服务器上建一个目录,生成私钥(真实环境中建议将该目录建在需要用到证书的服务的相关目录下,便于管理)

        生成签署请求

            openssl req -new -key /testdir/testssl/mykey.private -out /testdir/testssl/mykey.csr -days 365

            表示生成证书签署请求,使用的私钥文件路径为/testdir/testssl/mykey.private,生成的签署请求的文件为/testdir/testssl/mykey.csr,申请的证书有效期为365天

            执行命令后会要求填入一些信息:

                国家、身份、城市、单位、部门、持有者、管理员邮箱等

            注意:持有者要写成主机名, 否则可能造成后期用户访问时,提示证书与访问的主机名不一致,此处应为www.nwc.com
            将生成的请求文件拷贝到CA服务器上

            在CA服务器上进行签署,生成证书,在openssl的配置文件中,定义了签署完成的证书的存放位置为/etc/pki/CA/certs/目录下

            openssl ca -in /tmp/mykey.csr -out /etc/pki/CA/certs/mykey.crt -days 365

            表示签署证书,-in指明请求签署文件的路径,-out指明生成的证书的路径,-days表示签署多少天

            命令执行后,会让确认两次,确认好了之后,即完成了签署的动作,生成了签署过后的证书

        将签署的证书发给请求方        

证书的吊销

      在客户端获取要吊销的证书的serial
            openssl x509 -in /PATH/FROM/CERT_FILE -noout -serial -subject
        在CA上,根据客户提交的serial与subject信息,对比检验是否与index.txt文件中的信息一致
            吊销证书:
                openssl ca -revoke /etc/pki/CA/newcerts/SERIAL.pem

        生成吊销证书的编号(第一次吊销一个证书时才需要执行)
                echo 01 > /etc/pki/CA/crlnumber
        更新证书吊销列表
            openssl ca -gencrl -out /etc/pki/CA/crl/ca.crl
            查看crl文件:
            openssl crl -in /etc/pki/CA/crl/ca.crl -noout -text

利用gpg实现加解密

gpg实现对称加密

    对称加密file文件
            gpg -c file
            ls file.gpg
        在另一台主机上解密file
            gpg -o file -d file.gpg

gpg实现公钥加密

 在hostB主机上用公钥加密,在hostA主机上解密
        在hostA主机上生成公钥/私钥对
            gpg –gen-key
        在hostA主机上查看公钥
            gpg –list-keys
        在hostA主机上导出公钥到nwckey.pub

            gpg -a –export -o nwckey.pub
        从hostA主机上复制公钥文件到需加密的B主机上
            scp nwckey.pub HOST_B:/PATH/TO/SOMEWHERE

        在需加密数据的hostB主机上生成公钥/私钥对
            gpg –list-keys
            gpg –gen-key
        在hostB主机上导入公钥
            gpg –import nwckey.pub
            gpg –list-keys
        用从hostA主机导入的公钥,加密hostB主机的文件file,生成file.gpg
            gpg -e -r nwc file
            file file.gpg

        复制加密文件到hostA主机
            scp file.gpg HOST_A:/PATH/TO/SOMEWHERE
        在hostA主机解密文件
            gpg -d file.gpg
            gpg -o file -d file.gpg
        删除公钥和私钥
            gpg –delete-keys nwc
            gpg –delete-secret-keys nwc

ssh服务

SSH协议的基本概念

    SSH:Secure Shell

        监听在TCP协议的22号端口

        SSH协议版本:

            sshv1:基于CRC-32做MAC,因此不安全,建议勿用

            sshv2:基于双方主机协商选择最安全的MAC实现机制,建议使用。

                    sshv2基于DH实现秘钥交换,基于RSA或DSA实现身份认证

                    客户端通过检查服务器端的主机秘钥来判定是否与其进一步通信

        服务端程序为:openssh-server,配置文件为/etc/ssh/sshd_config

        客户端程序为:openssh-client,配置文件为/etc/ssh/ssh_config`

SSH服务器端的相关配置

       配置文件:/etc/ssh/sshd_config

        服务脚本:/etc/rc.d/init.d/sshd

        服务脚本配置文件:/etc/sysconfig/sshd

        获取关于服务配置文件的帮助:man sshd_config

        /etc/ssh/sshd_config配置文件中相关指令说明:(#开始的相关选项表示使用的是默认值)

                Port 22  指明ssh服务监听的端口

                ListenAddress IP_ADDR  表示监听的地址,可出现多次

                        0.0.0.0表示当前主机的所有地址

                Protocol 2  表示支持的ssh协议版本,建议是2

                SyslogFacility AUTHPRIV  表示日志记录的设施,要想知道该设置的具体日志放在哪里,则查看rsyslog的配置文件/etc/rsyslog.conf文件中的相关定义,此处相当于日志存在/var/log/secure日志中

                LogLevel INFO  表示定义记录的日志级别

                PermitRootLogin yes|no  是否允许管理员以ssh登录

                MaxAuthTries 6  表示认证时的重试次数,为此数字的一半,超过次数后会被锁定一定时间

                MaxSessions 10 表示支持的最大的ssh会话的个数

                AcceptEnv  接受的环境变量参数

                AllowUsers  接受那些用户使用ssh,做用户白名单,只要不在此名单内的用户,都不允许登录

                        如:AllowUsers nwc1 nwc2 nwc3 root

                AllowGroups  接受那些用户组使用ssh,组的白名单

                DenyUsers  不允许那些用户使用ssh,用户黑名单

                DenyGroups  不允许那些用户组使用ssh,组黑名单

                        白名单和黑名单不要同时使用

                X11Forwarding yes|no  是否转发图形窗口

                #KeyRegenerationInterval 1h  密钥的使用时间

                #ServerKeyBits 1024 密钥长度

                #LoginGraceTime 2m 登陆宽限期

                #PermitRootLogin yes root是否可以登录

                #StrictModes yes 严格模式,家目录 属主 属组

                PasswordAuthentication yes 是否使用用户名和密码的方式

                Kerberos集中认证管理

        使用SSH服务的最佳配置方案:

            1)仅适用sshv2版本

            2)限定仅允许哪些用户访问ssh服务

                Allowusers root vivek jerry

                白名单

                DenyUser saroj anjali foo

                黑名单

            3)配置空闲会话超时长

                ClientAliveCountMax  0 

                ClientAliveInterval  300

            4)使用iptables设置ssh服务安全访问策略

            5)改变默认的端口和监听的IP

                port 300

                ListenAddress 192.168.1.5

                ListenAddress 202.54.1.5

                勿使用默认22端口

            6)使用强密码

                生成随机密码的函数示例:

                genpasswd(){

                    local 1=$1

                    [ "$1" == "" ]&& 1=20

                    tr -dc A-Za-z0-9_/urandom | head -c ${1} | xargs

                }

            7)使用公钥认证

            8)禁止空密码登录

            9)使用前利用漏扫工具先评估下破解的可能性

                google:ssh best practice

            10)限制ssh访问频度

            11)记录好日志,经常做日志分析。

用户登录信息的获取

        /var/log/wtmp  用户成功登录的日志信息,也可直接用last命令显示

        /var/log/btmp  用户失败登录的日志信息,也可用lastb命令显示

        lastlog 每个用户最近一次成功登录的信息

基于SSH的客户端相关工具

     客户端的命令:ssh

        ssh [OPTIONS] USERNAME@HOST [COMMAND]

        常见选项:(如果不提供USERNAME,则会以当前系统上的用户,作为登录远程主机的用户,如果远程主机上的用户不存在,则无法连接)

            -p PORT  指定登录的端口(如果远程主机的ssh服务修改了默认监听的端口,则需要用-p指定端口),在生产环境中建议将SSH监听的端口改掉

            COMMAND  表示不登录对方主机,在远程主机执行命令,然后结果返回本机后退出

            -b:指定连接的源IP
            -v:调试模式
            -C:压缩方式
            -X: 支持x11转发
            -Y:支持信任x11转发
                ForwardX11Trusted yes
            -t: 强制伪tty分配
                ssh -t remoteserver1 ssh remoteserver2

配置基于秘钥方式进行SSH登录

 SSH的认证机制:

            基于口令

            基于秘钥:

                客户端在本地生成一对秘钥,客户端将公钥复制到服务器端,要登录的用户的家目录下的隐藏目录.ssh目录下一个名为authorized_keys或authorized_keys2文件中,这样即可实现无需密码登录ssh服务端

        配置过程:

            生成秘钥对

                ssh-keygen -t rsa -P ''

                生成的秘钥默认保存至当前用户家目录下的.ssh目录的id_rsa文件中,公钥在id_rsa.pub文件中

                -P 表示不指定使用秘钥文件时的密码,否则以后每次使用秘钥登录时,都要输入秘钥文件的密码

            复制秘钥至远程主机

                ssh-copy-id -i /PATH/TO/公钥文件 USERNAME@HOST

                表示将本机的公钥文件复制到哪个远程主机的哪个用户

基于ssh的复制文件命令:scp

     scp SRC1 SRC2 … DEST

        常用选项有:

            -r 当源是目录时,实现递归复制

            -p 复制时,保留源文件的复制和修改时间戳以及权限

            -q 复制时静默模式

            -C: 压缩数据流

            -P PORT  指定服务器端的端口(如果远程主机的ssh服务修改了默认监听的端口,则需要用-P指定端口)

        分两种情况:

            源文件在本机,目标为远程:

                scp /PATH/TO/FILE1… USERNAME@HOST:/PATH/TO/SOMEWHERE

                注意:源文件为目录时,要使用-r 选项,实现递归复制;多个源时,目标要是目录

            源文件在远程,目标为本机:

                scp USERNAME@HOST:/PATH/TO/FILE… /PATH/TO/SOMEWHERE

                注意:源文件为目录时,要使用-r 选项,实现递归复制,多个源时,目标要是目录

基于ssh的ftp协议的命令:sftp

    查看openssh是不是支持sftp,查看openssh的配置文件/etc/ssh/sshd_config里面,是否有

            Subsystem sftp /usr/libexec/openssh/sftp-server

        这一行的定义,如果有,则证明支持sftp

        用法:sftp USERNAME@HOST  指明以哪个用户登录哪个主机的ftp服务器,登录后可利用help获取ftp命令的使用格式

rsync命令(比scp更快,只复制不同的文件,对于相同的文件不复制)

 基于ssh和rsh服务实现高效率的远程系统之间复制文件

        使用安全的shell连接做为传输方式

            rsync –av /etc server1:/tmp 复制目录和目录下文件(源路径后面没有/)

            rsync –av /etc/ server1:/tmp 只复制目录下文件(原路径后面有/)

        常见选项:

            -n 模拟复制过程

            -v 显示详细过程

            -r 递归复制目录树

            -p 保留权限

            -t 保留时间戳

            -g 保留组信息

            -o 保留所有者信息

            -l 把符号链接文件做为符号文件进行复制(默认)

            -L 将软链接文件指向文件复制

            -a 存档模式,相当于 –rlptgoD,但不保留ACL( -A)和SELinux属性(-X)

SSH的端口转发

 什么是SSH端口转发?
            SSH 会自动加密和解密所有 SSH 客户端与服务端之间的网络数据。但是, SSH 还能够将其他 TCP 端口的网络数据通过 SSH 链接来转发,并且自动提供了相应的加密及解密服务。这一过程也被叫做“隧道”( tunneling),这是因为 SSH 为其他 TCP 链接提供了一个安全的通道来进行传输而得名。例如, Telnet, SMTP, LDAP 这些 TCP 应用均能够从中得益,避免了用户名,密码以及隐私信息的明文传输。而与此同时, 如果工作环境中的防火墙限制了一些网络端口的使用,但是允许SSH 的连接,也能够通过将 TCP 端口转发来使用 SSH 进行通讯

        SSH 端口转发能够提供两大功能:
            加密 SSH Client 端至 SSH Server 端之间的通讯数据
            突破防火墙的限制完成一些之前无法建立的 TCP 连接

        本地转发
            ssh -L localport:host:hostport sshserver
            ssh –L 9527:telnetsrv:23 -N sshsrv
            telnet 127.0.0.1 9527
                当访问本机的9527的端口时,被加密后转发到sshsrv的ssh服务,再解密被转发到telnetsrv:23
                data–>localhost:9527–>localhost:XXXXX–>sshsrv:22–>sshsrv:YYYYY–>telnetsrv:23
            选项:
                -f 后台启用
                -N 不开远程shell
                -g 启用网关功能

        远程转发:
            -R sshserverport:host:hostport sshserver
            ssh –R 9527:telnetsrv:23 –N sshsrv
                让sshsrv侦听9527端口的访问,如有访问,就加密后通过ssh服务转发请求到本机ssh客户端, 再由本机解密后转发到telnetsrv:23
                Data–>sshsrv:9527–>sshsrv:22–>localhost:XXXXX–>localhost:YYYYY–>telnetsrv:23

        动态端口转发:
            当用firefox访问internet时,本机的1080端口做为代理服务器, firefox的访问请求被转发到sshserver上,由sshserver替之访问internet
            在本机firefox设置代理socket proxy:127.0.0.1:1080
            #ssh -D 1080 root@sshserver

dropbear提供ssh服务

ssh协议的另一个实现: dropbear

编译安装dropbear准备:
    安装开发包组:yum groupinstall "Development Tools" -y
    下载源码包,假设为dropbear-2013.58.tar.bz2

安装:
     解压:tar xf dropbear-2013.58.tar.bz2
     查看安装的帮助手册:less INSTALL
     切换到解压后的目录,并执行./configure
     make,指定要安装那些工具:make PROGRAMS="dropbear dbclient dropbearkey dropbearconvert scp"
     make install,指定安装的工具:make PROGRAMS="dropbear dbclient dropbearkey dropbearconvert scp" install

启动ssh服务:
     ls /usr/local/sbin/ /usr/local/bin/
     /usr/local/sbin/dropbear -h
     mkdir /etc/dropbear
     dropbearkey -t rsa -f /etc/dropbear/dropbear_rsa_host_key -s 2048
     dropbearkey -t dss -f /etc/dropbear/dropbear_dsa_host_key
     dropbear -p :2222 -F –E #前台运行(因为本机有SSH,为了避免端口冲突,手动指定其运行在2222端口)
            dropbear -p :2222 #后台运行
客户端访问:
     ssh -p 2222 root@127.0.0.1
     dbclient -p 2222 root@127.0.0.1

aide监控文件安全性

aide是什么

    AIDE(Advanced Intrusion Detection Environment高级入侵检测环境)是一个入侵检测工具,主要用途是检查文件的完整性,审计计算机上的那些文件被更改过了。
    AIDE能够构造一个指定文件的数据库,它使用aide.conf作为其配置文件。 AIDE数据库能够保存文件的各种属性,包括:权限(permission)、索引节点序号(inode number)、所属用户(user)、所属用户组(group)、文件大小、最后修改时间(mtime)、创建时间(ctime)、最后访问时间(atime)、增加的大小以及连接数。 AIDE还能够使用下列算法: sha1、 md5、 rmd160、 tiger,以密文形式建立每个文件的校验码或散列号.
    这个数据库不应该保存那些经常变动的文件信息,例如:日志文件、邮件、 /proc文件系统、用户起始目录以及临时目录

AIDE安装及其配置文件

    安装:yum install aide

    其配置文件为/etc/aide.conf (指定对哪些文件进行哪些种类的检测)

    配置文件相关的定义:

[root@localhost ~]# cat /etc/aide.conf
@@define DBDIR /var/lib/aide    //定义aide的数据库文件
@@define LOGDIR /var/log/aide   //定义aide的日志文件
database=file:@@{DBDIR}/aide.db.gz   //定义aide比对时使用的数据库文件
database_out=file:@@{DBDIR}/aide.db.new.gz    //定义aide创建数据库时的数据文件
//创建好比对数据库后,数据库的名称默认就是new,如果要比对,需要将new去掉,然后利用去掉new后的数据进行验证
#p:      permissions  //定义文件权限的检测
#i:      inode:     //定义文件inode号的检测
#n:      number of links  //定义文件链接数的检测
#u:      user   //定义文件所属主的检测
#g:      group  //定义文件所属组的检测
#s:      size   //定义文件大小的检测
#b:      block count   //定义文件占用块数量的检测
#m:      mtime   //定义文件内容修改时间的检测
#a:      atime   //定义文件访问时间的检测
#c:      ctime   //定义文件修改时间的检测
#S:      check for growing size  
#acl:           Access Control Lists   //定义文件acl权限的检测
#selinux        SELinux security context   //定义selinux的检测
#xattrs:        Extended file attributes   //定义文件xattrs属性的检测
#md5:    md5 checksum  //定义MD5校验检测
#sha1:   sha1 checksum  //定义SHA1校验检测
#sha256:        sha256 checksum   //定义SHA256校验检测
#sha512:        sha512 checksum
#R:             p+i+n+u+g+s+m+c+acl+selinux+xattrs+md5   //定义一个检测项目的组,组名为R,检测的内容为后面各个单独属性的集合
#L:             p+i+n+u+g+acl+selinux+xattrs             //支持自定义的检测项目组
#E:             Empty group
#>:             Growing logfile p+u+g+i+n+S+acl+selinux+xattrs
ALLXTRAHASHES = sha1+rmd160+sha256+sha512+tiger
NORMAL = R+rmd160+sha256
/opt    NORMAL   //定义检测的文件路径,及对其采用哪种方式的检测,后面NORMAL为定义的一个检测项目的集合
/usr    NORMAL
/root   NORMAL
!/usr/src   //路径前面带!表示不检测
!/usr/tmp

使用流程

    初始化默认的AIDE的库:
        /usr/local/bin/aide –init
    生成检查数据库(建议初始数据库存放到安全的地方)
        cd /var/lib/aide
        mv aide.db.new.gz aide.db.gz
    检测:
        /usr/local/bin/aide –check
    更新数据库
        aide –update 
   

clipboard.png

[root@centos7 ~]# echo aa > /testdir/file1
[root@centos7 ~]# echo cc > /testdir/file2
clipboard.png

clipboard.png

clipboard.png

sudo相关内容

sudo的基础概念

     sudo能够授权指定用户在指定主机上运行某些命令。 如果未授权用户尝试使用 sudo,会提示联系管理员
    sudo可以提供日志,记录每个用户使用sudo操作
    sudo为系统管理员提供配置文件,允许系统管理员集中地管理用户的使用权限和使用的主机
    sudo使用时间戳文件来完成类似“检票”的系统,默认存活期为5分钟的“入场券”
    通过visudo命令编辑配置文件,具有语法检查功能,用visudo -c 可检查配置文件语法

sudo命令本身:

    sudo [-u user] COMMAND
        -V 显示版本信息等配置信息
        -u user 默认为root
        -l,ll 列出用户在主机上可用的和被禁止的命令
        -v 再延长密码有效期限5分钟,更新时间戳
        -k 清除时间戳,下次需要重新输密码(当用户使用sudo时,会要求输入用户密码,用户密码默认5分钟内有效,如果使用sudo -k则可以让密码立即失效,下次使用sudo又要使用密码)            

        -K 与-k类似,还要删除时间戳文件
        -b 在后台执行指令
        -p 改变询问密码的提示符号
            如 -p ”password on %h for user %p

        sudo –i –u nwc切换身份

sudo的配置文件(/etc/sudoers)

    配置文件: /etc/sudoers, /etc/sudoers.d/
    时间戳文件: /var/db/sudo
    日志文件: /var/log/secure

配置文件支持使用通配符glob:

        ? :前面的字符或词可出现一次或无
        * :前面的字符或词出现零次或多次
        [nwc]:匹配其中一个字符
        [^nwc]:除了这三个字符的其它字符
        \x : 转义
        [[alpha]] :字母 示例: /bin/ls [[alpha]]*

配置文件规则有两类;

        别名定义:不是必须的
        授权规则:必须的

一个sudo条目:

            who  which_host=(runas)  command

            在命令前可以使用标签NOPASSWD:就可以让用户在使用该命令时不用输入密码

        格式说明:
            user: 运行命令者的身份
            host: 通过哪些主机
            (runas):以哪个用户的身份
            command: 运行哪些命令

别名机制:类似组的概念,组里面多个角色

            who:User_alias

            which_host:Host_alias

            runas:Runas_alias

            command:Cmnd_alias

            别名必须全部而且只能全部使用大写英文字母的组合

        用户别名:User_alias 别名 =

            后面可以是:

                用户名

                用户UID,用#引用

                组名,用%引用

                组的GID,用%#引用

                还可以包含其他已经定义的用户别名

        主机别名:Host_Alias 别名 =

            后面可以是:

                    主机名

                    IP

                    网络地址

                    其他已经定义的主机别名

        以哪个身份运行:Run_Alias 别名 =

            后面可以是:

                    用户名

                    %组名

                    其他已经定义的runas别名

        命令别名:Cnmd_Alias 别名 =

            后面可以是:

                    命令路径(一般为绝对路径)

                    目录(此目录内的所有命令)

                    其他已定义的命令别名

sudo示例:

例如:以nwc用户以root身份运行useradd,usermod命令

           先visudo

           nwc ALL=(root) /usr/sbin/useradd,/usr/sbin/usermod

           当nwc用的时候格式为:sudo /usr/sbin/useradd newbee

例如:nwc ALL=(root)NOPASSWD:/usr/sbin/useradd,/usr/sbin/usermod

           表示nwc在使用useradd和usermod时都不需要输入密码

例如:nwc ALL=(root) NOPASSWD:/usr/sbin/useradd,PASSWD:/usr/sbin/usermod

           表示nwc在使用useradd时不要密码,usermod要密码

例如:

         定义一个用户组别名

             User_Alias USERADMIN = nwc,%newbee,%nwc

             组内包含nwc用户,newbee组和nwc组内的所有用户

         定义一个命令组别名

             Cmnd_Alias ADMINCOMMAND = /usr/sbin/useradd,/usr/sbin/userdel,/usr/bin/passwd [A-Za-z]*,!/usr/bin/passwd root

             表示定义useradd、userdel命令,passwd命令后必须跟字符,且不能对root进行passwd命令。

         添加条目:

             USERADMIN  ALL=(root)  NOPASSWD:ADMINCOMMAND

             表示USERADMIN别名内的所有用户,在所有主机上,以root身份,不需要密码,执行ADMINCOMMAND内的所有命令

例如:

        nwc ALL=(ALL) ALL
        %wheel ALL=(ALL) ALL

        表示nwc用户可以在任意主机上,以任意身份运行任意命令,wheel组类的用户可以在任意主机上,以任意身份运行任意命令                 例如:
        nwc ALL=(root) /sbin/pidof,/sbin/ifconfig
        %wheel ALL=(ALL) NOPASSWD: ALL

        表示nwc用户可以在任意主机上以root身份运行/sbin/pidof,/sbin/ifconfig命令

        wheel组类的用户可以在任意主机上,以任意身份无需密码运行任意命令

例如:

        User_Alias NETADMIN=user1,user2
        Cmnd_Alias NETCMD = /usr/sbin/ip
        NETADMIN ALL=( root) NETCMD

        表示定义一个用户别名NETADMIN,该别名内包含用户user1,user2

        定义一个命令别名NETCMD,包含命令/usr/sbin/ip

        NETADMIN内的用户能够在任意主机上,以root身份,运行NETCMD定义的命令,也就是user1和user2能在任意主机上以root身份运行ip命令

例如:

        User_Alias SYSADER=nwc,user1,%admins
        User_Alias DISKADER=tom
        Host_Alias SERS=www.nwc.com,10.1.32.0/24
        Runas_Alias OP=root
        Cmnd_Alias SYDCMD=/bin/chown,/bin/chmod
        Cmnd_Alias DSKCMD=/sbin/parted,/sbin/fdisk
        SYSADER SERS=(OP) SYDCMD,DSKCMD

        表示定义一个用户别名SYSADER,包含用户nwc,user1,和admins组内的所有用户

        定义一个用户别名DISKADER,包含用户tom

        定义主机别名SERS包含主机名为www.nwc.com的这台主机和10.1.32.0/24这个网络内的所有主机 

        定义一个运行身份的别名OP,包含身份是root

        定义一个命令别名SYDCMD,包含命令/bin/chown,/bin/chmod

        定义一个命令别名DSKCMD,包含命令/sbin/parted,/sbin/fdisk

        定义SYSADER用户别名的用户,在SERS定义的主机上,以root身份,运行SYDAMD和DSKCMD定义的命令,也就是nwc、user1和admins组内的所有用户,能够在www.nwc.com这台主机和10.1.32.0/24这个网络内的所有主机上,以root身份运行/bin/chown,/bin/chmod,/sbin/parted,/sbin/fdisk命令

        

例如:

        User_Alias ADMINUSER = adminuser1,adminuser2
        Cmnd_Alias ADMINCMD = /usr/sbin/useradd,/usr/sbin/usermod, /usr/bin/passwd [a-zA-Z]*,!/usr/bin/passwd root
        ADMINUSER ALL=(root) NOPASSWD:ADMINCMD,PASSWD:/usr/sbin/userdel

        表示定义一个ADMINUSER的用户别名,包括adminuser1和adminuser2

        定义一个ADMINCMD命令别名,包括useradd、usermod命令,passwd命令后面跟字母开头的字符串,但不能执行passwd root,也就是不能对root改密

        定义允许adminuser1和adminuser2用户能够在所有主机上,不用输入密码执行useradd、usermod、和passwd定义的相关命令,但是需要密码执行userdel命令

例如

        Defaults:nwc runas_default=tom
        nwc ALL=(tom,jerry) ALL

        表示授权nwc用户在所有主机上以tom或Jerry身份,运行所有命令

        上面的Defaults 表示当nwc用sodu执行命令时,如果不用-u指明以谁的身份,则默认以tom的身份执行命令

例如

        nwc 10.1.32.68,10.1.32.22 = (root)  /usr/sbin/,!/usr/sbin/useradd

        表示授权nwc用户在10.1.32.68和10.1.32.22主机上以root身份执行/user/sbin/下的所有命令,但是不包括useradd命令

例如

        nwc ALL=(ALL) /bin/cat /var/log/message*

        表示授权nwc用户在所有主机上,以任意身份,运行cat /var/log/message*命令

        注意,此种方式是非常危险的,因为用户可以利用命令 cat /var/log/message  /etc/shadow ….因为*代表任意字符,故后面可以跟上任何文件

终于介绍完啦!小伙伴们,这篇关于《SSH安全通信与端口转发(二)》的介绍应该让你收获多多了吧!欢迎大家收藏或分享给更多需要学习的朋友吧~golang学习网公众号也会发布数据库相关知识,快来关注吧!

声明:本文转载于:SegmentFault 如有侵犯,请联系study_golang@163.com删除
相关阅读
更多>
最新阅读
更多>
课程推荐
更多>
评论列表