在Linux这个系统当中,几乎所有的硬件设备文件都在/dev这个目录内。举例来说,IDE介面的硬盘的文件名称即为/dev/hd[a-d],其中, 括号内的字母为a-d当中的任意一个,亦即有/dev/hda,/dev/hdb, /dev/hdc, 及 /dev/hdd这四个文件的意思。Linux通过设备名访问设备,设备存放在/dev目录下。

[root@centos7 ~]# ll /dev/sd*
brw-rw---- 1 root disk 8, 0 8月  28 23:40 /dev/sda  # 第一块磁盘sda,第二块磁盘sdb,a、b区分主磁盘
brw-rw---- 1 root disk 8, 1 8月  28 23:40 /dev/sda1  # 第一块磁盘下面的分区1,SCSI接口硬盘
brw-rw---- 1 root disk 8, 2 8月  28 23:40 /dev/sda2  # 第一块磁盘下的分区2

分区数字编号1~4只能里给主分区或扩展分区使用,逻辑分区是在扩展分区基础上,所以编号只能从5开始。

linux环境下没有盘符的概念,要对磁盘设备进行操作,需要使用磁盘设备名;要操作文件则需挂装创建在分区或逻辑卷上的文件系统

 

Linux系统对分区的要求

linux系统至少要有/分区
swap(交换分区)的作用:虚拟内存,swap分区的大小=1.5*物理内存的容量,内存大于16G时,虚拟内存给8~16就行了。
建议建立对立的boot分区
数据库服务器正常不需要swap分区,因为虚拟的内存的速率跟不上。

常规分区方案

/             剩余硬盘大小
swap          1.5倍
/boot         100M

DB及存储的分区方案

/data/        剩余磁盘大小
/             50~200G
swap          1.5倍
/boot         100M
相当于windows不能只分c盘,还需要D E,重装系统数据可能会丢。

门户网站案例

/             50~200G
swap          1.5倍
/boot         100M
不再进行分区,保留,将来哪个需要用,再根据需求再分

以下分区几乎没有必要:

/usr
/home
/var

LVM,目录满了就在线调整分区大小,LVM性能差
生产场景 硬件RAID(DELL),组合多块磁盘,而不是LVM或者软RAID

 

用户相关的命令

查看当前用户                 whoami
添加用户                    useradd/adduser dandy1;        
修改密码                    passwd dandy + 密码            
                           不指定则修改当前用户密码;普通用户不能修改其他人的密码
切换用户                    su - oldboy     把参数全部切换成oldboy的
不交互改密码                 echo 123456|passwd --stdin dandy  
但是查看history的时候可以看到明文密码
                           history -d 111    干掉固定行号
                           history -c         全部干掉

 

centos安装软件包管理工具

yum是centos软件包管理工具,二进制软件包一般是rpm包。由于centos的内置默认软件源是指向国外的,一般情况下下载更新软件包都会很慢,很浪费时间,所以需要将其修改为国内的软件镜像源。

查看软件镜像源文件

cat /etc/yum.repos.d/CentOS-Base.repo

一切修改的最基本条件是留一份原文件存档

cp /etc/yum.repos.d/CentOS-Base.repo /etc/yum.repos.d/CentOS-Base.repo.backup

这里我们使用如下的地址

http://mirrors.163.com/.help/centos.html

centos tc 命令 centos at命令_centos

选择你对应的centos版本,右键复制链接地址

进入到软件镜像源目录:

wget http://mirrors.163.com/.help/CentOS7-Base-163.repo

wget后面的是自己右键复制的地址,粘贴上去就好了。

cp CentOS7-Base-163.repo  CentOS-Base.repo

也可以用mv命令。。此时就替换好了。

正常的教程到这里会让你更新一下软件包,但是这里,我们选择不更新,更新的越多,下载的软件包越多,系统越重,并且漏洞发生的几率或更高、安全性降低。

 

 

安装基础软件包

yum install tree telnet dos2unix sysstat lrzsz -y 默认不提示

-y代表手动命令安装软件的所有提示确认的命令都不需要确认了,不再提示确认内容。

 

关闭selinux 

cat /etc/selinux/config

centos tc 命令 centos at命令_centos tc 命令_02

三种状态:

