Linux服务器安全-系统安全配置

2017年05月16日

原创内容,转载请注明出处: http://www.myzhenai.com.cn/post/2664.html http://www.myzhenai.com/thread-18006-1-1.html
关键词: Linux 服务器 安全 系统 配置 端口 权限 漏洞

最近,Windows系统下发生了一个WannaCry勒索者病毒,弄得世界各国政府和商业机构心神不定, 这个就是因为使用了Windows下的漏洞来实现攻击的, 所以说现在社会对电脑的依赖, 同时也会因电脑受到很大的影响, 这就需要我们提高系统安全意识. 尽管Linux的安全系数要比Windows高, 但是因为现在很多商业公司, 大型网站和企业都在使用Linux系统部署商业环境和服务器环境, 对于这一些也需要我们提高意识, 更加重视.

一般来说, 服务器受到的攻击最多的是Ddos(洪水)攻击, 还有就是CC(Challenge Collapsar)对于这两种攻击, 我们除了增强物理防火墙外,好像没有其他更好的办法了, 但是今天我们说的不是抵抗这两种攻击,我们主要说的是针对扫描和入侵的抵抗攻击. 这个除了能保护我们数据安全之外, 同时也能更好的为用户负责, 因为很多针对服务器的入侵, 最多的是挂马,向外发包,垃圾邮件,窃取用户密码数据等……. 以下的方法照样适用于使用Linux系统的个人用户.

服务器被入侵一般都是以下几种情况
一: 漏洞, 又分为服务器环境漏洞和使用程序的漏洞
二: 弱口令, 服务器账号或管理员账号的密码承在简单的弱口令, 被黑客猜解出来了, 如果经常看服务器系统日志的朋友可能会知道, 经常会有陌生的ip在扫描服务器指定的端口,比如21端口
三: 权限设置不合理, 如果权限设置不合理的话, 黑客很容易就能通过一个简单的脚本或几行代码就能进行提权,进行破坏.

以下我们就将这几项一一的进行说明和演示, 虽然说不能将我们的系统设置得固若金汤, 但起码可以增强被坡解的难度. 起到一定的保护作用.

漏洞: 根据自己的系统环境,将以下这些代码保存为.sh文件,然后设置crond(crontabe)定时器里, 就能实现无人值守自动更新系统. 定时之前请手动执行一次脚本,查看有无错误.
请参考: http://www.myzhenai.com.cn/post/2610.html
系统自动更新脚本
RedHat派系,包含 fedora centos

# !/bin/bash
e=`yum update -y | grep -e "kernel"`
if [ $e == "" ];then
echo "no update"
else
reboot
fi

命令注释

# !/bin/bash
e=`yum update -y | grep -e "kernel"`
#更新系统,并检测更新的包里有没有包含kernel字样的包,包含这个字样的包就是内核更新, 我们就需要重新启动服务器来更换新的内核
if [ $e == "" ];then
#如果变量里是空的,即是没有找到包含有kernel的更新包, if [];then是判断语句
echo "no update"
else
#else是否则跳转, 即是变量里是有内容的,不为空,那么这里我们就要执行相应的条件,即下边的reboot来重新启动系统
reboot
#reboot是重新启动系统命令
fi
#fi是判断结束语句



Debian派系 包含 debian ubuntu

# !/bin/bash
apt-get update -y
e=`apt-get upgrade -y | grep -e "kernel"`
if [ $e == "" ];then
echo "no update"
else
reboot
fi

命令注释

# !/bin/bash
apt-get update -y
e=`apt-get upgrade -y | grep -e "kernel"`
#更新系统,并检测更新的包里有没有包含kernel字样的包,包含这个字样的包就是内核更新, 我们就需要重新启动服务器来更换新的内核
if [ $e == "" ];then
#如果变量里是空的,即是没有找到包含有kernel的更新包, if [];then是判断语句
echo "no update"
else
#else是否则跳转, 即是变量里是有内容的,不为空,那么这里我们就要执行相应的条件,即下边的reboot来重新启动系统
reboot
#reboot是重新启动系统命令
fi
#fi是判断结束语句


弱口令:这一块牵扯的有点多, 分账户密码更改和端口更改,我一步一步来解释, 为什么更改了账户密码后还需要更改默认的端口呢, 因为服务器上很多服务或者我们安装的服务都有一个默认的端口,而黑客很多时候就是通过扫描这些端口来实现入侵, 我们通过更改端口后,那么黑客扫描的端口就是不存在的了,即使扫描了也是不会扫描出什么来的.

密码更改:

