linux基础学习第二十三天之openssh、sudo

内容:

1、openssh的介绍和使用

(1)sshd的服务端配置

(2)基于密钥登陆ssh的使用

(3)scp的使用

(4)rsync的使用

2、sudo的介绍和配置使用

一、openssh

OpenSSH与SSH协议是远程登录的首选连接工具。它加密所有流量,以消除窃听,连接劫持和其它攻击。

OpenSSH的套件包括以下工具:

远程操作使用 SSH, SCP,和 SFTP。

密钥管理 ssh-add, ssh-keysign, ssh-keyscan和ssh-keygen

服务端组成 sshd, SFTP服务器和 ssh-agent的。

因此我们使用的ssh只是openssh的其中一个工具

1、ssh

ssh服务是C/S架构,分为客户端和服务端,都有各自的配置文件,ssh的登陆支持两种方式,一个传统的密码登陆,一种是基于密钥的登陆,下面会详细介绍

(1)sshd(server),sshd是ssh服务端的进程,默认开机会自动运行,可以在/etc/init.d目录下看到该开机服务脚本sshd

[11:35 [email protected]/etc/ssh]# ll /etc/init.d/sshd

-rwxr-xr-x. 1 root root 4621 May 11 07:10 /etc/init.d/sshd

sshd的配置文件位于/etc/ssh的目录下,该目录其实还包括的客户端的配置文件,其中pub结尾的文件表示存放公钥,对于的是私钥,其权限是严格控制的

[11:43 [email protected]/etc/ssh]# ll
total 156
-rw-------. 1 root root 125811 May 11 07:10 moduli
-rw-r--r--. 1 root root   2047 May 11 07:10 ssh_config
-rw-------. 1 root root   3879 May 11 07:10 sshd_config
-rw-------. 1 root root    668 Sep 17 18:29 ssh_host_dsa_key
-rw-r--r--. 1 root root    590 Sep 17 18:29 ssh_host_dsa_key.pub
-rw-------. 1 root root    963 Sep 17 18:29 ssh_host_key
-rw-r--r--. 1 root root    627 Sep 17 18:29 ssh_host_key.pub
-rw-------. 1 root root   1675 Sep 17 18:29 ssh_host_rsa_key
-rw-r--r--. 1 root root    382 Sep 17 18:29 ssh_host_rsa_key.pub

查看sshd的配置文件:

[12:14 [email protected]/etc/ssh]# cat sshd_config 
#       $OpenBSD: sshd_config,v 1.93 2014/01/10 05:59:19 djm Exp $
 
# This is the sshd server system-wide configuration file.  See
# sshd_config(5) for more information.
 
# This sshd was compiled with PATH=/usr/local/bin:/usr/bin
 
# The strategy used for options in the default sshd_config shipped with
# OpenSSH is to specify options with their default value where
# possible, but leave them commented.  Uncommented options override the
# default value.
 
# If you want to change the port on a SELinux system, you have to tell
# SELinux about this change.
# semanage port -a -t ssh_port_t -p tcp #PORTNUMBER
#
Port 22
#这里默认端口是22,可以改成其他端口,在作为服务器使用事建议改为其他端口,不要监听默认端口,不要监听默认端口,不要监听默认端口
#AddressFamily any
ListenAddress 0.0.0.0
#这里0.0.0.0代表监听在本机的所有地址上
#ListenAddress ::
 
# The default requires explicit activation of protocol 1
#Protocol 2
 
# HostKey for protocol version 1
#HostKey /etc/ssh/ssh_host_key
# HostKeys for protocol version 2
#这里是主机密钥的位置
HostKey /etc/ssh/ssh_host_rsa_key
#HostKey /etc/ssh/ssh_host_dsa_key
HostKey /etc/ssh/ssh_host_ecdsa_key
HostKey /etc/ssh/ssh_host_ed25519_key
 
# Lifetime and size of ephemeral version 1 server key
#KeyRegenerationInterval 1h
#ServerKeyBits 1024
 
