博文参考
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
[root@centos7 ~]# echo aa > /testdir/file1
[root@centos7 ~]# echo cc > /testdir/file2
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 ….因为*代表任意字符,故后面可以跟上任何文件
**粗体** _斜体_ [链接](http://example.com) `代码` - 列表 > 引用
。你还可以使用@
来通知其他用户。