#passwd user
先输入旧密码,再输入两次相同的新密码,输入的密码不可见, user是用户名,即账户, 比如 passwd root 即是更改root账户的密码,
[RucLinux@localhost ~]$ passwd --help
用法: passwd [选项...] < 帐号名称>
  -k, --keep-tokens       保持身份验证令牌不过期
  -d, --delete            删除已命名帐号的密码(只有根用户才能进行此操作)
  -l, --lock              lock the password for the named account (root only)
  -u, --unlock            unlock the password for the named account (root only)
  -e, --expire            expire the password for the named account (root only)
  -f, --force             强制执行操作
  -x, --maximum=DAYS      密码的最长有效时限(只有根用户才能进行此操作)
  -n, --minimum=DAYS      密码的最短有效时限(只有根用户才能进行此操作)
  -w, --warning=DAYS      在密码过期前多少天开始提醒用户(只有根用户才能进行此操作)
  -i, --inactive=DAYS     当密码过期后经过多少天该帐号会被禁用(只有根用户才能进行此操作)
  -S, --status            报告已命名帐号的密码状态(只有根用户才能进行此操作)
  --stdin                 从标准输入读取令牌(只有根用户才能进行此操作)

Help options:
  -?, --help              Show this help message
  --usage                 Display brief usage message


端口更改涉及到的端口有很多, 分别代表着不同的服务, 比如 21 22 23 25 80 110 443 445 3306等Linux下常见的端口
请参考: http://www.myzhenai.com.cn/post/1783.html

21端口 FTP服务端口
22端口 Ssh连接端口
23端口 Telnet服务端口
25端口 Smtp邮件发送端口
80端口 Http传输协议端口,这端口最好不要改
110端口 Pop3邮件收取端口
443端口 Https安全超文本传输协议端口
445端口 Linux下这个端口好像没有开启
3306端口 Mysql数据库默认端口

查看端口命令 netstat lsof

[RucLinux@localhost ~]$ netstat --help
usage: netstat [-veenNcCF] [<af>] -r         netstat {-V|--version|-h|--help}
       netstat [-vnNcaeol] [<socket> ...]
       netstat { [-veenNac] -I[<iface>] | [-veenNac] -i | [-cnNe] -M | -s } [delay]

        -r, --route                display routing table
        -I, --interfaces=</iface><iface>   display interface table for </iface><iface>
        -i, --interfaces           display interface table
        -g, --groups               display multicast group memberships
        -s, --statistics           display networking statistics (like SNMP)
        -M, --masquerade           display masqueraded connections

        -v, --verbose              be verbose
        -n, --numeric              don't resolve names
        --numeric-hosts            don't resolve host names
        --numeric-ports            don't resolve port names
        --numeric-users            don't resolve user names
        -N, --symbolic             resolve hardware names
        -e, --extend               display other/more information
        -p, --programs             display PID/Program name for sockets
        -c, --continuous           continuous listing

        -l, --listening            display listening server sockets
        -a, --all, --listening     display all sockets (default: connected)
        -o, --timers               display timers
        -F, --fib                  display Forwarding Information Base (default)
        -C, --cache                display routing cache instead of FIB
        -T, --notrim               stop trimming long addresses
        -Z, --context              display SELinux security context for sockets

  </iface><iface>: Name of interface to monitor/list.
  <socket>={-t|--tcp} {-u|--udp} {-S|--sctp} {-w|--raw} {-x|--unix} --ax25 --ipx --netrom
  <af>=Use '-A </af><af>' or '--</af><af>'; default: inet
  List of possible address families (which support routing):
    inet (DARPA Internet) inet6 (IPv6) ax25 (AMPR AX.25) 
    netrom (AMPR NET/ROM) ipx (Novell IPX) ddp (Appletalk DDP) 
    x25 (CCITT X.25) 
</af></socket></iface></socket></af>

[RucLinux@localhost ~]$ lsof --help
lsof: illegal option character: -
lsof: -e not followed by a file system path: "lp"
lsof 4.82
 latest revision: ftp://lsof.itap.purdue.edu/pub/tools/unix/lsof/
 latest FAQ: ftp://lsof.itap.purdue.edu/pub/tools/unix/lsof/FAQ
 latest man page: ftp://lsof.itap.purdue.edu/pub/tools/unix/lsof/lsof_man
 usage: [-?abhlnNoOPRtUvVX] [+|-c c] [+|-d s] [+D D] [+|-f[gG]] [+|-e s]
 [-F [f]] [-g [s]] [-i [i]] [+|-L [l]] [+m [m]] [+|-M] [-o [o]] [-p s]