# Ciphers and keying
#RekeyLimit default none
 
# Logging
# obsoletes QuietMode and FascistLogging
#SyslogFacility AUTH
 
#这是主机日志的记录方式。主机登录日志的位置在 /var/log/secure 
SyslogFacility AUTHPRIV
 
#LogLevel INFO
 
# Authentication:
 
#LoginGraceTime 2m
 
#PermitRootLogin yes
#这里表示是否允许管理员登录,改成no之后就只能允许普通用户登录
 
#StrictModes yes
#MaxAuthTries 6
#这是最大认证尝试次数,默认为6次
#MaxSessions 10
#这是最大会话数,默认10个
 
#RSAAuthentication yes
#PubkeyAuthentication yes
 
# The default is to check both .ssh/authorized_keys and .ssh/authorized_keys2
# but this is overridden so installations will only check .ssh/authorized_keys
 
AuthorizedKeysFile      .ssh/authorized_keys
#这是公钥默认的保存位置
 
#AuthorizedPrincipalsFile none
 
#AuthorizedKeysCommand none
#AuthorizedKeysCommandUser nobody
 
# For this to work you will also need host keys in /etc/ssh/ssh_known_hosts
#RhostsRSAAuthentication no
# similar for protocol version 2
#HostbasedAuthentication no
# Change to yes if you don‘t trust ~/.ssh/known_hosts for
# RhostsRSAAuthentication and HostbasedAuthentication
#IgnoreUserKnownHosts no
# Don‘t read the user‘s ~/.rhosts and ~/.shosts files
#IgnoreRhosts yes
 
# To disable tunneled clear text passwords, change to no here!
#PasswordAuthentication yes
#PermitEmptyPasswords no
 
#这里表示是否支持口令认证
PasswordAuthentication yes
 
# Change to no to disable s/key passwords
#ChallengeResponseAuthentication yes
ChallengeResponseAuthentication no
 
# Kerberos options
#KerberosAuthentication no
#KerberosOrLocalPasswd yes
#KerberosTicketCleanup yes
#KerberosGetAFSToken no
#KerberosUseKuserok yes
 
# GSSAPI options
GSSAPIAuthentication yes
GSSAPICleanupCredentials no
#GSSAPIStrictAcceptorCheck yes
#GSSAPIKeyExchange no
#GSSAPIEnablek5users no
 
# Set this to ‘yes‘ to enable PAM authentication, account processing,
# and session processing. If this is enabled, PAM authentication will
# be allowed through the ChallengeResponseAuthentication and
# PasswordAuthentication.  Depending on your PAM configuration,
# PAM authentication via ChallengeResponseAuthentication may bypass
# the setting of "PermitRootLogin without-password".
# If you just want the PAM account and session checks to run without
# PAM authentication, then enable this but set PasswordAuthentication
# and ChallengeResponseAuthentication to ‘no‘.
# WARNING: ‘UsePAM no‘ is not supported in Red Hat Enterprise Linux and may cause several
# problems.
UsePAM yes
 
#AllowAgentForwarding yes
#AllowTcpForwarding yes
#GatewayPorts no
X11Forwarding yes
#X11DisplayOffset 10
#X11UseLocalhost yes
#PermitTTY yes
#PrintMotd yes
#PrintLastLog yes
#TCPKeepAlive yes
#UseLogin no
UsePrivilegeSeparation sandbox          # Default for new installations.
#PermitUserEnvironment no
#Compression delayed
#ClientAliveInterval 0
#ClientAliveCountMax 3
#ShowPatchLevel no
 
#UseDNS no
#这里表示是否反解DNS,建议改为no
 
#PidFile /var/run/sshd.pid
#MaxStartups 10:30:100
#PermitTunnel no
#ChrootDirectory none
#VersionAddendum none
 
# no default banner path
#Banner none
 
