博文参考

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提供所需的目录及文件即可

        步骤:

        <1>生成CA自己的私钥,而在openssl的配置文件中定义了私钥存放的位置为/etc/pki/CA/private/cakey.pem
        <2>为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 )
             <3>生成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服务器请求签署证书:

        步骤:

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

        <2>生成签署请求

            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
            <3>将生成的请求文件拷贝到CA服务器上

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

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

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

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

        <5>将签署的证书发给请求方        

证书的吊销

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

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

利用gpg实现加解密

gpg实现对称加密

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

gpg实现公钥加密

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

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

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

        <8>复制加密文件到hostA主机
            scp file.gpg HOST_A:/PATH/TO/SOMEWHERE
        <9>在hostA主机解密文件
            gpg -d file.gpg
            gpg -o file -d file.gpg
        <10>删除公钥和私钥
            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_</dev/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服务端

        配置过程:

            <1>生成秘钥对

                ssh-keygen -t rsa -P ''

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

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

            <2>复制秘钥至远程主机

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

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

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

     scp SRC1 SRC2 … DEST

        常用选项有:

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

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

            -q 复制时静默模式

            -C: 压缩数据流

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

        分两种情况:

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

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

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

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

                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的端口转发

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

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

        <3>本地转发
            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 启用网关功能

        <4>远程转发:
            -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

        <5>动态端口转发:
            当用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准备:
    <1>安装开发包组:yum groupinstall "Development Tools" -y
    <2>下载源码包,假设为dropbear-2013.58.tar.bz2

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

启动ssh服务:
    <8> ls /usr/local/sbin/ /usr/local/bin/
    <9> /usr/local/sbin/dropbear -h
    <10> mkdir /etc/dropbear
    <11> dropbearkey -t rsa -f /etc/dropbear/dropbear_rsa_host_key -s 2048
    <12> dropbearkey -t dss -f /etc/dropbear/dropbear_dsa_host_key
    <13> dropbear -p :2222 -F –E #前台运行(因为本机有SSH,为了避免端口冲突,手动指定其运行在2222端口)
            dropbear -p :2222 #后台运行
客户端访问:
    <14> ssh -p 2222 root@127.0.0.1
    <15> 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的基础概念

    <1> sudo能够授权指定用户在指定主机上运行某些命令。 如果未授权用户尝试使用 sudo,会提示联系管理员
    <2>sudo可以提供日志,记录每个用户使用sudo操作
    <3>sudo为系统管理员提供配置文件,允许系统管理员集中地管理用户的使用权限和使用的主机
    <4>sudo使用时间戳文件来完成类似“检票”的系统,默认存活期为5分钟的“入场券”
    <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 ….因为*代表任意字符,故后面可以跟上任何文件

达龙
250 声望19 粉丝

天才是重复次数最多的人!