[+|-r [t]] [-s [p:s]] [-S [t]] [-T [t]] [-u s] [+|-w] [-x [fl]] [--] [names]
Defaults in parentheses; comma-separated set (s) items; dash-separated ranges.
  -?|-h list help          -a AND selections (OR)     -b avoid kernel blocks
  -c c  cmd c ^c /c/[bix]  +c w  COMMAND width (9)     
  +d s  dir s files        -d s  select by FD set     +D D  dir D tree *SLOW?*
                           +|-e s  exempt s *RISKY*   -i select IPv[46] files
  -l list UID numbers      -n no host names           -N select NFS files
  -o list file offset      -O avoid overhead *RISKY*  -P no port names
  -R list paRent PID       -s list file size          -t terse listing
  -T disable TCP/TPI info  -U select Unix socket      -v list version info
  -V verbose search        +|-w  Warnings (+)         -X skip TCP&UDP* files
  -Z Z  context [Z]
  -- end option scan
  +f|-f  +filesystem or -file names     +|-f[gG] flaGs 
  -F [f] select fields; -F? for help  
  +|-L [l] list (+) suppress (-) link counts < l (0 = all; default = 0)
                                        +m [m] use|create mount supplement
  +|-M   portMap registration (-)       -o o   o 0t offset digits (8)
  -p s   exclude(^)|select PIDs         -S [t] t second stat timeout (15)
  -T qs TCP/TPI Q,St (s) info
  -g [s] exclude(^)|select and print process group IDs
  -i i   select by IPv[46] address: [46][proto][@host|addr][:svc_list|port_list]
  +|-r [t[m<fmt>]] repeat every t seconds (15);  + until no files, - forever.
       An optional suffix to t is m<fmt>; m must separate t from </fmt><fmt> and
      </fmt><fmt> is an strftime(3) format for the marker line.
  -s p:s  exclude(^)|select protocol (p = TCP|UDP) states by name(s).
  -u s   exclude(^)|select login|UID set s
  -x [fl] cross over +d|+D File systems or symbolic Links
  names  select named files or files on named file systems
Anyone can list all files; /dev warnings disabled; kernel ID check disabled.
</fmt>


演示

netstat -ntlp   查看当前所有tcp端口·
netstat -ntulp | grep 80   查看所有80端口使用情况·
netstat -an | grep 3306   查看所有3306端口使用情况·
lsof -i :22 知道22端口被哪个进程占用
lsof -c abc 显示abc进程现在打开的文件
lsof -g gid 显示归属gid的进程情况
lsof -n 不将IP转换为hostname,缺省是不加上-n参数
lsof -p 12 看进程号为12的进程打开了哪些文件
lsof -u username 查看用户打开哪些文件
lsof -i @192.168.1.111 查看远程已打开的网络连接

编辑器 vi vim

[RucLinux@localhost ~]$ vi --help
VIM - Vi IMproved 7.4 (2013 Aug 10, compiled Dec 21 2016 17:06:34)

用法: vim [参数] [文件 ..]       编辑指定的文件
  或: vim [参数] -               从标准输入(stdin)读取文本
  或: vim [参数] -t tag          编辑 tag 定义处的文件
  或: vim [参数] -q [errorfile]  编辑第一个出错处的文件

参数:
   --			在这以后只有文件名
   -v			Vi 模式 (同 "vi")
   -e			Ex 模式 (同 "ex")
   -E			Improved Ex mode
   -s			安静(批处理)模式 (只能与 "ex" 一起使用)
   -d			Diff 模式 (同 "vimdiff")
   -y			容易模式 (同 "evim",无模式)
   -R			只读模式 (同 "view")
   -Z			限制模式 (同 "rvim")
   -m			不可修改(写入文件)
   -M			文本不可修改
   -b			二进制模式
   -l			Lisp 模式
   -C			兼容传统的 Vi: 'compatible'
   -N			不完全兼容传统的 Vi: 'nocompatible'
   -V[N][fname]		Be verbose [level N] [log messages to fname]
   -D			调试模式
   -n			不使用交换文件,只使用内存
   -r			列出交换文件并退出
   -r (跟文件名)		恢复崩溃的会话
   -L			同 -r
   -A			以 Arabic 模式启动
   -H			以 Hebrew 模式启动
   -F			以 Farsi 模式启动
   -T <terminal>	设定终端类型为 </terminal><terminal>
   -u <vimrc>		使用 </vimrc><vimrc> 替代任何 .vimrc
   --noplugin		不加载 plugin 脚本
   -P[N]		打开 N 个标签页 (默认值: 每个文件一个)
   -o[N]		打开 N 个窗口 (默认值: 每个文件一个)
   -O[N]		同 -o 但垂直分割
   +			启动后跳到文件末尾
   +<lnum>		启动后跳到第 </lnum><lnum> 行
   --cmd <command />	加载任何 vimrc 文件前执行 <command />
   -c <command />		加载第一个文件后执行 <command />
   -S <session>		加载第一个文件后执行文件 </session><session>
   -s <scriptin>	从文件 </scriptin><scriptin> 读入正常模式的命令
   -w <scriptout>	将所有输入的命令追加到文件 </scriptout><scriptout>
   -W </scriptout><scriptout>	将所有输入的命令写入到文件 </scriptout><scriptout>
   -x			编辑加密的文件
   --startuptime <file>	Write startup timing messages to </file><file>
   -i <viminfo>		使用 </viminfo><viminfo> 取代 .viminfo
   -h  或  --help	打印帮助(本信息)并退出
   --version		打印版本信息并退出
</viminfo></file></scriptout></scriptin></session></lnum></vimrc></terminal>

[RucLinux@localhost ~]$ vim --help
VIM - Vi IMproved 7.4 (2013 Aug 10, compiled Dec 21 2016 17:06:34)