# Accept locale-related environment variables
AcceptEnv LANG LC_CTYPE LC_NUMERIC LC_TIME LC_COLLATE LC_MONETARY LC_MESSAGES
AcceptEnv LC_PAPER LC_NAME LC_ADDRESS LC_TELEPHONE LC_MEASUREMENT
AcceptEnv LC_IDENTIFICATION LC_ALL LANGUAGE
AcceptEnv XMODIFIERS
 
 
# override default of no subsystems
#支持sftp远程连接
Subsystem       sftp    /usr/libexec/openssh/sftp-server
 
# Example of overriding settings on a per-user basis
#Match User anoncvs
#       X11Forwarding no
#       AllowTcpForwarding no
#       PermitTTY no
#       ForceCommand cvs server

此配置#注释的有提示默认的设置值,包括默认端口、默认登陆时间等等,可以按需要来进行设置调整,注意:修改完配置后,要重启服务或reload配置才能生效!

常用参数:

Port

ListenAddressip

PermitRootLoginyes

ClientAliveInterval0

UseDNSyes

限制可登录用户的办法:

AllowUsers user1 user2 user3

DenyUsers

AllowGroups

DenyGroups

一个安全的ssh服务器,应该进行严格的设置:
1、不要使用默认端口
2、禁止使用protocol version 1(在centos6、7版本的基本都是默认version2版本了)
3、限制可登录用户
4、设定空闲会话超时时长
5、利用防火墙设置ssh访问策略
6、仅监听特定的IP地址
7、使用基于密钥的认证
8、禁止使用空密码
9、禁止root用户直接登录
10、限制ssh的访问频度和并发在线数

(2)ssh客户端的使用:

语法:ssh[[email protected]]host [COMMAND]

ssh[-l user] host [COMMAND]

-p port:远程服务器监听的端口

-b:指定连接的源IP

-v:调试模式

-C:压缩方式

-X: 支持x11转发

-Y:支持信任x11转发

-t: 强制伪tty分配

其配置文件:

[[email protected] ssh]# vim /etc/ssh/ssh_config
 
#       $OpenBSD: ssh_config,v 1.28 2013/09/16 11:35:43 sthen Exp $
 
# This is the ssh client system-wide configuration file.  See
# ssh_config(5) for more information.  This file provides defaults for
# users, and the values can be changed in per-user configuration files
# or on the command line.
 
# Configuration data is parsed as follows:
#  1. command line options
#  2. user-specific file
#  3. system-wide file
# Any configuration value is only changed the first time it is set.
# Thus, host-specific definitions should be at the beginning of the
# configuration file, and defaults at the end.
 
# Site-wide defaults for some commonly used options.  For a comprehensive
# list of available options, their meanings and defaults, please see the
# ssh_config(5) man page.
 
Host *
#选项“Host”只对能够匹配后面字串的计算机有效。“*”表示所有的计算机。
ForwardAgent no
#“ForwardAgent”设置连接是否经过验证代理(如果存在)转发给远程计算机。
ForwardX11 no
#“ForwardX11”设置X11连接是否被自动重定向到安全的通道和显示集(DISPLAY set)。
RhostsAuthentication no
#“RhostsAuthentication”设置是否使用基于rhosts的安全验证。
RhostsRSAAuthentication no
#“RhostsRSAAuthentication”设置是否使用用RSA算法的基于rhosts的安全验证。
RSAAuthentication yes
#“RSAAuthentication”设置是否使用RSA算法进行安全验证。
PasswordAuthentication yes
#“PasswordAuthentication”设置是否使用口令验证。
FallBackToRsh no
#“FallBackToRsh”设置如果用ssh连接出现错误是否自动使用rsh。
UseRsh no
#“UseRsh”设置是否在这台计算机上使用“rlogin/rsh”。
BatchMode no
#“BatchMode”如果设为“yes”,passphrase/password(交互式输入口令)的提示将被禁止。当不能交互式输入口令的时候,这个选项对脚本文件和批处理任务十分有用。
CheckHostIP yes
#“CheckHostIP”设置ssh是否查看连接到服务器的主机的IP地址以防止DNS欺骗。建议设置为“yes”。
StrictHostKeyChecking no
#“StrictHostKeyChecking”如果设置成“yes”,ssh就不会自动把计算机的密匙加入“$HOME/.ssh/known_hosts”文件,并且一旦计算机的密匙发生了变化,就拒绝连接。
IdentityFile ~/.ssh/identity
#“IdentityFile”设置从哪个文件读取用户的RSA安全验证标识。
Port 22
#“Port”设置连接到远程主机的端口。
Cipher blowfish
#“Cipher”设置加密用的密码。
EscapeChar ~
#“EscapeChar”设置escape字符。

