更改SSH服务端远程登录的配置
windows服务端的默认远程管理端口是3389,管理员用户是administrator,普通用户是guest。Linux的管理用户是root,普通用户默认有很多个,远程连接默认端口是22。
修改配置文件/etc/ssh/sshd_config,13行Port 22(默认端口22),改为Port 52113(范围0——65535);15行ListenAddress 0.0.0.0 (监听ip地址),改为ListenAddress 192.168.131.1;43行PermitRootLogion yes(root用户远程连接),改为PermitRootLogion no;122行UseDNS yes(DNS解析),改为UseDNS no;GSSAPIAuthentication yes(SSH连接慢),改为GSSAPIAuthentication no;
cat –n:查看行号
vim à:set nu à显示行号
diff比较2个文件的不同之处。
[[email protected] ssh]# diff sshd_config sshd_config.oldboy.20161204
vimdiff以高亮方式比较2个文件的不同之处。
[[email protected] ssh]# vimdiff sshd_config sshd_config.oldboy.20161204
sed替换:
- [[email protected] ssh]# sed -ir ‘13 iPort 52113\nPermitRootLogin no\nPermitEmptyPasswords no\nUseDNS no\nGSSAPIAuthenication no‘ sshd_config
重启生效:/etc/init.d/sshd restart(可能影响用户)或/etc/init.d/sshd reload(平滑重启)。
查看端口:
netstat -lntup|grep sshd
利用sudo控制用户对系统命令的使用权限
管理sudo命令:
visudo或vi /etc/sudoers,visudo更好。vi命令模式直接输入行数+gg到固定的行数,显示行号:set nu,yy(复制)+p(粘贴)复制当前行到下一行,shift+a到结尾处于编辑状态。
98+gg: 98 root ALL=(ALL) ALL
给oldboy授予root权限:
oldboy ALL=(ALL) ALL
oldboy ALL=(ALL) NOPASSWD:ALL(不提示输入密码)
用oldboy添加一个用户oldgirl:
- [[email protected] ~]$ sudo useradd oldgirl
- #输入oldboy密码
- [sudo] password for oldboy:
- #添加成功
- [[email protected] ~]$ tail -1 /etc/passwd
- oldgirl:x:501:501::/home/oldgirl:/bin/bash
给oldboy授予固定权限:
oldboy ALL=(ALL) /bin/touch,/usr/sbin/useradd
注意:需要命令的全路径,查看命令全路径which 命令,例如:
- [[email protected] ~]# which useradd
- /usr/sbin/useradd
- [[email protected] ~]# which touch
- /bin/touch
find查找:find / -type f -name "useradd"
whereis查找:whereis -b useradd
locate查找:locate useradd
环境变量:
PATH系统路径变量,执行ls、cp等非内置命令时,系统会查找PATH里对应的路径是否存在,如果没有就报告找不到该命令。当执行which cp来查看命令所在路径的时候,也就是从PATH变量去搜索。
PATH变量的临时修改 export PATH="/tmp:$PATH",永久生效将命令放到/etc/profile下,使用source /etc/profile 使得立刻生效。
Linux中文显示设置
查看当前字符编码:
- [[email protected] tmp]# cat /etc/sysconfig/i18n
- LANG="en_US.UTF-8"
- SYSFONT="latarcyrheb-sun16"
操作前先进行备份:cp /etc/sysconfig/i18n /etc/sysconfig/i18n.oldboy.20161205
- [[email protected] sysconfig]# sed -i ‘s#LANG="en_US.UTF-8"#LANG="zh_CN.UTF-8"#g‘ /etc/sysconfig/i18n
- [[email protected] sysconfig]# cat /etc/sysconfig/i18n
- LANG="zh_CN.UTF-8"
- SYSFONT="latarcyrheb-sun16"
- #立刻生效
- [[email protected] sysconfig]# source /etc/sysconfig/i18n
- [[email protected] sysconfig]# echo $LANG
- zh_CN.UTF-8
注意:客户端字符集需改为UTF-8。
设置Linux服务器时间同步
显示时间:date
修改时间:date –s "时间" àhwclock
显示日历:cal
同步互联网时间:
- [[email protected] tmp]# /usr/sbin/ntpdate time.nist.gov
定时任务执行同步:
- #每5分钟执行一次同步
- [[email protected] tmp]# echo "*/5 * * * * /usr/sbin/ntpdate time.nist.gov >/dev/null 2>&1" >>/var/spool/cron/root
- [[email protected] tmp]# crontab -l
- */5 * * * * /usr/sbin/ntpdate time.nist.gov >/dev/null 2>&1
下面三种方法是等价的:
/dev/null 空设备(黑洞)
错误和正确都输出到/dev/null:
1、1>/dev/null 2>/dev/null
2、1>/dev/null 2&1
3、&>/dev/null
时间同步架构
小规模时间同步架构:
大规模时间同步架构:
设置Linux默认历史记录数
命令如下,注意此时的配置仅临时生效。
- #设置历史记录数5
- [[email protected] ~]# HISTSIZE=5
把配置参数放入配置文件,使得永久生效。
- #设置终端超时时间
- [[email protected] ~]# echo ‘TMOUT=300‘ >>/etc/profile
- #设置历史记录数
- [[email protected] ~]# echo ‘HISTSIZE=5‘ >>/etc/profile
- #设置文件记录数cat ~/.bash_history
- [[email protected] ~]# echo ‘HISTFILESIZE=5‘ >>/etc/profile
TMOUT=10:连接的超时时间控制变量。
HISTSIZE=5:命令行的历史记录数量变量。
HISTFILESIZE=10:历史记录文件的命令行数量变量(~/.bash_history)。
历史记录清空:history -c。
删除指定历史记录:history -d 10(删除10号历史记录)。
加大服务器文件描述符
文件描述符的概念
1、表示形式为整数数字(0——65535)。
2、进程使用的时候会占用文件描述符(标识打开的文件)。
查看默认文件描述符
- [[email protected] ~]# ulimit -n
- 1024
3、调整文件描述符
方法一:
直接把ulimit -SHn 65535命令加入到/etc/rc.local,然后每次开机启动的时候生效。
- #临时生效
- [[email protected] ~]# ulimit -SHn 65535
- [[email protected] ~]# ulimit -n
- 65535
写入rc.local:
- cat >>/etc/rc.local<<EOF
- ulimit -HSn 65535
- ulimit -s 65535
- EOF
方法二:
在/etc/sercurity/limits.conf里面配置。
- [[email protected] ~]# echo ‘* - nofile 65535‘ >>/etc/security/limits.conf
- [[email protected] ~]# tail -1 /etc/security/limits.conf
- * - nofile 65536
调整内核参数文件/etc/sysctl.conf
vim编辑:shift+g切换到文件结尾
优化参数:
- net.ipv4.tcp_fin_timeout = 2
- net.ipv4.tcp_tw_reuce = 1
- net.ipv4.tcp_tw_recycle = 1
- net.ipv4.tcp_syncookies = 1
- net.ipv4.tcp_keepalive_time = 600
- net.ipv4.ip_local_port_range = 4000 65000
- net.ipv4.tcp_max_syn_backlog = 16384
- net.ipv4.tcp_max_tw_buckets = 36000
- net.ipv4.route.gc_timeout = 100
- net.ipv4.tcp_syn_retries = 1
- net.ipv4.tcp_synack_retries = 1
- net.core.somaxconn = 16384
- net.core.netdev_max_backlog = 16384
- net.ipv4.tcp_max_orphans = 16384
- #以下参数是对iptables防火墙的优化,防火墙不开会提示,可以忽略不理
- #net.nf_conntrack_max = 25000000
- #net.netfilter.nf_conntrack_tcp_timeout_established = 180
- #net.netfilter.nf_conntrack_tcp_timeout_time_wait = 120
- #net.netfilter.nf_conntrack_tcp_timeout_close_wait = 60
- #net.netfilter.nf_conntrack_tcp_timeout_fin_wait = 120
执行生效:sysctl -p
查看网络状态:netstat -an
隐藏Linux版本信息
控制Linux显示版本信息的文件
- [[email protected] ~]# cat /etc/issue
- CentOS release 6.6 (Final)
- Kernel \r on an \m
- [[email protected] ~]# cat /etc/issue.net
- CentOS release 6.6 (Final)
- Kernel \r on an \m
清空这个两个文件就可以了。
锁定关键系统文件,防止提权被篡改
命令:
- [[email protected] ~]# chattr +i /etc/passwd /etc/shadow /etc/group /etc/gshadow /etc/inittab
解除锁定:chattr -i
为grub菜单加密码
为grub菜单加密码的目的是防止他人修改grub做内核等启动设置。
1、先用/sbin/grub-md5-crypt产生一个MD5密码串。
- [[email protected] ~]# /sbin/grub-md5-crypt
- Password:
- Retype password:
- $1$T2zU4/$KmlABHIkQGczWjh1DdwWU.
2、修改grub.conf文件添加
password --md5 $1$T2zU4/$KmlABHIkQGczWjh1DdwWU.。
- [[email protected] ~]# vim /etc/grub.conf
- 1 # grub.conf generated by anaconda
- 2 #
- 3 # Note that you do not have to rerun grub after making changes
- to this file
- 4 # NOTICE: You have a /boot partition. This means that
- 5 # all kernel and initrd paths are relative to /boot/,
- eg.
- 6 # root (hd0,0)
- 7 # kernel /vmlinuz-version ro root=/dev/sda3
- 8 # initrd /initrd-[generic-]version.img
- 9 #boot=/dev/sda
- 10 default=0
- 11 timeout=5
- 12 splashimage=(hd0,0)/grub/splash.xpm.gz
- 13 hiddenmenu
- 14 title CentOS 6 (2.6.32-504.el6.x86_64)
- 15 root (hd0,0)
- 16 kernel /vmlinuz-2.6.32-504.el6.x86_64 ro root=UUID=e89
- 62baa-4051-4832-b0ee-e27aa74f6374 rd_NO_LUKS rd_NO_LVM LANG=en
- _US.UTF-8 rd_NO_MD SYSFONT=latarcyrheb-sun16 crashkernel=auto
- KEYBOARDTYPE=pc KEYTABLE=us rd_NO_DM rhgb quiet
- 17 initrd /initramfs-2.6.32-504.el6.x86_64.img
注意:password要加在splashimage和title之间,否则可能不生效。
禁止Linux系统被ping
命令:
- [[email protected] ~]# echo "net.ipv4.icmp_echo_ignore_all=1" >> /etc/sysctl.conf
- #立刻生效
- [[email protected] ~]# sysctl -p
升级具有典型漏洞的软件版本
首先查看相关软件的版本号
- [[email protected] ~]# rpm -qa openssl openssh bash
- openssl-1.0.1e-30.el6.x86_64
- bash-4.1.2-29.el6.x86_64
- openssh-5.3p1-104.el6.x86_64
执行升级已知漏洞的软件版本到最新。
- [[email protected] ~]# yum install openssl openssh bash
配置yum源
查看当前yum源
- [[email protected] ~]# cat /etc/yum.repos.d/CentOS-Base.repo
配置阿里云的yum源
- wget -O /etc/yum.repos.d/CentOS-Base.repo http://mirrors.aliyun.com/repo/Centos-6.repo
wget:下载,wget http://url;-O:下载到指定路径并改名;--spider:爬虫,检查网站是不是好的,不会下载只是检查;-T(--timeout):指定超时时间(--timeout=seconds);--tries:指定重试的次数(--tries=2);-q(--quiet):后台下载,关闭输出;
总结:
1、不用root管理,以普通用户的名义通过sudo授权管理。
2、更改默认的远程连接SSH服务端口,禁止root用户远程连接,甚至要更改为只监听内网IP。
3、定时自动更新服务器时间,使其和互联网时间同步。
4、配置yum更新域,从国内更新源下载安装软件包。
5、关闭SELinux及iptables(在生产场景中,如果有外部IP一般要打开)
6、调整文件描述符的数量,进程及文件的打开都会消耗文件描述符。
7、定时自动清理邮件目录垃圾文件,防止inodes节点被占满。
8、精简并保留必要的开机自启动服务(如crond、sshd、network、rsyslog、stsstat)。
9、Linux内核参数优化/etc/sysctl.conf,执行sysctl -p 生效。
10、更改字符集,使其支持中文。
11、锁定关键系统文件如/etc/passwd、/etc/shadow、/etc/group、/etc/gshadow、/etc/inittab,处理后把chattr、lasttr改名。
12、清空/etc/issue、/etc/issue.net,去除系统及内核版本登录前的屏幕显示。
13、清楚多余的系统虚拟账号。
14、为grub菜单加密码。
15、禁止被ping。
16、升级漏洞软件。
less:按屏(空格、page up/page down)或按行(回车)查看文件。
more:按屏(空格)或按行(回车)查看文件,不能向上翻。
Linux目录结构
linux只有一个顶点/(根),其他所有目录都在根下。根下面的所有目录是一个有层次的树状结构,像一颗倒挂着的大树。
- [[email protected] ~]# tree -L 1 /
- /
- ├── bin
- ├── boot
- ├── dev
- ├── etc
- ├── home
- ├── lib
- ├── lib64
- ├── lost+found
- ├── media
- ├── mnt
- ├── oldboy
- ├── opt
- ├── proc
- ├── root
- ├── sbin
- ├── selinux
- ├── srv
- ├── sys
- ├── tmp
- ├── usr
- └── var
tree:显示目录结构,-L:指定显示多少层;-d:只显示目录。
linux的目录结构和磁盘分区是分离的,可以自由组合。
/
├── bin àEssential command binaries
├── boot àStatic files of the boot loader
├── dev àDevice files
├── etc àHost-specific system configuration
├── home àUser home directories(optional)
├── lib àEssential shared libraries and kernel modules
├── lib64
├── lost+found
├── media
├── mnt àMount point for mounting a filesystem temporarily
├── oldboy
├── opt àAdd-on application software packages
├── proc à进程信息及内核信息(cpu、硬盘分区、内存信息等)
├── root àHome directory for the root user(optional)
├── sbin àEssential system binaries
├── selinux
├── srv
├── sys
├── tmp àTemporary files
├── usr àSecondary hierarchy
└── var àVariable data
cat /proc/meminfo à内存信息
cat /proc/cpuinfo àcpu信息
cat /proc/mounts à挂载信息
cat /proc/loadavg à负载(系统繁忙程度)
小结:
1、linux系统的所有目录时一个有层次的倒着的树状目录结构,/根是所有目录的起点。
2、不同的目录数据可以跨越不同的磁盘分区或不同的磁盘设备。
/dev/ 设备目录
/etc/ 系统配置即服务配置文件、启动命令的目录
/proc 显示内核及进程信息的虚拟文件系统
/tmp 临时文件目录
/home 普通用户家目录
/root 超级管理员的家目录
/var 变化的目录,一般是日志文件,cache的目录
/usr 用户程序及数据、帮助文件、二进制命令等的目录
/bin、/sbin、/usr/sbin 用户命令的目录
Linux重要目录路径
/etc/sysconfig/network-scripts/ifcfg-eth0:配置网络地址及GW等。
- [[email protected] ~]# cat /etc/sysconfig/network-scripts/ifcfg-eth0
- DEVICE=eth0 #物理设备名,eth1表示第二块网卡
- HWADDR=00:0c:29:a6:d7:cb #网卡的MAC地址,48位(克隆后要删除)
- TYPE=Ethernet #以太网
- UUID=cd11ee91-579f-43be-9074-a14cabe2e0c6 #uuid唯一用户标识(克隆后要删除)
- ONBOOT=yes #控制网卡是不是开机启动
- NM_CONTROLLED=yes
- BOOTPROTO=dhcp #proto值:none,引导时不使用协议;static,静态分配地址;bootp,使用BOOTP协议;dhcp,使用DHCP协议
- DNS2=202.106.0.20 #DNS把baidu.com变成baidu服务器IP。DNS域名和IP的解析工具
- DNS1=8.8.8.8
- USERCTL=no
- PEERDNS=yes
- IPV6INIT=no
IPADDR=10.0.0.7 #addr是IP地址
NETMASK=255.255.255.0 #子网掩码,划分网络位和主机位10.0.0.0/24
GATEWAY=10.0.0.254 #网关地址,路由器的地址
修改配置生效命令:
- [[email protected] ~]# /etc/init.d/network restart #ONBOOT=yes
- 或
- [[email protected] ~]# ifdown eth0 && ifup eth0 #关闭和启动
ifup:启动
ifdown:关闭
/etc/resolv.conf:DNS管理
- [[email protected] ~]# cat /etc/resolv.conf
- ; generated by /sbin/dhclient-script
- search localdomain
- nameserver 8.8.8.8
- nameserver 202.106.0.20
小结:
1、客户端DNS可以在网卡配置文件里设置(ifcfg-eth0)。
2、客户端DNS也可以在/etc/resolv.conf里设置。
3、网卡里的设置DNS优先于/etc/resolv.conf。
/etc/hosts:设定用户IP与域名的对应解析表
对应windows的文件C:\Windows\System32\drivers\etc\hosts。
- [[email protected] ~]# cat /etc/hosts
- 127.0.0.1 localhost localhost.localdomain localhost4 localhost4.localdomain4
- ::1 localhost localhost.localdomain localhost6 localhost6.localdomain6
- 192.168.131.128 oldboy66
hosts在企业里的作用:
1、开发、产品、测试等人员,用于通过正式的域名测试产品。
2、服务器之间的调用可以用域名(内部的DNS),方便迁移。
/etc/sysconfig/network:修改机器名及网卡启动,网关等配置。
- [[email protected] ~]# cat /etc/sysconfig/network
- NETWORKING=yes
- HOSTNAME=oldboy66
更改主机名:
1、vi /etc/sysconfig/network
2、hostname 主机名
同时修改。
/etc/fstab:设置文件系统挂载信息的文件,使得开机能够自动挂载磁盘分区
- [[email protected] ~]# df –h #查看磁盘挂载信息
- Filesystem Size Used Avail Use% Mounted on
- /dev/sda3 7.1G 1.4G 5.4G 21% /
- tmpfs 497M 0 497M 0% /dev/shm
- /dev/sda1 190M 27M 153M 15% /boot
- [[email protected] ~]# cat /etc/fstab
- UUID=e8962baa-4051-4832-b0ee-e27aa74f6374 / ext4 defaults 1 1
- UUID=9782b8eb-4b2d-4919-b3b7-14ee46d04ae8 /boot ext4 defaults 1 2
- UUID=60b51f07-216b-4e38-9eee-d3de8d897e01 swap swap defaults 0 0
- tmpfs /dev/shm tmpfs defaults 0 0 #挂载的设备 挂载点 FS类型 参数 备份 检查
- devpts /dev/pts devpts gid=5,mode=620 0 0
- sysfs /sys sysfs defaults 0 0
- proc /proc proc defaults 0 0
- [[email protected] ~]#
fsck:磁盘检查(不要检查好磁盘),卸载的状态
挂载方式:
1、命令挂载
mount -t ext4 -o noexec /dev/sda1 /mnt
2、/etc/fstab
测试手动挂载:
1、创建一个虚拟的块设备。
dd if=/dev/zero of=/dev/sdb1 bs=4906 count=100
2、格式化
mkfs.ext4 /dev/sdb1
3、挂载
mount -t ext4 -o loop,noatime,noexec /dev/sda1 /mnt
4、查看
df -h
第一列挂载的设备可以是设备名或UUID、磁盘标签。
fstab出问题,修复方式:
1、开机提示输入密码修复。
2、救援模式rescue修改/etc/fatab只读状态,mount -o rw,remount /。
/etc/rc.local:用于存放开机自启动程序命令的文件
让一个程序开机启动:
1、chkconfig(/etc/init.d/sshd)。
2、放入/etc/rc.local。
选择建议:/etc/rc.local,工作中把/etc/rc.local作为服务器档案文件,所有程序开机启动放入/etc/rc.local并加注释。
rc.local与fstab区别:rc.local在系统启动完成最后加载。
NFS网络文件系统挂载是,网卡还没启动,就已经加载fstab。(mount -t nfs 10.0.0.7:/data /mnt)
/etc/inittab:设定系统启动时init进程将把系统设置成什么样的runlevel运行级别及加载相关的级别对应启动文件设置
Linux启动过程:
1、开机BIOS自检
2、MBR引导
硬盘0柱面0磁盘1扇区的前446byte。
3、grub引导菜单
cat /etc/grub.conf
4、加载内核kernel
5、启动init进程
ps -ef|grep init
/etc/init.d
/etc/profile:系统全局环境变量永久生效的配置文件
/etc/profile.d:登录后执行的脚本所在地
/etc/motd:登录后显示的字符串
/etc/issue:记录用户登录前显示的系统版本等信息
- [[email protected] ~]# cat -n /etc/issue
- 1 CentOS release 6.6 (Final)
- 2 Kernel \r on an \m
/etc/group:设定用户的组名与相关信息
/etc/passwd:账号信息文件
/etc/shadow:密码信息文件
/etc/gshadow:组密码信息文件
/etc/sudoers:可以执行使用sudo命令的配置文件
visudo -c:检查语法
yum remove tree -y:yum删除(会删除依赖,慎用)