用法: vim [参数] [文件 ..]       编辑指定的文件
  或: vim [参数] -               从标准输入(stdin)读取文本
  或: vim [参数] -t tag          编辑 tag 定义处的文件
  或: vim [参数] -q [errorfile]  编辑第一个出错处的文件

参数:
   --			在这以后只有文件名
   -v			Vi 模式 (同 "vi")
   -e			Ex 模式 (同 "ex")
   -E			Improved Ex mode
   -s			安静(批处理)模式 (只能与 "ex" 一起使用)
   -d			Diff 模式 (同 "vimdiff")
   -y			容易模式 (同 "evim",无模式)
   -R			只读模式 (同 "view")
   -Z			限制模式 (同 "rvim")
   -m			不可修改(写入文件)
   -M			文本不可修改
   -b			二进制模式
   -l			Lisp 模式
   -C			兼容传统的 Vi: 'compatible'
   -N			不完全兼容传统的 Vi: 'nocompatible'
   -V[N][fname]		Be verbose [level N] [log messages to fname]
   -D			调试模式
   -n			不使用交换文件,只使用内存
   -r			列出交换文件并退出
   -r (跟文件名)		恢复崩溃的会话
   -L			同 -r
   -A			以 Arabic 模式启动
   -H			以 Hebrew 模式启动
   -F			以 Farsi 模式启动
   -T <terminal>	设定终端类型为 </terminal><terminal>
   -u <vimrc>		使用 </vimrc><vimrc> 替代任何 .vimrc
   --noplugin		不加载 plugin 脚本
   -P[N]		打开 N 个标签页 (默认值: 每个文件一个)
   -o[N]		打开 N 个窗口 (默认值: 每个文件一个)
   -O[N]		同 -o 但垂直分割
   +			启动后跳到文件末尾
   +<lnum>		启动后跳到第 </lnum><lnum> 行
   --cmd <command />	加载任何 vimrc 文件前执行 <command />
   -c <command />		加载第一个文件后执行 <command />
   -S <session>		加载第一个文件后执行文件 </session><session>
   -s <scriptin>	从文件 </scriptin><scriptin> 读入正常模式的命令
   -w <scriptout>	将所有输入的命令追加到文件 </scriptout><scriptout>
   -W </scriptout><scriptout>	将所有输入的命令写入到文件 </scriptout><scriptout>
   -x			编辑加密的文件
   --startuptime <file>	Write startup timing messages to </file><file>
   -i <viminfo>		使用 </viminfo><viminfo> 取代 .viminfo
   -h  或  --help	打印帮助(本信息)并退出
   --version		打印版本信息并退出
</viminfo></file></scriptout></scriptin></session></lnum></vimrc></terminal>


演示

这里要说一下vi和vim的使用方法, 进入编辑模式请按键盘上的 i 键, 否则无法对文档进行编辑, 退出编辑模式请按Esc键. Shift+ZZ键是保存并退出vi或vim, Shift+ZQ键是不保存并退出vi或vim
vi /etc/ssh/sshd_config 打开文件并编辑, 如果文件不存在,会创建新的文件.所以请确定路径和文件名再保存

端口更改:

更改ssh端口
vi /etc/ssh/sshd_config
Port ** 将port前边的#号删除 **即是你需要的端口号,建议修改个大点的端口,以免和其他端口相冲突.
vi /etc/services 22端口都修改成指定的端口,22端口要改成与sshd_config里的端口一致,Tcp和Udp都改成与上边的端口一致

更改Mysql端口
find / -name my.cnf 查找mysql的配置文件,如果你知道mysql的配置文件路径的话,不需要这一步
vi /***/my.cnf /***/是路径,这是打开编辑mysql的配置文件
找到port=这一行,将这一行后边的端口号改成你想要修改为的端口号,必须是维一的,不能和其他服务或端口有冲突.
vi /etc/services 3306端口都修改成指定的端口,3306端口要改成与my.cnf里的端口一致,Tcp和Udp都改成与上边的端口一致

更改Ftp端口
这一个需要看你系统里安装的是什么样的Ftp服务,不同的服务有不同的配置文件. 不过我建议你还是不要安装Ftp,用Scp(Linux)或WinScp(windows)来进行数据上传下载
vsftpd
find / -name vsftpd.conf 查找vsftpd的配置文件,如果你知道vsftpsd的配置文件路径的话,不需要这一步
vi /****/vsftpd.conf /****/是vsftpd.conf所在目录,在vsftpd.conf中增加 listen_port=*** 最后这个星号这里是自定义的端口号.
vi /etc/services 21端口都修改成指定的端口,21端口要改成与vsftpd.conf里的端口一致,Tcp和Udp都改成与上边的端口一致

proftpd
find / -name proftpd.conf 查找proftpd的配置文件,如果你知道proftpd的配置文件路径的话,不需要这一步
vi /***/proftpd.conf port:21 将21改成你需要的端口
vi /etc/services 21端口都修改成指定的端口,21端口要改成与proftpd.conf里的端口一致,Tcp和Udp都改成与上边的端口一致