enforcing       激活状态
permissive      不激活,但是打印警告
disabled       不加载

可以直接vim  修改状态

sed -i s#SELINUX=enforcing#SELINUX=disabled#g /etc/selinux/config

再查看一下修改

[root@centos7 yum.repos.d]# grep "disabled" /etc/selinux/config
#     disabled - No SELinux policy is loaded.
SELINUX=disabled
[root@centos7 yum.repos.d]#

通过命令查看系统状态

getenforce        #  查看状态,显示还是Permissive

查询系统状态的时候,你会发现还是显示Permissive,因为系统只有重启过才能更改过来。

setenforce 0                    # 临时将状态改成Permissive

此时系统的状态已经更改过来,而当系统重启后,虽然会消失,但是系统配置中已经更改成disabled,所以也就都ok了

 

修改linux机器运行模式

模式简介

0    关机模式
1    单用户模式,一般用来改密码
2    多用户模式
3    命令行模式
4    没有使用
5    X11桌面模式,图形化界面
6    重启模式

模式的切换

centos6.5    cat /etc/inittab 直接修改runlevel
             runlevel查看当前模式
             vi /etc.inittab    ==>    id:3:initdefault:修改成5

             init + 数字 

CentOS7    systemctl set-default graphical.target
        systemctl set-default multi-user.target

 

优化开机启动项

一般基础启动项

crond        (定时任务) 
network    (网络服务)
rsyslog     (系统日志功能) 
sshd         (远程链接服务)

Centos6优化方式

1、ntsysv
2、setup-system service
3、脚本一键完成处理

查看所有命令行模式的启动

chkconfig --list|grep "3:on"    查看所有模式3下开机启动项
chkconfig udev-post off/on         默认关闭23456运行模式里面的开机自启动/关闭
chkconfig --list udev-post     列出某一条所有模式下的启动模式

如何关闭呢?

思路一(先全部关闭,在打开需要开启的服务)

for dandy in `chkconfig --list|grep "3:on"|awk '{print $1}'`;do chkconfig $dandy off;done

for dandy in crond network sshd rsyslog;do chkconfig $dandy on;done

$dandy是变量,对for循环的变量操作。

思路二(只关闭不需要的服务)

for dandy in `chkconfig --list|grep "3:on"|awk '{print $1}'|grep -vE "crond|network|sshd|rsyslog"`;do chkconfig $dandy off;done
grep -i 不区分大小写的过滤    grep -Ei "a|b" dandy.txt
grep -E = egrep  # 并列条件,同时过滤多个字符串

-v取消原输出,反转查找

Centos7优化

CentOS 7由于使用systemd而不是init,所以不能通过修改inittab文件来修改开机启动模式。

systemctl get-default                # 获取默认的系统
systemctl set-default multi-user.target      # 设置默认模式
systemctl set-default graphical.target 

systemctl list-unit-files | grep enabled     # 查看当前模式的开机启动项,enabled是开机启动,disabeld是不启动

systemctl disable firewalld.service        # 开机不启动某个服务
systemctl stop firewalld.service          # 暂停服务
systemctl enable apache.service          # 开机启动
systemctl status mysqld                # 查询某个服务状态

systemctl start docker.service           # 开启某个服务

 

最小化原则

1)安装系统最小化
    安装的软件包越少,磁盘空间越小,软件漏洞相对越少
2)开启程序服务最小化
3)操作最小化原则
4)登陆最小化原则。    
    平时没有需求,不要用root登陆
5)权限最小化原则
6)配置参数合理,不要最大化

 

远程登陆

windows远程登陆及管理员账户

administrator    3389

linux远程登陆及管理员账户

root            22

这种常用设置,大家都知道,可能不安全,需要修改端口或用户名,增加迷惑性,安全性。

修改ssh端口

1、先备份!先备份!!!cp /a /a.backup
2、vim /etc/ssh/sshd_config
        取消port注释、修改port端口比如改到52113
    PermitRootLogin:no        # 禁止root远程登陆
    UseDNS:no                 # 禁止使用DNS
    PermitEmptyPasswords:no
    GSSAPIAuthentication:no
        输入行号 + gg、定位到具体行
3、/etc/init.d/sshd reload     # 重新加载
   /etc/init.d/sshd restart    # 重启服务

 