在这个配置文件中,我们一般只修port的端口,因为默认端口很容易受到攻击,ssh的默认端口为22号端口

2、基于密钥认证登陆

(1) 在客户端生成密钥对

ssh-keygen -t rsa #默认会生成一对密钥,并保存至家目录的.ssh隐藏目录中

(2) 把公钥文件传输至远程服务器对应用户的家目录

ssh-copy-id [-i[identity_file]] [[email protected]]host

(3) 测试

(4)重设私钥口令:#ssh-keygen –p

#生成密钥对
[[email protected] ~]# ssh-keygen  -t rsa #-t表示使用的加密类型,其中rsa1表示version1版本,rsa、dsa、ecdsa的加密对于的是version2版本
Generating public/private rsa key pair.
#这里询问你要把生成的密钥文件保存在哪里,默认是在家目录下的.ssh文件夹中,回车保存默认目录
Enter file in which to save the key (/root/.ssh/id_rsa): 
Created directory ‘/root/.ssh‘.
#这里是对密钥文件加密,不输入则表示不加密
Enter passphrase (empty for no passphrase): 
Your identification has been saved in /root/.ssh/id_rsa.
Your public key has been saved in /root/.ssh/id_rsa.pub.
The key fingerprint is:
04:9f:cb:9c:9d:1e:47:d7:e1:d4:c1:87:71:c3:a4:22 [email protected]
The key‘s randomart image is:
+--[ RSA 2048]----+
|      .       =O+|
|       o .    ===|
|        +E .....o|
|       + +.o..   |
|        S + .    |
|         . o     |
|          .      |
|                 |
|                 |
+-----------------+
#已经成功生成了一对密钥
[[email protected] ~]# ls /root/.ssh
id_rsa  id_rsa.pub
#其中id_rsa为私钥,id_rsa.pub为公钥
#在生成完密钥对之后将公钥上传给服务器对应用户的家目录
[[email protected] ~]# ssh-copy-id -i .ssh/id_rsa.pub [email protected]
The authenticity of host ‘172.18.0.9 (172.18.0.9)‘ can‘t be established.
ECDSA key fingerprint is 63:b9:6d:20:f0:22:b2:21:44:26:91:03:97:21:ff:b7.
Are you sure you want to continue connecting (yes/no)? yes       
/usr/bin/ssh-copy-id: INFO: attempting to log in with the new key(s), to filter out any that are already installed
/usr/bin/ssh-copy-id: INFO: 1 key(s) remain to be installed -- if you are prompted now it is to install the new keys
[email protected]‘s password:
 
Number of key(s) added: 1
 
Now try logging into the machine, with:   "ssh ‘[email protected]‘"
and check to make sure that only the key(s) you wanted were added.
#第一次输入密码后回车就上传成功了
然后尝试登录
[[email protected] ~]# ssh 172.18.0.9
Last login: Tue Mar 22 10:01:02 2016 from 172.18.0.239
#可以看出不需要密钥就成功登录到了172.18.0.9这台服务器上了

3、scp:远程复制命令

常用选项:

-r: 递归复制;

-p: 保持原文件的属性信息;

-q: 静默模式

-P PORT: 指明remote host的监听的端口;

下载:scp    远程主机上的账户@远程主机:远程主机对应的文件    本机目录