pure-ftpd
find / -name pure-ftpd.conf 查找pure-ftpd的配置文件,如果你知道pure-ftpd的配置文件路径的话,不需要这一步
vi /****/pure-ftpd.conf /****/是pure-ftpd.conf所在目录,Bind 127.0.0.1,21 Bind 0.0.0.0,*** 将# Bind前的#去掉,并将127替换成0 将21改成你指定的端口
vi /etc/services 21端口都修改成指定的端口,21端口要改成与pure-ftpd.conf里的端口一致,Tcp和Udp都改成与上边的端口一致



关闭端口和服务操作的方法:
注:Centos7和Centos6的方法是不一样的,请搜索Centos7的使用方法, 我们这里以Centos6演示. 关闭端口有两种方法,因为Linux下的端口开放是以服务的启动并监听来实现端口开放的, 我们停止服务也可以做到端口关闭,也可以利用防火墙来关闭端口, Linux下的防火墙是iptables, 在任何操作之后, 都需要执行 service iptables save和service iptables restart
关闭端口

service iptables save 保存操作
service iptables start 启动防火墙
service iptables restart 重启防火墙
service iptables stop 停止防火墙(只是本次停止,如果关联了服务的话,系统重新启动后还会被启动)
[root@localhost RucLinux]# iptables --help
iptables v1.4.7

Usage: iptables -[ACD] chain rule-specification [options]
       iptables -I chain [rulenum] rule-specification [options]
       iptables -R chain rulenum rule-specification [options]
       iptables -D chain rulenum [options]
       iptables -[LS] [chain [rulenum]] [options]
       iptables -[FZ] [chain] [options]
       iptables -[NX] chain
       iptables -E old-chain-name new-chain-name
       iptables -P chain target [options]
       iptables -h (print this help information)

Commands:
Either long or short options are allowed.
  --append  -A chain		Append to chain
  --check   -C chain		Check for the existence of a rule
  --delete  -D chain		Delete matching rule from chain
  --delete  -D chain rulenum
				Delete rule rulenum (1 = first) from chain
  --insert  -I chain [rulenum]
				Insert in chain as rulenum (default 1=first)
  --replace -R chain rulenum
				Replace rule rulenum (1 = first) in chain
  --list    -L [chain [rulenum]]
				List the rules in a chain or all chains
  --list-rules -S [chain [rulenum]]
				Print the rules in a chain or all chains
  --flush   -F [chain]		Delete all rules in  chain or all chains
  --zero    -Z [chain [rulenum]]
				Zero counters in chain or all chains
  --new     -N chain		Create a new user-defined chain
  --delete-chain
            -X [chain]		Delete a user-defined chain
  --policy  -P chain target
				Change policy on chain to target
  --rename-chain
            -E old-chain new-chain
				Change chain name, (moving any references)
Options:
[!] --proto	-p proto	protocol: by number or name, eg. `tcp'
[!] --source	-s address[/mask][...]
				source specification
[!] --destination -d address[/mask][...]
				destination specification
[!] --in-interface -i input name[+]
				network interface name ([+] for wildcard)
 --jump	-j target
				target for rule (may load target extension)
  --goto      -g chain
                              jump to chain with no return
  --match	-m match
				extended match (may load extension)
  --numeric	-n		numeric output of addresses and ports
[!] --out-interface -o output name[+]
				network interface name ([+] for wildcard)
  --table	-t table	table to manipulate (default: `filter')
  --verbose	-v		verbose mode
  --line-numbers		print line numbers when listing
  --exact	-x		expand numbers (display exact values)
[!] --fragment	-f		match second or further fragments only
  --modprobe=<command />		try to insert modules using this command
  --set-counters PKTS BYTES	set the counter during insert/append
[!] --version	-V		print package version.


演示

iptables -I INPUT -p tcp  --dport 22 -j DROP 关闭TCP协议下的22端口
iptables -I INPUT -p udp  --dport 22 -j DROP 关闭UDP协议下的22端口
iptables -I INPUT 1 -p tcp --dport 80 -m string --string "Mozilla/4.0 (compatible; MSIE 6.0; Windows NT 5.1; SV1)" --algo bm -j DROP 禁止指定的浏览器UserAgent(UA标识)访问
iptables -I INPUT -s 121.205.215.140 -j DROP---禁止某个IP访问
service iptables save
service iptables restart

服务操作方法:

[root@localhost RucLinux]# chkconfig --help
chkconfig 版本 1.3.49.5 - 版权 (C) 1997-2000 Red Hat, Inc.
在 GNU 公共许可的条款下,本软件可以被自由发行。

用法:   chkconfig [--list] [--type <type>] [name]
         chkconfig --add <name>
         chkconfig --del </name><name>
         chkconfig --override </name><name>
         chkconfig [--level <levels>] [--type <type>] <name> <on |off|reset|resetpriorities>