关闭防火墙

/etc/init.d/iptables stop     关闭防火墙

 

查看网络状态

查看网络状态lntup或者an 可以通过man netstat查看

netstat -an|grep ip(服务器ip)查看网络状态
netstat [address_family_options] [--tcp|-t]  [--udp|-u]  [--udplite|-U]
       [--sctp|-S]   [--raw|-w]   [--listening|-l]  [--all|-a]  [--numeric|-n]
       [--numeric-hosts] [--numeric-ports]  [--numeric-users]  [--symbolic|-N]
       [--extend|-e[--extend|-e]]  [--timers|-o] [--program|-p] [--verbose|-v]
       [--continuous|-c] [--wide|-W] [delay]

       netstat              {--route|-r}              [address_family_options]
       [--extend|-e[--extend|-e]]         [--verbose|-v]        [--numeric|-n]
       [--numeric-hosts] [--numeric-ports] [--numeric-users] [--continuous|-c]
       [delay]
.....

查看端口状态

netstat -lntup|grep 22
# 或者
lsof -i :22

修改sudo的配置文件

使用visudo来编辑sudo的配置文件,相当于直接编辑'vim /etc/sudoers',建议不要手动去改,visudo有语法检查。

:set nu            显示行号
98gg              光标定位到98行
yy                 复制当前行
p                  粘贴
91 ## Allow root to run any commands anywhere
92 root    ALL=(ALL)       ALL
93 dandy   ALL=(ALL)       ALL
可以将用户dandy最后的ALL改成/usr/sbin/useradd(多条的话使用逗号把命令连起来就可以),这样dandy变只拥有执行useradd的权限了,需要使用sudo useradd + 用户名才能使用
[dandy@centos7 ~]$ sudo useradd test_user
[sudo] password for dandy: 
[dandy@centos7 ~]$ tail -1 /etc/passwd
test_user:x:1001:1001::/home/test_user:/bin/bash

修改dandy最后的ALL到NOPASSWD:ALL(表示不需要密码)

user             MACHINE=                 COMMANDS
root             ALL=(ALL)                ALL
oldboy           ALL=(ALL)                /usr/sbin/useradd
用户             机器=(授权哪个角色的权利)    /usr/sbin/useradd
%用户组           机器=(授权哪个角色的权利)    /usr/sbin/useradd

查看当前用户有那些权限:

[root@centos7 ~]# sudo -l
匹配 %2$s 上 %1$s 的默认条目:
    !visiblepw, always_set_home, match_group_by_gid, env_reset,
    env_keep="COLORS DISPLAY HOSTNAME HISTSIZE KDEDIR LS_COLORS",
    env_keep+="MAIL PS1 PS2 QTDIR USERNAME LANG LC_ADDRESS LC_CTYPE",
    env_keep+="LC_COLLATE LC_IDENTIFICATION LC_MEASUREMENT LC_MESSAGES",
    env_keep+="LC_MONETARY LC_NAME LC_NUMERIC LC_PAPER LC_TELEPHONE",
    env_keep+="LC_TIME LC_ALL LANGUAGE LINGUAS _XKB_CHARSET XAUTHORITY",
    secure_path=/sbin\:/bin\:/usr/sbin\:/usr/bin

用户 root 可以在 centos7 上运行以下命令:
    (ALL) ALL
[dandy@centos7 ~]$ sudo -l
Matching Defaults entries for dandy on centos7:
    !visiblepw, always_set_home, match_group_by_gid, env_reset,
    env_keep="COLORS DISPLAY HOSTNAME HISTSIZE KDEDIR LS_COLORS",
    env_keep+="MAIL PS1 PS2 QTDIR USERNAME LANG LC_ADDRESS LC_CTYPE",
    env_keep+="LC_COLLATE LC_IDENTIFICATION LC_MEASUREMENT LC_MESSAGES",
    env_keep+="LC_MONETARY LC_NAME LC_NUMERIC LC_PAPER LC_TELEPHONE",
    env_keep+="LC_TIME LC_ALL LANGUAGE LINGUAS _XKB_CHARSET XAUTHORITY",
    secure_path=/sbin\:/bin\:/usr/sbin\:/usr/bin

User dandy may run the following commands on centos7:
    (ALL) NOPASSWD: ALL

 

