Linux基础介绍第三篇

Posted yinshoucheng

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了Linux基础介绍第三篇相关的知识,希望对你有一定的参考价值。

技术分享

更改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替换:

  1. [[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:

  1. [[email protected] ~]$ sudo useradd oldgirl
  2. #输入oldboy密码
  3. [sudo] password for oldboy:
  4. #添加成功
  5. [[email protected] ~]$ tail -1 /etc/passwd
  6. oldgirl:x:501:501::/home/oldgirl:/bin/bash

给oldboy授予固定权限:

oldboy ALL=(ALL) /bin/touch,/usr/sbin/useradd

注意:需要命令的全路径,查看命令全路径which 命令,例如:

  1. [[email protected] ~]# which useradd
  2. /usr/sbin/useradd
  3. [[email protected] ~]# which touch
  4. /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中文显示设置

查看当前字符编码:

  1. [[email protected] tmp]# cat /etc/sysconfig/i18n
  2. LANG="en_US.UTF-8"
  3. SYSFONT="latarcyrheb-sun16"

操作前先进行备份:cp /etc/sysconfig/i18n /etc/sysconfig/i18n.oldboy.20161205

  1. [[email protected] sysconfig]# sed -i ‘s#LANG="en_US.UTF-8"#LANG="zh_CN.UTF-8"#g‘ /etc/sysconfig/i18n
  2. [[email protected] sysconfig]# cat /etc/sysconfig/i18n
  3. LANG="zh_CN.UTF-8"
  4. SYSFONT="latarcyrheb-sun16"
  5. #立刻生效
  6. [[email protected] sysconfig]# source /etc/sysconfig/i18n
  7. [[email protected] sysconfig]# echo $LANG
  8. zh_CN.UTF-8

注意:客户端字符集需改为UTF-8。

设置Linux服务器时间同步

显示时间:date

修改时间:date –s "时间" àhwclock

显示日历:cal

同步互联网时间:

  1. [[email protected] tmp]# /usr/sbin/ntpdate time.nist.gov

定时任务执行同步:

  1. #每5分钟执行一次同步
  2. [[email protected] tmp]# echo "*/5 * * * * /usr/sbin/ntpdate time.nist.gov >/dev/null 2>&1" >>/var/spool/cron/root
  3. [[email protected] tmp]# crontab -l
  4. */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默认历史记录数

命令如下,注意此时的配置仅临时生效。

  1. #设置历史记录数5
  2. [[email protected] ~]# HISTSIZE=5

把配置参数放入配置文件,使得永久生效。

  1. #设置终端超时时间
  2. [[email protected] ~]# echo ‘TMOUT=300‘ >>/etc/profile
  3. #设置历史记录数
  4. [[email protected] ~]# echo ‘HISTSIZE=5‘ >>/etc/profile
  5. #设置文件记录数cat ~/.bash_history
  6. [[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、进程使用的时候会占用文件描述符(标识打开的文件)。

查看默认文件描述符

  1. [[email protected] ~]# ulimit -n
  2. 1024

3、调整文件描述符

方法一:

直接把ulimit -SHn 65535命令加入到/etc/rc.local,然后每次开机启动的时候生效。

  1. #临时生效
  2. [[email protected] ~]# ulimit -SHn 65535
  3. [[email protected] ~]# ulimit -n
  4. 65535

写入rc.local:

  1. cat >>/etc/rc.local<<EOF
  2. ulimit -HSn 65535
  3. ulimit -s 65535
  4. EOF

方法二:

在/etc/sercurity/limits.conf里面配置。

  1. [[email protected] ~]# echo ‘* - nofile 65535‘ >>/etc/security/limits.conf
  2. [[email protected] ~]# tail -1 /etc/security/limits.conf
  3. * - nofile 65536

调整内核参数文件/etc/sysctl.conf

vim编辑:shift+g切换到文件结尾

优化参数:

  1. net.ipv4.tcp_fin_timeout = 2
  2. net.ipv4.tcp_tw_reuce = 1
  3. net.ipv4.tcp_tw_recycle = 1
  4. net.ipv4.tcp_syncookies = 1
  5. net.ipv4.tcp_keepalive_time = 600
  6. net.ipv4.ip_local_port_range = 4000 65000
  7. net.ipv4.tcp_max_syn_backlog = 16384
  8. net.ipv4.tcp_max_tw_buckets = 36000
  9. net.ipv4.route.gc_timeout = 100
  10. net.ipv4.tcp_syn_retries = 1
  11. net.ipv4.tcp_synack_retries = 1
  12. net.core.somaxconn = 16384
  13. net.core.netdev_max_backlog = 16384
  14. net.ipv4.tcp_max_orphans = 16384
  15. #以下参数是对iptables防火墙的优化,防火墙不开会提示,可以忽略不理
  16. #net.nf_conntrack_max = 25000000
  17. #net.netfilter.nf_conntrack_tcp_timeout_established = 180
  18. #net.netfilter.nf_conntrack_tcp_timeout_time_wait = 120
  19. #net.netfilter.nf_conntrack_tcp_timeout_close_wait = 60
  20. #net.netfilter.nf_conntrack_tcp_timeout_fin_wait = 120

执行生效:sysctl -p

查看网络状态:netstat -an

隐藏Linux版本信息

控制Linux显示版本信息的文件

  1. [[email protected] ~]# cat /etc/issue
  2. CentOS release 6.6 (Final)
  3. Kernel \r on an \m
  4.  
  5. [[email protected] ~]# cat /etc/issue.net
  6. CentOS release 6.6 (Final)
  7. Kernel \r on an \m

清空这个两个文件就可以了。

锁定关键系统文件,防止提权被篡改

命令:

  1. [[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密码串。

  1. [[email protected] ~]# /sbin/grub-md5-crypt
  2. Password:
  3. Retype password:
  4. $1$T2zU4/$KmlABHIkQGczWjh1DdwWU.

2、修改grub.conf文件添加

password --md5 $1$T2zU4/$KmlABHIkQGczWjh1DdwWU.。

  1. [[email protected] ~]# vim /etc/grub.conf
  2.   1 # grub.conf generated by anaconda
  3.   2 #
  4.   3 # Note that you do not have to rerun grub after making changes
  5.      to this file
  6.   4 # NOTICE: You have a /boot partition. This means that
  7.   5 # all kernel and initrd paths are relative to /boot/,
  8.      eg.
  9.   6 # root (hd0,0)
  10.   7 # kernel /vmlinuz-version ro root=/dev/sda3
  11.   8 # initrd /initrd-[generic-]version.img
  12.   9 #boot=/dev/sda
  13.  10 default=0
  14.  11 timeout=5
  15.  12 splashimage=(hd0,0)/grub/splash.xpm.gz
  16.  13 hiddenmenu
  17.  14 title CentOS 6 (2.6.32-504.el6.x86_64)
  18.  15 root (hd0,0)
  19.  16 kernel /vmlinuz-2.6.32-504.el6.x86_64 ro root=UUID=e89
  20.     62baa-4051-4832-b0ee-e27aa74f6374 rd_NO_LUKS rd_NO_LVM LANG=en
  21.     _US.UTF-8 rd_NO_MD SYSFONT=latarcyrheb-sun16 crashkernel=auto
  22.      KEYBOARDTYPE=pc KEYTABLE=us rd_NO_DM rhgb quiet
  23.  17 initrd /initramfs-2.6.32-504.el6.x86_64.img

注意:password要加在splashimage和title之间,否则可能不生效。

禁止Linux系统被ping

命令:

  1. [[email protected] ~]# echo "net.ipv4.icmp_echo_ignore_all=1" >> /etc/sysctl.conf
  2. #立刻生效
  3. [[email protected] ~]# sysctl -p

升级具有典型漏洞的软件版本

首先查看相关软件的版本号

  1. [[email protected] ~]# rpm -qa openssl openssh bash
  2. openssl-1.0.1e-30.el6.x86_64
  3. bash-4.1.2-29.el6.x86_64
  4. openssh-5.3p1-104.el6.x86_64

执行升级已知漏洞的软件版本到最新。

  1. [[email protected] ~]# yum install openssl openssh bash

配置yum源

查看当前yum源

  1. [[email protected] ~]# cat /etc/yum.repos.d/CentOS-Base.repo

配置阿里云的yum源

  1. 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只有一个顶点/(根),其他所有目录都在根下。根下面的所有目录是一个有层次的树状结构,像一颗倒挂着的大树。

  1. [[email protected] ~]# tree -L 1 /
  2. /
  3. ├── bin
  4. ├── boot
  5. ├── dev
  6. ├── etc
  7. ├── home
  8. ├── lib
  9. ├── lib64
  10. ├── lost+found
  11. ├── media
  12. ├── mnt
  13. ├── oldboy
  14. ├── opt
  15. ├── proc
  16. ├── root
  17. ├── sbin
  18. ├── selinux
  19. ├── srv
  20. ├── sys
  21. ├── tmp
  22. ├── usr
  23. └── 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等。

  1. [[email protected] ~]# cat /etc/sysconfig/network-scripts/ifcfg-eth0
  2. DEVICE=eth0 #物理设备名,eth1表示第二块网卡
  3. HWADDR=00:0c:29:a6:d7:cb #网卡的MAC地址,48位(克隆后要删除)
  4. TYPE=Ethernet #以太网
  5. UUID=cd11ee91-579f-43be-9074-a14cabe2e0c6 #uuid唯一用户标识(克隆后要删除)
  6. ONBOOT=yes #控制网卡是不是开机启动
  7. NM_CONTROLLED=yes
  8. BOOTPROTO=dhcp #proto值:none,引导时不使用协议;static,静态分配地址;bootp,使用BOOTP协议;dhcp,使用DHCP协议
  9. DNS2=202.106.0.20 #DNS把baidu.com变成baidu服务器IP。DNS域名和IP的解析工具
  10. DNS1=8.8.8.8
  11. USERCTL=no
  12. PEERDNS=yes
  13. IPV6INIT=no

IPADDR=10.0.0.7 #addr是IP地址

NETMASK=255.255.255.0 #子网掩码,划分网络位和主机位10.0.0.0/24

GATEWAY=10.0.0.254 #网关地址,路由器的地址

修改配置生效命令:

  1. [[email protected] ~]# /etc/init.d/network restart #ONBOOT=yes
  2. [[email protected] ~]# ifdown eth0 && ifup eth0 #关闭和启动

ifup:启动

ifdown:关闭

/etc/resolv.conf:DNS管理

  1. [[email protected] ~]# cat /etc/resolv.conf
  2. ; generated by /sbin/dhclient-script
  3. search localdomain
  4. nameserver 8.8.8.8
  5. 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。

  1. [[email protected] ~]# cat /etc/hosts
  2. 127.0.0.1 localhost localhost.localdomain localhost4 localhost4.localdomain4
  3. ::1 localhost localhost.localdomain localhost6 localhost6.localdomain6
  4. 192.168.131.128 oldboy66

hosts在企业里的作用:

1、开发、产品、测试等人员,用于通过正式的域名测试产品。

2、服务器之间的调用可以用域名(内部的DNS),方便迁移。

/etc/sysconfig/network:修改机器名及网卡启动,网关等配置。

  1. [[email protected] ~]# cat /etc/sysconfig/network
  2. NETWORKING=yes
  3. HOSTNAME=oldboy66

更改主机名:

1、vi /etc/sysconfig/network

2、hostname 主机名

同时修改。

/etc/fstab:设置文件系统挂载信息的文件,使得开机能够自动挂载磁盘分区

  1. [[email protected] ~]# df –h #查看磁盘挂载信息
  2. Filesystem Size Used Avail Use% Mounted on
  3. /dev/sda3 7.1G 1.4G 5.4G 21% /
  4. tmpfs 497M 0 497M 0% /dev/shm
  5. /dev/sda1 190M 27M 153M 15% /boot

 

  1. [[email protected] ~]# cat /etc/fstab
  2. UUID=e8962baa-4051-4832-b0ee-e27aa74f6374 / ext4 defaults 1 1
  3. UUID=9782b8eb-4b2d-4919-b3b7-14ee46d04ae8 /boot ext4 defaults 1 2
  4. UUID=60b51f07-216b-4e38-9eee-d3de8d897e01 swap swap defaults 0 0
  5. tmpfs /dev/shm tmpfs defaults 0 0 #挂载的设备    挂载点    FS类型    参数    备份    检查
  6. devpts /dev/pts devpts gid=5,mode=620 0 0
  7. sysfs /sys sysfs defaults 0 0
  8. proc /proc proc defaults 0 0

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:记录用户登录前显示的系统版本等信息

  1. [[email protected] ~]# cat -n /etc/issue
  2.      1 CentOS release 6.6 (Final)
  3.      2 Kernel \r on an \m

/etc/group:设定用户的组名与相关信息

/etc/passwd:账号信息文件

/etc/shadow:密码信息文件

/etc/gshadow:组密码信息文件

/etc/sudoers:可以执行使用sudo命令的配置文件

visudo -c:检查语法

yum remove tree -y:yum删除(会删除依赖,慎用)

/var/log/messages:系统日志,自动轮询按周(rsyslog)

/var/log/secure:安全日志,SSH连接日志

dmesg:内核打印的错误信息,例如硬件故障

/var/spool/cron/root:定时任务crond配置文件

/proc/mounts:设备挂载信息与df -h类似

以上是关于Linux基础介绍第三篇的主要内容,如果未能解决你的问题,请参考以下文章

Linux从青铜到王者第二十篇:Linux网络基础第三篇之IP协议

Linux从青铜到王者第二十三篇:Linux网络基础第四篇之kcp协议

Linux从青铜到王者第二十一篇:Linux网络基础第三篇之数据链路层

Linux从入门到放弃零基础入门Linux(第三篇):在虚拟机vmware中安装linux超详细手把手教你安装centos6分步图解

Linux发行版介绍Linux系统基础使用入门Linux命令帮助Linux基础命令

第2天OS Linux发行版介绍Linux系统基础使用入门Linux命令帮助Linux基础命令