chkconfig --list [name]:显示所有运行级系统服务的运行状态信息(on或off)。如果指定了name,那么只显示指定的服务在不同运行级的状态。
chkconfig --add name:增加一项新的服务。chkconfig确保每个运行级有一项启动(S)或者杀死(K)入口。如有缺少,则会从缺省的init脚本自动建立。
chkconfig --del name:删除服务,并把相关符号连接从/etc/rc[0-6].d删除。
chkconfig [--level levels] name:设置某一服务在指定的运行级是被启动,停止还是重置。
</on></name></type></levels></name></type>


演示

chkconfig --list 显示本机所有服务状态
chkconfig --add mysql 将mysql添加为服务
chkconfig --del mysql 将mysql服务删除
chkconfig mysql on 将mysql服务启动
chkconfig mysql off 将mysql服务停止

进程操作

[root@localhost RucLinux]# killall --help
Usage: killall [-Z 上下文] [-u 用户名] [ -eIgiqrvw ] [ -信号 ] 程序名...
      killall -l, --list
      killall -V, --version

  -e,--exact          对长名字需要严格匹配
  -I,--ignore-case    匹配进程名时忽略大小写
  -g,--process-group  杀死进程组而不是进程
  -i,--interactive    在杀死进程前要求确认
  -l,--list           显示所有的信号名
  -q,--quiet          不要打印抱怨信息
  -r,--regexp         将 "进程名" 视为扩展正则表达式
  -s,--signal 信号    发送 "信号" 而不是 SIGTERM
  -u,--user 用户      仅杀死 "用户" 的进程
  -v,--verbose        信号成功送出时打印信息
  -V,--version        显示版本信息
  -w,--wait           等待进程死亡
  -Z,--context 正则表达式 仅杀死含有指定上下文的进程
                          (必须在其他参数前使用)


演示

killall -9 mysql 终止mysql进程

权限设置
Linux下的权限设置又分用户组权限和文件所有者权限,还有文件自身权限, 其中文件自身权限还分有 500 644 666 755 777 等权限

cat /etc/group 查看所有用户组
cat /etc/shadow 查看所有用户名
cat /etc/passwd 同上
[root@localhost RucLinux]# adduser --help
用法:adduser [选项] 登录
      adduser -D
      adduser -D [选项]

选项:
  -b, --base-dir BASE_DIR	新账户的主目录的基目录
  -c, --comment COMMENT         新账户的 GECOS 字段
  -d, --home-dir HOME_DIR       新账户的主目录
  -D, --defaults		显示或更改默认的 useradd 配置
 -e, --expiredate EXPIRE_DATE  新账户的过期日期
  -f, --inactive INACTIVE       新账户的密码不活动期
  -g, --gid GROUP		新账户主组的名称或 ID
  -G, --groups GROUPS	新账户的附加组列表
  -h, --help                    显示此帮助信息并推出
  -k, --skel SKEL_DIR	使用此目录作为骨架目录
  -K, --key KEY=VALUE           不使用 /etc/login.defs 中的默认值
  -l, --no-log-init	不要将此用户添加到最近登录和登录失败数据库
  -m, --create-home	创建用户的主目录
  -M, --no-create-home		不创建用户的主目录
  -N, --no-user-group	不创建同名的组
  -o, --non-unique		允许使用重复的 UID 创建用户
  -p, --password PASSWORD		加密后的新账户密码
  -r, --system                  创建一个系统账户
  -R, --root CHROOT_DIR         chroot 到的目录
  -s, --shell SHELL		新账户的登录 shell
  -u, --uid UID			新账户的用户 ID
  -U, --user-group		创建与用户同名的组
  -Z, --selinux-user SEUSER		为 SELinux 用户映射使用指定 SEUSER

[root@localhost RucLinux]# useradd --help
用法:useradd [选项] 登录
      useradd -D
      useradd -D [选项]

选项:
  -b, --base-dir BASE_DIR	新账户的主目录的基目录
  -c, --comment COMMENT         新账户的 GECOS 字段
  -d, --home-dir HOME_DIR       新账户的主目录
  -D, --defaults		显示或更改默认的 useradd 配置
 -e, --expiredate EXPIRE_DATE  新账户的过期日期
  -f, --inactive INACTIVE       新账户的密码不活动期
  -g, --gid GROUP		新账户主组的名称或 ID
  -G, --groups GROUPS	新账户的附加组列表
  -h, --help                    显示此帮助信息并推出
  -k, --skel SKEL_DIR	使用此目录作为骨架目录
  -K, --key KEY=VALUE           不使用 /etc/login.defs 中的默认值
  -l, --no-log-init	不要将此用户添加到最近登录和登录失败数据库
  -m, --create-home	创建用户的主目录
  -M, --no-create-home		不创建用户的主目录
  -N, --no-user-group	不创建同名的组
  -o, --non-unique		允许使用重复的 UID 创建用户
  -p, --password PASSWORD		加密后的新账户密码
  -r, --system                  创建一个系统账户
  -R, --root CHROOT_DIR         chroot 到的目录
  -s, --shell SHELL		新账户的登录 shell
  -u, --uid UID			新账户的用户 ID
  -U, --user-group		创建与用户同名的组
  -Z, --selinux-user SEUSER		为 SELinux 用户映射使用指定 SEUSER