linux系统环境变量

控制linux命令所在的路径,相当于window环境变量PATH,查看系统环境变量

[dandy@centos7 ~]$ echo $PATH
/usr/local/bin:/bin:/usr/bin:/usr/local/sbin:/usr/sbin:/home/dandy/.local/bin:/home/dandy/bin

可以发现系统环境变量通过: 进行分割,同样的可以按照windows的思路,添加一个系统环境变量

1、mkdir /dandy                      创建目录
2、vi /dandy/dandy                    添加内容echo 'hello dandy'
3、chmod +x /dandy/dandy                 增加权限

执行上述文件命令

1、根据绝对路径直接执行

[dandy@centos7 /]$ /dandy/dandy
hello dandy

2、添加路径到系统环境变量,再执行

PATH=$PATH:/dandy             但是这个是临时有效
dandy                         hello dandy

永久有效的添加环境变量

echo 'PATH=/dandy/:$PATH' >> /etc/profile        
source /etc/profile            让文件生效
使用单引号添加,会把这句话添加进去,双引号会将变量转化成结果添加到文件内,不合适
[dandy@centos7 /]$ tail -5 /etc/profile
done

unset i
unset -f pathmunge
PATH=/dandy/:$PATH

 

测试

[dandy@centos7 /]$ dandy
hello dandy
[dandy@centos7 /]$ which dandy
/dandy/dandy

并且在/etc下面加的命令是对全局都生效的,所有用户都可以使用。如果是在普通文件下加的话,可以在.bash_profile里面添加,可以使用cat .bash_profile来查看下

 

修改中文字符显示(建议不做)

字符集是一套文字符号及其编码,查看当前字符集编码 

[dandy@centos7 /]$ echo $LANG
en_US.UTF-8

默认字符集路径及修改

centos6
    cat /etc/sysconfig/i18n
CentOS7
    cat /etc/locale.conf              LANG="en_US.UTF-8"调整为LANG="zh_CN.GB18030"
最后 source + 路径让它生效

 

Linux时间同步服务

安装

yum install ntp

获取网上最新时间

centos7                ntpdate -d ntp.sjtu.edu.cn
centos6                /usr/sbin/ntpdate time.nist.gov

创建更新的定时任务

echo '#time sync by dandy at 2018-08' >> /vae/spool/cron/root   # 追加到定时任务的配置文件
echo '*/5 * * * * ntpdate -d ntp.sjtu.edu.cn >/dev/null 2>&1' >>/var/spool/cron/root

>/dev/null 2>&1默认情况是1,也就是等同于1>/dev/null 2>&1。意思就是把标准输出重定向到“黑洞”,还把错误输出2重定向到标准输出1,也就是标准输出和错误输出都进了“黑洞” ,然后再追加到cron的root文件内

检查是否再cron内存在

crontab -l 检查是否存在

这边可以去百度一下如何配置ntp server,网上的内容很多,楼主觉得没必要学再记录,仁者见仁,智者见智。

 

修改文件描述符

查看当前文件描述符大小

[root@centos7 ~]# ulimit -n 
1024

加大文件描述符(临时),重启后消失

[root@centos7 ~]# ulimit -HSn 65535
[root@centos7 ~]# ulimit -n 
65535

写入配置文件,永久生效

echo '*               -    nofile            65535' >>/etc/security/limits.conf

文件描述符太小,不够用,进程会起不来,当然文件描述符也不是越大越好。

 

调整内核参数

内核参数文件

/etc/sysctl.cnf

修改文件,将下面的内容插入