[[email protected] ~]# scp -r [email protected]:/root/tmp /root

上传:scp    本机文件    远程主机上的账户@远程主机:远程主机对应的目录

[[email protected] ~]# scp -r /root [email protected]:/root/tmp

4、rsync,功能与scp相似,都是具有复制功能,而且比scp更快,同时有一个特点,rsync只复制不同的文件

使用安全的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)

二、sudo使用

sudo:可以定义某用户以另一个用户的身份在某主机执行某命令(四个某),从而进一步提高的系统的安全性以及可追溯性

(1)sudo作用:

1.sudo能够授权指定用户在指定主机上运行某些命令。如果未授权用户尝试使用sudo,会提示联系管理员

2.sudo可以提供日志,记录每个用户使用sudo操作

3.sudo为系统管理员提供配置文件,允许系统管理员集中地管理用户的使用权限和使用的主机

4.sudo使用时间戳文件来完成类似“检票”的系统,默认存活期为5分钟的“入场券”

5.通过visudo命令编辑配置文件,具有语法检查功能

其配置文件为/etc/sudoers,该文件权限有严格控制,所以不建议直接vim该文件进行编辑,sudo提供了专门的具有语法检测的编辑工具:visudo

visudo编辑格式:who which_host=(who_runs) command

[15:16 [email protected]~]# ll /etc/sudoers
-r--r-----. 1 root root 3729 Dec  8  2015 /etc/sudoers

(2)sudo授权格式:授权某用户在某主机上以某用户的身份运行指定的管理命令(command一般要写绝对路径)

WHO     HOST=(WHOM)     COMMAND

(3)别名定义:别名必须使用全大写字符

WHO别名定义:

User_Alias   NAME = item1,item2,item3,….

item:可以是用户名,%组名,#UID,$#GID,User_Alias

HOST别名定义:

Host_Alias  NAME = item1,item2,item3,….

item:可以是hostname,ip,network,Host_Alias

WHOM别名定义:

Runas_Alias  NAME = item1,item2,item3,….

item:可以是用户名,%组名,#UID,$#GID,User_Alias

COMMANDb别名定义:

Cmnd_Alias  NAME = item1,item2,item3,…..

item:可以是命令,目录(目录下的所有命令),"sudoedit",Cmnd_Alias

(4)常用的标签

PASSWD: 执行操作时,需要输入密码,来验证用户身份

NOPASSWD: 执行操作时,无需输入密码,不能确定用户身份

(5)用户的使用

sudo[-u user] COMMAND

-V 显示版本信息等配置信息

-u user 默认为root

-l,ll 列出用户在主机上可用的和被禁止的命令

-v 再延长密码有效期限5分钟,更新时间戳

-k 清除时间戳,下次需要重新输密码

-K 与-k类似,还要删除时间戳文件

-b在后台执行指令

-p 改变询问密码的提示符号

如-p”password on %h for user %p"

给用户添加useradd的sudo权限,测试成功

[[email protected] ~]$ sudo useradd nihao
[sudo] password for hill: 
[[email protected] ~]$ tail -1 /etc/passwd
nihao:x:501:501::/home/nihao:/bin/bash
[[email protected] ~]$ useradd nihao
-bash: /usr/sbin/useradd: Permission denied
时间: 2024-10-07 03:50:35

linux基础学习第二十三天之openssh、sudo的相关文章

linux基础学习第二十三天linux安全和加密之SSL\TLS协议、CA、openssl

内容: 1.通信加密类型及算法 2.TLS/SSL协议的引入及其通信过程 3.CA.数字签名的引入 4.一个安全的数据通信交换过程 5.openssl工具的使用 6.自制私有根CA过程 一.通信加密类型及算法 数据加密通信的重要性不言而喻,美国NIST,为了保证计算机的安全,提出了几个要求: (1).数据要有保密性:数据保密性和隐私性:确保信息不被别人获取,个人存储的信息不能被别人收集到: (2).完整性:包括数据完整性和系统完整性:数据完整性确保数据和程序只能以特定权限的进行授权和改变,只能授