[root@localhost RucLinux]# groupadd --help
用法:groupadd [选项] 组

选项:
  -f, --force		如果组已经存在则成功退出
			并且如果 GID 已经存在则取消 -g
  -g, --gid GID                 为新组使用 GID
  -h, --help                    显示此帮助信息并推出
  -K, --key KEY=VALUE           不使用 /etc/login.defs 中的默认值
  -o, --non-unique              允许创建有重复 GID 的组
  -p, --password PASSWORD       为新组使用此加密过的密码
  -r, --system                  创建一个系统账户
  -R, --root CHROOT_DIR         chroot 到的目录

[root@localhost RucLinux]# usermod --help
用法:usermod [选项] 登录

选项:
  -c, --comment 注释            GECOS 字段的新值
  -d, --home HOME_DIR           用户的新主目录
  -e, --expiredate EXPIRE_DATE  设定帐户过期的日期为 EXPIRE_DATE
  -f, --inactive INACTIVE       过期 INACTIVE 天数后,设定密码为失效状态
  -g, --gid GROUP               强制使用 GROUP 为新主组
  -G, --groups GROUPS           新的附加组列表 GROUPS
  -a, --append GROUP            将用户追加至上边 -G 中提到的附加组中,
                                并不从其它组中删除此用户
  -h, --help                    显示此帮助信息并推出
  -l, --login LOGIN             新的登录名称
  -L, --lock                    锁定用户帐号
  -m, --move-home               将家目录内容移至新位置 (仅于 -d 一起使用)
  -o, --non-unique              允许使用重复的(非唯一的) UID
  -p, --password PASSWORD       将加密过的密码 (PASSWORD) 设为新密码
  -R, --root CHROOT_DIR         chroot 到的目录
  -s, --shell SHELL             该用户帐号的新登录 shell
  -u, --uid UID                 用户帐号的新 UID
  -U, --unlock                  解锁用户帐号
  -Z, --selinux-user  SEUSER       用户账户的新 SELinux 用户映射

[root@localhost RucLinux]# groups --help
用法:groups [选项]... [用户名]...
显示每个输入的用户名所在的全部组,如果没有指定用户名则默认为当前进程用户(当用户组数据库发生变更时可能导致差异)。

      --help		显示此帮助信息并退出
      --version		显示版本信息并退出

请向bug-coreutils@gnu.org 报告groups 的错误

[root@localhost RucLinux]# chown --help
用法:chown [选项]... [所有者][:[组]] 文件...
 或:chown [选项]... --reference=参考文件 文件...
更改每个文件的所有者和/或所属组。
当使用 --referebce 参数时,将文件的所有者和所属组更改为与指定参考文件相同。

  -c, --changes			类似 verbose,但只在有更改时才显示结果
      --dereference		受影响的是符号链接所指示的对象,而非符号链接本身
  -h, --no-dereference		会影响符号链接本身,而非符号链接所指示的目的地
				(当系统支持更改符号链接的所有者时,此选项才有用)
      --from=当前所有者:当前所属组
                         	只当每个文件的所有者和组符合选项所指定时才更改所
				有者和组。其中一个可以省略,这时已省略的属性就不
				需要符合原有的属性。
      --no-preserve-root	不特殊对待"/"(默认值)
      --preserve-root		不允许在"/"上递归操作
  -f, --silent, --quiet	去除大部份的错误信息
      --reference=参考文件	使用参考文件的所属组,而非指定值
  -R, --recursive		递归处理所有的文件及子目录
  -v, --verbose			为处理的所有文件显示诊断信息

以下选项是在指定了 -R 选项时被用于设置如何穿越目录结构体系。
如果您指定了多于一个选项,那么只有最后一个会生效。

  -H         如果命令行参数是一个通到目录的符号链接,则遍历符号链接
  -L         遍历每一个遇到的通到目录的符号链接
  -P         不遍历任何符号链接(默认)

      --help		显示此帮助信息并退出
      --version		显示版本信息并退出

如果没有指定所有者,则不会更改。 所属组若没有指定也不会更改,但当加上
":"时 GROUP 会更改为指定所有者的主要组。所有者和所属组可以是数字或名称。

示例:
  chown root /u		将 /u 的属主更改为"root"。
  chown root:staff /u	和上面类似,但同时也将其属组更改为"staff"。
  chown -hR root /u	将 /u 及其子目录下所有文件的属主更改为"root"。

[root@localhost RucLinux]# chmod --help
用法:chmod [选项]... 模式[,模式]... 文件...
 或:chmod [选项]... 八进制模式 文件...
 或:chmod [选项]... --reference=参考文件 文件...