#关闭ipv6
net.ipv6.conf.all.disable_ipv6 = 1
net.ipv6.conf.default.disable_ipv6 = 1
# 避免放大攻击
net.ipv4.icmp_echo_ignore_broadcasts = 1
# 开启恶意icmp错误消息保护
net.ipv4.icmp_ignore_bogus_error_responses = 1
#关闭路由转发
net.ipv4.ip_forward = 0
net.ipv4.conf.all.send_redirects = 0
net.ipv4.conf.default.send_redirects = 0
#开启反向路径过滤
net.ipv4.conf.all.rp_filter = 1
net.ipv4.conf.default.rp_filter = 1
#处理无源路由的包
net.ipv4.conf.all.accept_source_route = 0
net.ipv4.conf.default.accept_source_route = 0
#关闭sysrq功能
kernel.sysrq = 0
#core文件名中添加pid作为扩展名
kernel.core_uses_pid = 1
# 开启SYN洪水攻击保护
net.ipv4.tcp_syncookies = 1
#修改消息队列长度
kernel.msgmnb = 65536
kernel.msgmax = 65536
#设置最大内存共享段大小bytes
kernel.shmmax = 68719476736
kernel.shmall = 4294967296
#timewait的数量,默认180000
net.ipv4.tcp_max_tw_buckets = 6000
net.ipv4.tcp_sack = 1
net.ipv4.tcp_window_scaling = 1
net.ipv4.tcp_rmem = 4096        87380   4194304
net.ipv4.tcp_wmem = 4096        16384   4194304
net.core.wmem_default = 8388608
net.core.rmem_default = 8388608
net.core.rmem_max = 16777216
net.core.wmem_max = 16777216
#每个网络接口接收数据包的速率比内核处理这些包的速率快时,允许送到队列的数据包的最大数目
net.core.netdev_max_backlog = 262144
#限制仅仅是为了防止简单的DoS 攻击
net.ipv4.tcp_max_orphans = 3276800
#未收到客户端确认信息的连接请求的最大值
net.ipv4.tcp_max_syn_backlog = 262144
net.ipv4.tcp_timestamps = 0
#内核放弃建立连接之前发送SYNACK 包的数量
net.ipv4.tcp_synack_retries = 1
#内核放弃建立连接之前发送SYN 包的数量
net.ipv4.tcp_syn_retries = 1
#启用timewait 快速回收
net.ipv4.tcp_tw_recycle = 1
#开启重用。允许将TIME-WAIT sockets 重新用于新的TCP 连接
net.ipv4.tcp_tw_reuse = 1
net.ipv4.tcp_mem = 94500000 915000000 927000000
net.ipv4.tcp_fin_timeout = 1
#当keepalive 起用的时候,TCP 发送keepalive 消息的频度。缺省是2 小时
net.ipv4.tcp_keepalive_time = 30
#允许系统打开的端口范围
net.ipv4.ip_local_port_range = 1024    65000
#修改防火墙表大小,默认65536
#net.netfilter.nf_conntrack_max=655350
#net.netfilter.nf_conntrack_tcp_timeout_established=1200
# 确保无人能修改路由表
net.ipv4.conf.all.accept_redirects = 0
net.ipv4.conf.default.accept_redirects = 0
net.ipv4.conf.all.secure_redirects = 0
net.ipv4.conf.default.secure_redirects = 0

通过命令生效

sysctl -p 生效

 

隐藏版本号和内核号

cat /cat/issue
>/etc/issue                     重定向清空
cat /dev/null >/etc/issue        清空,把issue变成空

 

锁定关键文件

chattr +i     /etc/passwd /etc/shadow                    
/etc/passwd                       用户文件
/etc/shadow                        用户密码文件
/etc/group                         用户组文件
/etc/gshadow                       组的密码文件
/etc/inittab                       开机启动文件

锁定之后root都不能操作,用chattr -i 解锁

which chattr
/usr/bin/chattr
mv /usr/bin/chattr /usr/bin/dandy         修改命令,隐藏掉命令
这样就算黑客厉害到能拿到root账户,也不知道解锁的命令是哪一个

查看内容是不是加锁了    有一个i

lsattr /etc/passwd
----i----------- /etc/passwd

 

优化总结

1、不用root、添加普通用户,通过sudo授权管理
2、更改默认的远程连接ssh服务端口及禁止root用户远程连接
3、定时自动更新服务器时间
4、配置yum更新源,从国内更新源下载rpm包
5、关闭selinux及iptables(iptables工作场景如果有wan ip一般要打开,高并发除外)
6、调整文件描述符大小
7、定时自动清理/var/pool/clientqueue目录的垃圾文件,防止inodes节点被占满(6.4已经就没有了,可以不配)
8、精简开机自启动服务
9、linux内核参数优化
10、更改字符集,支持中文,建议还是英文字符集,防止乱码
11、锁定关键系统文件 
12、清空/etc/issue,去除内核跟系统版本的屏幕显示