linux基础学习第十三天(数组、字符串变量处理)

2016-08-22 授课内容: 数组 高级字符串操作 一.数组 变量:存储单个元素的内存空间 数组:存储多个元素的连续的内存空间,相当于多个变量的集合. 数组名和索引 索引:编号从0开始,属于数值索引 bash的数组支持稀疏格式(索引不连续) 1.声明数组: declare -a ARRAY_NAME(并非强制声明,但最好按规范声明) declare -A ARRAY_NAME: 关联数组 2.数组元素的赋值: (1) 一次只赋值一个元素: ARRAY_NAME[INDEX]=VALUE [1

linux基础学习 第二章-第四章笔记

第二章 ####linux系统结构#### linux系统结构是倒树形 /bin        ###二进制可执行文件也就是系统命令 /sbin       ###系统管理命令存放位置 /boot       ###启动分区,负责系统启动 /dev        ###设备管理文件 /etc        ###大多数系统管理文件 /home       ###普通用户的家目录 /lib        ###32位系统库文件存放位置 /lib64      ###64位系统库文件存放位置 /me

linux基础学习第二十二天之AWK详解

内容: 1.awk输出(print.printf) 2.awk变量(内建变量和定义变量) 3.awk数组 4.awk重定向输出 5.awk操作符 6.awk常见模式类型 7.awk控制及循环语句 8.awk内置函数 awk:(其名称得自于它的创始人 Alfred Aho .Peter Weinberger 和 Brian Kernighan 姓氏的首个字母) awk是一款强大的报告生成器,不同于sed和grep,它的侧重点是如何把文本信息更好的展示出来,常用与统计和格式化输出. awk相当于微型

No_16_0324 Java基础学习第二十三天

文档版本 开发工具 测试平台 工程名字 日期 作者 备注 V1.0 2016.03.24 lutianfei none 登录注册IO版 如下代码仅为UserDaoImpl类文件,其他原码参考day22_login_regist工程 public class UserDaoImpl implements UserDao { // 为了保证文件一加载就创建 private static File file = new File("user.txt"); static { try { fil

linux基础学习 第二单元练习

第二单元练习 1.用命令和正则表达式按照要求建立文件 *)用一条命令建立12个文件WESTOS_classX_linuxY(X的数值范围为1-2,Y的数值范围为1-6) *)这些文件都包含在root用户桌面的study目录中 *)用一条命令建立8个文件redhat_versionX(x的范围为1-8) *)redhat_virsionX这些文件都包含在/mnt目录中的VERSION中 2.管理刚才信建立的文件要求如下 *)用一条命令把redhat_versionX中的带有奇数的文件复制到桌面的S

linux基础学习(十三)常用检索命令

###1.diff### diff            file  file1                ##比较两个文件的不同 -c                                  ##显示周围的行 -u                                  ##按照一定格式统一输出生成补丁 -r                                   ##比较两个目录中文件的不同 patch         file     file.path

linux基础学习笔记——操作大全

作者:liaoyi 更新时间:2014-6-2 ****************基本操作***************** 关机 shutdown -h now    root用户               init 0              root用户halt      root+一般用户poweroff 重启shutdown -r now    root用户init6     root用户reboot            root+一般用户 注意:1.shutdown 比较灵活,可

c/c++unix/linux基础学习笔记-常用命令和vi的使用

linux 基本命令的使用-命令在ubuntu下面执行,有些命令通用其他linux,有些不通用. 多条命令间用;号隔开,回车后可以一起执行. clear-前屏,pwd显示当前目录,cd跳转目录. sudo [命令]  -ubuntu 下以管理员身份运行命令. 一般情况下,运行当前目录下的程序,要用 ./文件名 执行. 查看当前shell名称:ps 进入另外一个shell,直接输入shell名称:ksh/tcsh/sh/bash,退出一个shell用:exit. 切换shell命令,如:exec