将每个文件的模式更改为指定值。

  -c, --changes		类似 --verbose,但只在有更改时才显示结果
      --no-preserve-root	不特殊对待根目录(默认)
      --preserve-root		禁止对根目录进行递归操作
  -f, --silent, --quiet	去除大部份的错误信息
  -v, --verbose		为处理的所有文件显示诊断信息
      --reference=参考文件	使用指定参考文件的模式,而非自行指定权限模式
  -R, --recursive		以递归方式更改所有的文件及子目录
      --help		显示此帮助信息并退出
      --version		显示版本信息并退出

每种 MODE 都应属于这类形式"[ugoa]*([-+=]([rwxXst]*|[ugo]))+"。

请向bug-coreutils@gnu.org 报告chmod 的错误


演示

adduser toutiao 创建一个叫toutiao的用户
useradd toutiao 同上
userdel toutiao 删除toutiao用户
groupadd -g 344 toutiao 添加一个ID为344的用户组toutiao
usermod -l toutiao1 toutiao 将用户名toutiao为toutiao1
usermod -G root toutiao 将toutiao添加到root用户组
groups RucLinux 查询用户RucLinux在什么用户组里
chown -R root:root /var/www/* 将/var/www/下的所有目录和文件都设置为root用户和root用户组权限 两个root之间有个半角的冒号
chmod 644 /var/www 将/var/www目录的权限设置为644
chmod -R 644 /var/www/* 将/var/www/下的所有目录和文件都设置为644权限

其他安全设置
为自己的系统安装 rootkits和fail2ban
rootkits中文名叫”Rootkit猎手”, 可以发现大约58个已知的rootkits和一些嗅探器和后门程序. 它通过执行一系列的测试脚本来确认你的机器是否已经感染rootkits. 比如检查rootkits使用的基本文件, 可执行二进制文件的错误文件权限, 检测内核模块等等. Rootkit Hunter由Michael Boelen开发, 是开源(GPL)软件.
yum install rkhunter* -y 安装rkhunter
rkhunter -c rkhunter的使用方法
请在我的博客里搜索 rkhunter和fail2ban查阅相关的详细教程

您可能需要的知识点
Linux下生成链条式密码钥匙的脚本 http://www.myzhenai.com.cn/post/2172.html
Linux下使用iptables封锁端口禁止邮件发送 http://www.myzhenai.com.cn/post/2161.html
Linux服务器一键备份脚本解释 http://www.myzhenai.com.cn/post/2636.html
Linux服务器安全之更改默认端口 http://www.myzhenai.com.cn/post/1783.html
Linux下的rootkits检测程序rkhunter http://www.myzhenai.com.cn/post/1763.html
iptables防火墙禁止福建莆田ip地址规则 http://www.myzhenai.com.cn/post/1685.html
Linux下iptables防火墙已停的解决办法 http://www.myzhenai.com.cn/post/1678.html
Linux下使用crontab添加定时任务 http://www.myzhenai.com.cn/post/1628.html
更新clamav病毒库的方法 http://www.myzhenai.com.cn/post/1367.html
Linux下目录无法删除的解决办法 http://www.myzhenai.com.cn/post/1350.html
Centos下删除系统多余旧内核的命令与方法 http://www.myzhenai.com.cn/post/1170.html
Centos6.4编译安装clamav-0.97.8 http://www.myzhenai.com.cn/post/1061.html
Linux VPS服务器管理常用命令 http://www.myzhenai.com.cn/post/815.html
Linux系统编译安装Putty软件 http://www.myzhenai.com.cn/post/802.html
Linux系统使用的远程连接工具 http://www.myzhenai.com.cn/post/793.html
Linux服务器中文文件名无法删除的解决方法 http://www.myzhenai.com.cn/post/787.html
mysql数据库命令行备份方法 http://www.myzhenai.com.cn/post/785.html
Linux命令:改变文件或目录的访问权限 http://www.myzhenai.com.cn/post/658.html
Linux系统根文件系统的目录解释 http://www.myzhenai.com.cn/post/656.html
如何保证Linux系统安全 http://www.myzhenai.com.cn/post/602.html
linux忘记root密码又忘记grub密码的解决方法 http://www.myzhenai.com.cn/post/600.html
Centos6下pure-ftpd1.0.36编译安装和配置 http://www.myzhenai.com.cn/post/1812.html
linux centos 下fail2ban安装与配置 http://www.myzhenai.com.cn/post/1791.html


sicnature ---------------------------------------------------------------------
Your current IP address is: 54.92.178.105
Your IP address location: 美国
Your IP address country and region: 美国 美国
Your current browser is:
Your current system is:
Original content, please indicate the source:
同福客栈论坛 | 海南仙岛海南乡情论坛 | JiaYu Blog
sicnature ---------------------------------------------------------------------
Welcome to reprint. Please indicate the source http://www.myzhenai.com.cn/post/2664.html

没有评论

发表评论

电子邮件地址不会被公开。 必填项已用*标注