systemctl enable 服务名 #开机自启动
systemctl disable 服务名 #禁用开机自启动
systemctl stop 服务名 #停止服务
systemctl start 服务名 #启动服务
systemctl restart 服务名 #重启服务
systemctl status 服务名 #查看服务状态
service 服务名 start|stop|restart #启动/停止/重启 服务
chkconfig --list #查看启动服务
systemctl list-unit-files #列出systemd服务
在我们Linux系统当中,默认的情况下,所有的系统上的帐号与一般身份使用者,还有root的相关信息, 都是记录在/etc/passwd这个文件内的。至于个人的密码则是记录在/etc/shadow这个文件下。 此外,Linux所有的群组名称都纪录在/etc/group内!这三个文件可以说是Linux系统里面帐号、密码、群组信息的集中地。/etc/passwd文件将每个用户的详细信息写为一行,其中包含七个字段,每个字段之间用冒号 : 分隔。
使用cat /etc/passwd
命令查看系统所有用户
[root@localhost ~]# cat /etc/passwd
root:x:0:0:root:/root:/bin/bash
bin:x:1:1:bin:/bin:/sbin/nologin
daemon:x:2:2:daemon:/sbin:/sbin/nologin
adm:x:3:4:adm:/var/adm:/sbin/nologin
lp:x:4:7:lp:/var/spool/lpd:/sbin/nologin
sync:x:5:0:sync:/sbin:/bin/sync
shutdown:x:6:0:shutdown:/sbin:/sbin/shutdown
halt:x:7:0:halt:/sbin:/sbin/halt
mail:x:8:12:mail:/var/spool/mail:/sbin/nologin
operator:x:11:0:operator:/root:/sbin/nologin
games:x:12:100:games:/usr/games:/sbin/nologin
ftp:x:14:50:FTP User:/var/ftp:/sbin/nologin
nobody:x:99:99:Nobody:/:/sbin/nologin
systemd-network:x:192:192:systemd Network Management:/:/sbin/nologin
dbus:x:81:81:System message bus:/:/sbin/nologin
polkitd:x:999:998:User for polkitd:/:/sbin/nologin
sshd:x:74:74:Privilege-separated SSH:/var/empty/sshd:/sbin/nologin
postfix:x:89:89::/var/spool/postfix:/sbin/nologin
chrony:x:998:996::/var/lib/chrony:/sbin/nologin
test:x:1000:1000::/home/test:/bin/bash
比如
test:x:1000:1000::/home/test:/bin/bash
字段解释:
useradd 用户名
#删除不必要的账号。
userdel 用户名
#锁定不必要的账号。
passwd -l 用户名
#解锁必要的账号。
passwd -u 用户名
#给账户设置密码
passwd 用户名
查看空口令和root权限账号,确认是否存在异常账号:
#查看空口令账号
awk -F: '($2=="")' /etc/shadow
#查看UID为零的账号,UID为0就是root权限账号
awk -F: '($3==0)' /etc/passwd
加固空口令账号:
#给账户设置密码
passwd 用户名
确认UID为零的账号只有root账号。
加强口令的复杂度等,降低被猜解的可能性。
PASS_MAX_DAYS 90 #新建用户的密码最长使用天数
PASS_MIN_DAYS 0 #新建用户的密码最短使用天数
PASS_WARN_AGE 7 #新建用户的密码到期提前提醒天数
例如:
chage -m 0 -M 30 -E 2000-01-01 -W 7 <用户名>
表示将此用户的密码最长使用天数设为30,最短使用天数设为0,密码2000年1月1日过期,过期前七天警告用户。
vi /etc/pam.d/system-auth
在password sufficient这行后面添加remember=5
password sufficient pam_unix.so use_authtok md5 shadow remember=5
使用pam_pwquality模块设置密码复杂度。
vi /etc/pam.d/system-auth
找到password requisite pam_pwquality.so这行(Centos6是password requisite pam_cracklib这行),在后面添加retry=3 difok=4 minlen=6 ucredit=-2 lcredit=-3 ocrdit=-1
#%PAM-1.0
# This file is auto-generated.
# User changes will be destroyed the next time authconfig is run.
auth required pam_env.so
auth required pam_faildelay.so delay=2000000
auth sufficient pam_unix.so nullok try_first_pass
auth requisite pam_succeed_if.so uid >= 1000 quiet_success
auth required pam_deny.so
account required pam_unix.so
account sufficient pam_localuser.so
account sufficient pam_succeed_if.so uid < 1000 quiet
account required pam_permit.so
password requisite pam_pwquality.so try_first_pass local_users_only retry=3 authtok_type= difok=4 minlen=6 ucredit=-2 lcredit=-3 ocrdit=-1
password sufficient pam_unix.so sha512 shadow nullok try_first_pass use_authtok
password required pam_deny.so
session optional pam_keyinit.so revoke
session required pam_limits.so
-session optional pam_systemd.so
session [success=1 default=ignore] pam_succeed_if.so service in crond quiet use_uid
session required pam_unix.so
解释:
注意:此项配置只对控制台登录有效,ssh登录无效。
vi /etc/pam.d/system-auth
在第一个auth行下加入一行
auth required pam_tally2.so onerr=fail deny=5 unlock_time=1800 root_unlock_time=1800 even_deny_root root_unlock_time=1800
#%PAM-1.0
# This file is auto-generated.
# User changes will be destroyed the next time authconfig is run.
auth required pam_tally2.so onerr=fail deny=5 unlock_time=1800 root_unlock_time=1800 even_deny_root root_unlock_time=1800
auth required pam_env.so
auth required pam_faildelay.so delay=2000000
auth sufficient pam_unix.so nullok try_first_pass
auth requisite pam_succeed_if.so uid >= 1000 quiet_success
auth required pam_deny.so
解释:
pam_tally2
查看被锁定的用户pam_tally2 --reset -u username
可以将被锁定的用户解锁限制能su到root的用户
使用命令 vi /etc/pam.d/su
修改配置文件,在配置文件中添加行。
例如:只允许test组用户su到root,则添加 auth required pam_wheel.so group=test
针对所有用户设置,修改/etc/profile文件。比如设置超时时间为30分钟。
vi /etc/profile
在文件末尾加上(单位是秒)
#1800秒
export TMOUT=1800
最后刷新配置文件即可生效。
source /etc/profile
Secure Shell最著名的名称SSH是为远程安全地连接IT系统而开发的协议。SSH的配置文件是/ect/ssh/sshd_config
首先创建普通权限账号并配置密码,防止无法远程登录。
使用命令 vi /etc/ssh/sshd_config
修改配置文件
找到 # Authentication这行的下面,将PermitRootLogin的值改成no,并保存。
# Authentication:
#LoginGraceTime 2m
PermitRootLogin no
#StrictModes yes
#MaxAuthTries 6
#MaxSessions 10
最后重启服务
service sshd restart
sshv1是过时不安全协议,已被废弃。
vi /etc/ssh/sshd_config
在文件中增加以下内容
Protocol 2
重启服务生效
systemctl restart sshd
Port 2026
重启服务生效
systemctl restart sshd
vi /etc/ssh/sshd_config
ClientAliveInterval 120
ClientAliveCountMax 5
重启服务生效
systemctl restart sshd
解释:除了root之外的所有用户都是120秒登录超时,自动登出。检测到5次不活动就断开连接。
比如:SSH登录密码错误3次,锁定账户3分钟。
vi /etc/pam.d/sshd
在#%PAM-1.0下添加一行
auth required pam_tally2.so deny=3 unlock_time=180 even_deny_root root_unlock_time300
解释:
pam_tally2
查看被锁定的用户pam_tally2 --reset -u username
可以将被锁定的用户解锁重启服务生效
systemctl restart sshd
默认情况下,启用公钥身份验证,但是显式启用它会使其更加可靠。
vi /etc/ssh/sshd_config
PubkeyAuthentication yes
重启服务生效
systemctl restart sshd
用户公钥文件保存路径,默认为用户的home目录下.ssh隐藏文件夹中的authorized_keys,建议更换到其他目录,防止丢失或者被恶意登陆者在默认的这个路径中找到篡改。
vi /etc/ssh/sshd_config
AuthorizedKeysFile .ssh/authorized_keys
重启服务生效
systemctl restart sshd
比如:配置SSH服务,设置RSA证书登录。
#不允许密码登录
PasswordAuthentication no
#不允许root认证登录
PermitRootLogin no
#允许RSA数字证书
RSAAuthentication yes
#允许公钥登录
PubkeyAuthentication yes
#修改默认公钥存放的位置
AuthorizedKeysFile .ssh/authorized_keys
重启服务生效
systemctl restart sshd
默认情况下,系统上创建的所有用户都可以远程登录。 为所有用户提供远程登录机会不是一个好的安全习惯。 我们可以限制指定用户的登录。比如:只允许honor这个用户使用SSH远程登录,其他用户不能。
vi /etc/ssh/sshd_config
AllowUsers honor
重启服务生效
systemctl restart sshd
限制用户登录的另一种方法是通过指定没有权限使用ssh远程登录的用户帐户。 除指定用户之外的所有其他用户将具有远程访问权限。
vi /etc/ssh/sshd_config
DenyUser root
重启服务生效
systemctl restart sshd
默认情况下,启动ssh服务时,它将在所有接口和IP地址上运行。 如果系统具有多个网络接口(其中一些接口不安全),则可能会产生一些安全问题。 我们可以限制ssh服务接口的运行。 ssh服务将不接受来自其他接口的连接。
vi /etc/ssh/sshd_config
ListenAddress 10.0.0.10
StrictMode在ssh服务器启动之前检查某些情况。 在ssh守护程序启动之前,将执行ssh密钥,配置文件所有权,权限检查。 如果其中之一失败,ssh服务器守护程序将不会启动。 严格模式默认情况下处于启用状态,但通常由系统管理员关闭。 出于安全原因应启用它。
vi /etc/ssh/sshd_config
StrictMode yes
重启服务生效
systemctl restart sshd
ssh的最佳功能之一是通过远程连接转发X11。 对于某些系统管理员和用户来说,这是非常有用的功能。 但这会在系统中创建一些安全漏洞。 如果不需要X11转发,请禁用它。
vi /etc/ssh/sshd_config
X11Forwarding no
重启服务生效
systemctl restart sshd
vi /etc/ssh/sshd_config
显示系统banner信息,如果开启会在每次登陆时显示系统信息,减少恶意登陆者获取的信息量,防止被恶意利用。
Banner NONE
重启服务生效
systemctl restart sshd
vi /etc/ssh/sshd_config
最多登录尝试次数,建议值设置小一点,加大暴力破解难度。
MaxAuthTries 3
重启服务生效
systemctl restart sshd
vi /etc/ssh/sshd_config
PidFile /var/run/sshd.pid
重启服务生效
systemctl restart sshd
本质是设置Linux计划任务(定时任务)
crontab -e
按i键进入编辑模式,输入以下内容
50 7 * * * /etc/init.d/sshd start
50 22 * * * /etc/init.d/sshd stop
30 7 * * 6 /etc/init.d/sshd start
保存退出,使用命令crontab -l
可查看创建的计划任务。
解释:
crontab [-u username] #省略用户表表示操作当前用户的crontab
-e #(编辑工作表)
-l #(列出工作表里的命令)
-r #(删除工作作)
我们用crontab -e进入当前用户的工作表编辑,是常见的vim界面,每行是一条命令。
crontab的命令构成为:时间+动作,其时间有分、时、日、月、周五种,操作符有
* 取值范围内的所有数字
/ 每过多少个数字
- 从X到Z
, 散列数字
telnet协议是TCP/IP协议族中的一员,是Internet远程登陆服务的标准协议和主要方式。它为用户提供了在本地计算机上完成远程主机工作的能力。在终端使用者的电脑上使用telnet程序,用它连接到服务器。Linux系统默认没有安装该服务,Linux系统安装telnet服务后,配置文件在/etc/xinetd.d/telent
如果配置文件不存在则自己创建。
使用命令vi /etc/service
找到Telnet,将默认23端口号改成自定义端口号,比如2330。然后使用命令service xinetd restart
重启服务。
如果安装了Telnet服务需要禁用,可以在配置文件vi /etc/xinetd.d/telent
新增一行disable = yes
,然后用命令service xinetd restart
重启服务。
vi /etc/xinetd.d/telent
在配置文件里面输入如下内容
service telnet
{
socket_type = stream
wait = no
user = root
server = /usr/sbin/in.telnetd
instances = 10
per_source = 1
}
解释:
cps 100 10
vsftpd 是“very secure FTP daemon”的缩写,安全性是它的一个最大的特点。vsftpd 是一个 UNIX 类操作系统上运行的服务器的名字,它可以运行在诸如 Linux、BSD、Solaris、 HP-UNIX等系统上面,是一个完全免费的、开放源代码的ftp服务器软件,支持很多其他的 FTP 服务器所不支持的特征。比如:非常高的安全性需求、带宽限制、良好的可伸缩性、可创建虚拟用户、支持IPv6、速率高等。
ftp服务默认端口是21,通常情况修改成自定义端口会更加安全。
第一步:使用命令vi /etc/service
找到ftp,将默认21端口号改成自定义端口号,比如8021。
第二步:vi /etc/vsftpd/vsftpd.conf
如果文件中有Listen_port=21
,则将21修改为8021,否则添加一行Listen_port=8021
,最后重启服务service vsftpd restart
vi /etc/vsftpd/vsftpd.conf
在配置文件中添加如下一行代码
nopriv_user=pyftp
vi /etc/vsftpd/vsftpd.conf
在配置文件中添加如下一行代码
pasv_min_port=50000
pasv_max_port=60000
vi /etc/vsftpd/vsftpd.conf
在配置文件中添加如下一行代码
chroot_local_user=YES
vsftpd服务通过配置文件/etc/vsftpd/ftpusers
限制用户ftp连接服务器。在该文件中的用户都不能通过ftp登录服务器。每个被限制的用户名各占一行,该文件一般只能通过root用户维护。
如果用户名包含在该文件中,那么这个用户使用ftp连接服务器时,一般会报错User xxxxx access denied
。为了让某用户能够通过ftp连接服务器,可以在/etc/vsftpd/ftpusers
文件中注释掉或者删除该用户名。
[root@localhost vsftpd]# cat /etc/vsftpd/ftpusers
# Users that are not allowed to login via ftp 以下用户不能登录ftp
root
bin
daemon
adm
lp
sync
shutdown
halt
mail
news
uucp
operator
games
nobody
vi /etc/vsftpd/vsftpd.conf
在配置文件中添加如下一行代码
anonymous_enable=NO
vi /etc/vsftpd/vsftpd.conf
在配置文件中添加如下一行代码
anon_upload_enable=NO
vi /etc/vsftpd/vsftpd.conf
在配置文件中添加如下一行代码
anon_mkdir_write_enable=NO
vi /etc/vsftpd/vsftpd.conf
在配置文件中添加如下一行代码
anon_other_write_enable=NO
如umask是022,这时创建一个权限为666的文件,文件的实际权限为666-022=644
vi /etc/vsftpd/vsftpd.conf
在配置文件中添加如下一行代码
anon_umask=022
vi /etc/vsftpd/vsftpd.conf
在配置文件中添加如下一行代码
#单位是秒
data_connection_timeout=300
拓展:
connect_timeout=300
accept_timeout=300
data_connection_timeout=300
idle_session_timeout=300
vi /etc/vsftpd/vsftpd.conf
在配置文件中添加如下一行代码
anon_max_rate=512000
vi /etc/vsftpd/vsftpd.conf
在配置文件中添加如下一行代码
local_max_rate=1000000
Apache HTTP Server(简称Apache)是Apache软件基金会的一个开放源码的Web服务器软件。Linux安装httpd服务后,配置文件在/etc/httpd/conf/httpd.conf
注:配置文件的修改都需要重启服务才会生效。
httpd服务默认端口是80
vi /etc/httpd/conf/httpd.conf
Listen 6666
vi /etc/httpd/conf/httpd.conf
找到配置文件中Options Indexes FollowSymLinks
将Indexes删除
Options FollowSymLinks
vi /etc/httpd/conf/httpd.conf
添加如下代码
#隐藏Apache版本号
ServerTokens Prod
#隐藏操作系统版本信息
ServerSignature OFF
vi /etc/httpd/conf/httpd.conf
修改成如下
User apache
Group www
如果要修改网站的httpd服务为root权限
User root
Group root
rotatelogs是apache自带的日志按日期生成的模块。
[root@localhost httpd]# find / -name rotatelogs
/usr/sbin/rotatelogs
vi /etc/httpd/conf/httpd.conf
修改成如下
#ErrorLog logs/error_log #注释此行,添加下面这行
ErrorLog "|/usr/sbin/rotatelogs /var/log/httpd/error_log%Y%m%d.log 86400 480"
#CustomLog logs/access_log common
#CustomLog "logs/access_log" combined
#注释上面两行,添加下面这行
CustomLog "|/usr/sbin/rotatelogs /var/log/httpd/access_log%Y%m%d.log 86400 480" common
bind服务是全球范围内使用最广泛、最安全可靠且高效的域名解析(DNS)服务程序。
/etc/named.conf
:有效的参数用来定义bind服务程序的运行/etc/named.rfc1912.zones
:用来保存域名和IP地址对应关系的所在文件路径,当需要查看和修改时,可根据这个位置找到相关文件。在这个文件中并没有包含具体的域名、IP地址对应关系等信息。/var/named
:该目录用来保存域名和IP地址真实对应关系的数据配置文件。vi /etc/named.conf
在配置文件中添加如下代码
options {
directory "/var/named";
version "[no about your business]";
};
vi /etc/named.conf
在配置文件中添加如下代码
options {
allow-recursion { none; };
};
设置默认的umask值,增强安全性。
vi /etc/profile
添加行,
umask 027
即新创建的文件属主拥有读写执行权限,同组用户拥有读和执行权限,其他用户无权限。
保障数据的安全性是继保障数据的可用性之后最为重要的一项工作。防火墙作为公网与内网之间的保护屏障,在保障数据的安全性方面起着至关重要的作用。旧版本Linux操作系统防火墙命令用iptables,RHEL 7/8 中新增的firewalld命令。
iptables 服务把用于处理或过滤流量的策略条目称之为规则,多条规则可以组成一个规则链,而规则链则依据数据包处理位置的不同进行分类:
处理匹配流量动作:
注意:
iptables中常用的参数以及作用:
参数 | 作用 |
---|---|
-P | 设置默认策略 |
-F | 清空规则链 |
-L | 查看规则链 |
-A | 在规则链的末尾加入新规则 |
-I num | 在规则链的头部加入新规则 |
-D num | 删除某一条规则 |
-s | 匹配来源地址 IP/MASK,加叹号“!”表示除这个 IP 外 |
-d | 匹配目标地址 |
-i 网卡名称 | 匹配从这块网卡流入的数据 |
-o 网卡名称 | 匹配从这块网卡流出的数据 |
-p | 匹配协议,如 TCP、UDP、ICMP |
- -dport num | 匹配目标端口号 |
- -sport num | 匹配来源端口号 |
iptables -A INPUT -p tcp --dport 23 -j DROP
iptables -A INPUT -p udp --dport 23 -j DROP
直接丢弃 icmp 的请求包
iptables -A INPUT -p icmp --icmp-type echo-request -j DROP
iptables -A INPUT -s 172.16.1.1 -p 3306 -j DROP
iptables –A INPUT –p tcp –dport 22 –s 172.16.10.0/24 –j ACCEPT
iptables –A INPUT –p tcp –dport 22 -j DROP
iptables -A FORWARD -f -m limit --limit 1000/s --limit-burst 1000 -j ACCEPT
iptables -A FORWARD -p ! icmp -j ACCEPT
iptables -A INPUT -m limit --limit 3/minute --limit-burst 6 -j ACCEPT
iptables -A FORWARD -s 172.16.0.0/24 -p udp --dport 53 -j ACCEPT
iptables -A FORWARD -d 172.16.0.0/24 -p udp --sport 53 -j ACCEPT
iptables -A FORWARD -m mac --mac-source 29:0E:29:27:65:EF -j DROP
直接丢弃流出icpm数据包
iptables -A OUTPUT -p icmp --icmp-type echo-request -j DROP
iptables -A INPUT -p tcp --dport 21 -s 192.168.1.0/24 -m time --weekdays 1,2,3,4,5 --timestart 08:30 --timestop 18:00 -j ACCEPT
iptables -A INPUT -p tcp -m multiport --dport 21,1250:1280 -j ACCEPT
iptables -A FORWARD -p tcp -m iprange --src-range 192.168.1.20-192.168.1.99 -j DROP
iptables -A INPUT -p tcp --tcp-flags ALL ALL -j DROP
iptables -A OUTPUT -p tcp --tcp-flags ALL NONE -j DROP
iptables -I INPUT -s 172.16.1.0/24 -j DROP
iptables -I FORWARD -s 172.16.1.0/24 -j DROP
at now +2 hours
at> iptables -D INPUT 1
at> iptables -D FORWARD 1
iptables -A INPUT -s 172.16.0.0/16 -d 192.168.1.111 -p tcp --dport 21 -m time --timestart 8:30 --timestop 18:00 --weekdays 1,2,3,4,5 -m connlimit --connlimit-upto 5 -j ACCEPT
iptables -A INPUT -p tcp -m state --state NEW -j DROP
iptables -A INPUT -p tcp -m state --state ESTABLSHED,RELATED -j ACCEPT
Mysql基础命令
1.root用户登录
mysql -u root -p
2.查看所有数据库
show databases;
3.使用某个数据库
use 数据库名;
4.查看表(前提是先进入某个数据库)
show tables;
5.查看表结构
describe 表名;
6.删除某个数据库
drop database 数据库名;
7.新建Mysql用户
create user '用户名'@'localhost' identified by '密码';
8.查看Mysql用户表
select user,host from mysql.user;
9.删除Mysql用户
drop user '用户名'@'localhost';
10.刷新权限(例如你改了某个用户密码或者设置某些权限可以刷新)
flush privileges;
11.查找某表中的所有记录(表在数据库库中)
select * from 表名;
12.创建数据库(数据库不存在则创建)
create database if not exists 数据库名称;
在 /etc/my.cnf
配置文件中进行设置
vi /etc/my.cnf
[mysql.server]
user=mysql
drop database test
update user set user="SuperRoot" where user="root";
update user set password=md5(password) where user="user1";
Nginx (engine x) 是一个高性能的HTTP和反向代理web服务器,同时也提供了IMAP/POP3/SMTP服务。
/etc/nginx/nginx.conf
安装后默认配置文件的路径
/usr/share/nginx/html
nginx网站默认存放目录
/usr/share/nginx/html/index.html
网站默认主页路径
vi /etc/nginx/nginx.conf
添加如下代码
server tokens off;
vi /etc/nginx/conf.d/default.conf
添加如下代码
server {
if ($request_method !~ ^(GET|HEAD|POST)$){
return 501;
}
}
vi /etc/nginx/nginx.conf
添加如下代码
client_body_timeout 10;
vi /etc/nginx/nginx.conf
添加如下代码
client_header_timeout 10;
vi /etc/nginx/nginx.conf
添加如下代码
user www www;