目錄和文件
ls -l 查看目錄和文件的權限的設置情況
加固方法
對于重要目錄,建議執行如下類似操作
Chmod -R 750 /etc/rc.d/init.d/*
這樣只有root可以讀寫和執行這個目錄下的腳本
新建了一個用戶Q
寫入了一些信息
發現在root用戶下可以進行文件打開
接下來用普通用戶進行登錄
發現沒有權限進行查看
設置默認的umask值,增強安全性
umask 是 Linux 系統中用于控制 新建文件 / 目錄默認權限 的掩碼。系統創建文件 / 目錄時,會基于默認權限(文件默認 666,目錄默認 777)減去 umask 值,生成最終權限。例如 umask 027,表示從默認權限中扣除對應權限,確保新建文件 / 目錄的權限更安全。
使用命令“/vi/etc/profile” 修改配置文件,添加行“umask 027”,及新創建的文件屬主讀寫執行權限,同組用戶讀寫和執行權限,其他用戶無權限,使用”umask 027”
應用設置
vi /etc/profile? # 打開文件?
進入編輯模式(按 i 鍵),在文件末尾添加:?
umask 027?
保存退出(按 Esc 鍵,輸入 :wq 回車)?
source /etc/profile? # 立即生效配置
普通用戶進入修改文件,報錯此用戶沒有讀寫權限,增強了安全性
Bash歷史命令
Bash歷史命令
可以設置保留歷史命令的條數
使用命令 “cat/etc/profile | group HISTSIZE ” 和“cat /etc/profile | grep HISTFILESIZE=”查看保留歷史命令的條數
使用命令“vi/etc/profile”修改配置文件,修改HISTSIZE=5和HISTFLESIZE=5
既保留最新執行的5條命令
通過查看發現有1000條歷史命令,嚴重影響系統安全
進行配置文件編輯
發現已經成功改變了配置文件信息
退出,先按esc?? :wq!? 再按enter
退出,先按esc?? :wq!? 再按enter
登陸超時,設置系統登陸后,連接超時時間增強安全性
使用命令?? cat /etc/profile | grep TWOUT 查看TMOUT是否被設置
加固方法:使用命令“vi/etc/profile”修改配置文件,添加“TMOUT”行開頭的注釋,設置為“TMOUT=180”,及超時時間為三分鐘
發現沒有輸出,我們進行配置
配置完成,要在最后一行添加,不然會被覆蓋
G跳轉到最后一行?? i 進入編輯模式? Esc退出編輯模式,輸入1:wq!保存并退出
配置文件生效
source /etc/profile
root路徑
檢查系統root用戶環境變量path是否包含”.”
檢查方法:以root用戶環境變量path中不應該包含當前目錄
以root身份執行如下操作
#echo $PATH
/usr/local/sbin:/bin:/usr/sbin:/usr/bin:/root/bin:.
加固方法:
使用命令“vi/etc/profile” 修改echo $PATH后面的路徑
但是我發現我的本來就不包含當前目錄,所以不用修改
運行配置文件
運行配置文件
Source /etc/profile
驗證修改結果:
Echo $PATH
看一看結果中是否包括當前目錄“.”
賬戶安全
禁用無用賬號:減少安全風險
檢查方法:使用/etc/passwd 查看口令文件,與系統管理員確認不必要的賬戶
FTP等服務的賬號,如果不需要登陸下系統,shell應該/sbin/nologin?
加固方法:使用命令“passwd -l <用戶名>” 鎖定不必要的賬號
發現已經成功鎖定了Q用戶禁止登錄
擴展
在 Linux 系統中,用戶信息存儲在?/etc/passwd?文件中,每行記錄對應一個用戶,其中最后一個字段是用戶登錄時使用的 Shell 程序。
?
- /sbin/nologin?的作用:
它是一個特殊的 “偽 Shell”,當用戶的 Shell 設置為?/sbin/nologin?時,該用戶無法通過終端交互式登錄系統(如 SSH 登錄、本地控制臺登錄等)。系統會提示 “This account is currently not available”,拒絕登錄請求。- 應用場景:
對于 FTP 服務賬號、僅用于運行服務的賬號(如某些程序運行的用戶),這些賬號不需要登錄系統執行命令,只需保留服務功能。將它們的 Shell 設置為?/sbin/nologin,既能保證服務正常運行,又能禁止用戶通過這些賬號登錄系統,降低安全風險。- 安全意義:避免無用賬號被攻擊者利用進行登錄操作,減少系統暴露面,提升安全性。例如,若攻擊者破解了一個設置為?/sbin/nologin?的賬號密碼,也無法通過該賬號登錄系統執行惡意命令。
查看指定用戶的默認登錄 Shell
通過/etc/passwd文件查看:系統用戶信息存儲在/etc/passwd文件中,每行對應一個用戶的信息,每行最后一個字段就是該用戶的默認登錄 Shell。比如查看root用戶的 Shell,在終端執行命令cat /etc/passwd | grep ^root?,其中^表示匹配行首,命令執行結果中最后一個:號后的內容,即為root用戶的登錄 Shell 類型 ,常見的如/bin/bash?。如果想查看其他用戶,將root替換為對應的用戶名即可
- 通過echo $SHELL查看當前用戶默認登錄 Shell:在終端輸入echo $SHELL命令,會返回當前正在使用終端的用戶的默認登錄 Shell。例如返回/bin/bash,則表示默認登錄 Shell 是 Bash。
查看當前正在運行的 Shell
- 使用echo $0命令:在終端中輸入echo $0,會輸出當前正在運行的 Shell 名稱。比如顯示bash,就表示當前運行的是 Bash Shell。
- 使用ps -p $$命令:$$代表當前 Shell 的進程號,該命令會返回當前 Shell 的詳細信息,其中包括正在運行的 Shell 類型。執行命令后,在輸出結果中找到CMD列,對應的值就是正在運行的 Shell。
創建ftp賬號
擴展知識
以下以 Linux 系統中常見的 vsftpd 軟件為例,介紹創建 ftp 服務賬號且該賬號不需要登錄系統(shell 為 /sbin/nologin )的教程:
1. 安裝 vsftpd
打開終端,使用包管理工具安裝 vsftpd。以 CentOS、RHEL 系統為例,執行命令:
bash
sudo yum -y install vsftpd
對于 Debian、Ubuntu 系統,則執行:
bash
sudo apt-get -y install vsftpd
發現沒有進行激活
發現安裝成功
2. 創建本地映射用戶(非虛擬用戶方式)
使用useradd命令創建一個系統用戶,該用戶將作為 FTP 用戶的映射用戶,且設置其 shell 為?/sbin/nologin,使其無法登錄系統。假設創建用戶名為ftpuser,命令如下:
bash
sudo useradd -d /var/ftp/pub -s /sbin/nologin ftpuser
其中-d參數指定用戶的家目錄為/var/ftp/pub,你可以根據實際需求修改。
3. 設置用戶密碼
執行以下命令為新創建的用戶設置密碼:
sudo passwd ftpuser
按照提示輸入并確認密碼。
4. 配置 vsftpd
打開 vsftpd 的配置文件vsftpd.conf,一般路徑為/etc/vsftpd/vsftpd.conf:
sudo vi /etc/vsftpd/vsftpd.conf
根據需求修改以下一些關鍵配置項:
?
- 禁止匿名登錄:確保anonymous_enable=NO?,防止匿名用戶訪問 FTP 服務器。
- 允許本地用戶登錄:確保local_enable=YES?。
- 啟用寫入權限:若需要讓用戶有上傳文件的權限,設置write_enable=YES?。
- 鎖定用戶主目錄:為了安全,建議設置chroot_local_user=YES?,將用戶限制在其主目
- 錄中,防止訪問其他系統目錄。
- 重裝vim
修改完成后,保存并退出編輯器。
5. 檢查并添加 shell 到合法列表(可選但建議)
vsftpd 默認會檢查用戶的 shell 是否在/etc/shells文件中列出 ,如果不在可能導致用戶無法登錄 FTP。因此,需要檢查并添加/sbin/nologin到該文件中。
使用以下命令查看當前/etc/shells文件內容:bash
cat /etc/shells
如果其中沒有/sbin/nologin這一行,則使用編輯器添加:
bash
sudo vi /etc/shells
在文件末尾添加/sbin/nologin?,保存并退出。
6. 重啟 vsftpd 服務
使配置生效,執行命令:
對于 CentOS、RHEL、Fedora 等系統:bash
sudo systemctl restart vsftpd
對于 Debian、Ubuntu 系統:
bash
sudo service vsftpd restart
7. 測試
使用 FTP 客戶端軟件,如 FileZilla、CuteFTP 等,輸入 FTP 服務器的地址、創建的用戶名和密碼進行連接測試,驗證是否能夠正常訪問 FTP 服務器。
分享
賬號策略
操作目的:防止口令暴力破解,降低風險
檢查方法:使用命令“cat/etc/pam.d/ system-auth”查看配置文件
加固方法:
設置連續輸錯10次密碼,賬號鎖定5分鐘
使用命令“vi /etc/pam.d/ system-auth”修改配置文件,添加 auth required pam_tally.so onerr=fail deny=10 unlock_time=300
檢查特殊賬號
操作目的:
查看空口令和root權限的賬號
檢查方法;
使用命令:“awk -F:’($2==””)’/etc/shadow” 查看空口令賬號
使用命令:“awk -F:’($3==0)’/etc/passwd”查看UID為零的賬號
加固方法:
使用命令“passwd<用戶名>“為空命令賬號設置密碼
UID為零的賬號應該只有root,設置UID方法:
usermod -u UID<用戶名>
口令周期策略
操作目的:
加強口令的復雜度,降低被猜解的可能性
檢查方法:
使用命令:“cat /etc/login.defs| grep PASS“和 ”cat /etc/pam.d/system-auth“查看密碼策略設置
加固方法:
使用命令“vi /etc/login.defs“修改配置文件
PASS_MAX_DAYS 90 #新建用戶的密碼最長使用天數
PASS_MAX_DAYS 0 #新建用戶的密碼最短使用天數
PASS_WARN_AGE 7 #新建用戶的密碼到期提前提醒天數
使用change命令修改用戶設置,例如:
Chage -m 0 -M 30 -E 2000-01-01 -W 7<用戶名>
表示:將此用戶的密碼最長使用天數設為30,最短使用天數設為0,賬號2000年1月1日過期,過期前7天警告用戶。
口令復雜策略
操作目的:加強口令的復雜度等,降低被猜解的可能性
檢查方法;使用命令“cat/etc/pam.d/system-auth | grep pam_cracklib.so”
查看密碼復雜度策略設置
沒有發現密碼策略配置
加固方法:建議在/etc/pam.d/system-auth文件中配置:
適用于普通用戶
Passwd requisite pam_cracklib.so ?retry=5 difok=3 minlen=8 ucredit=-1 lcredit=-1 dcredit=-1
這一句適用于普通用戶和root用戶
password requisite pam_cracklib.so retry=5 difok=3 minlen=8 ucredit=-1 lcredit=-1 dcredit=-1 enforce_for_root
至少八位,包含一位大寫字母,一位小寫字母和一位數字
進來是這個界面,點擊i進行輸入
按esc, “:wq!”進行退出編輯模式,并保存
進行驗證,發現進行了提示,密碼策略小于8位
限制root遠程登陸
操作目的:限制root遠程telent登錄
檢查方法:
使用命令“cat/etc/securetty | grep CONSOLE” 查看是否禁止root遠程登陸
加固方法:
Vi編輯/etc/securetty 文件,配置:CONSOLE=/dev/tty01
直接點擊G進入最后一行,
Esc?? :wq!
擴展知識:
使用xshell進行遠程連接kali教程
sudo -i 進入(root)管理員模式
Xshell下載鏈接
Xshell安裝教程
發現已經成功連接
發現正常的linux命令都能使用
重新連接,發現失敗????????
限制用戶? su
操作目的:檢查是否使用pam 認證模塊禁止wheel組之外的用戶為root
檢查方法:
使用命令:“cat /etc/pam.d/su | grep pam_wheel.so”查看配置文件,確認是否有相關的限制
????????
加固方法
編輯su 配置文件,vi 打開/etc/pam.d/su 文件,添加或者修改以下配置
Auth required pam_wheel.so use_uid:強制要求執行su 操作的用戶屬于wheel組,use_uid表示通過用戶id,驗證組成員身份。這一句話前面沒有注釋符號,說明系統已經強制要求執行su 操作用戶必須屬于wheel組。
若文件存在其他與pam_wheel.so相關的注釋行(#auth sufficient pam_wheel.so trust use_uid),可取消注釋·并調整為上述規范配置
- 將用戶加入wheel組
對允許使用su 切換為root的用戶,執行命令usermod -G wheel用戶名(例如:usermod -G wheel? user1),將其加入wheel組,使其獲得su至root的權限
通過以上配置,非wheel組,使其獲得su 至root的權限。
發現B用戶已經可以進行su 命令的使用了????????
檢查Grub/Lilo密碼
操作目的:
查看系統引導管理器是否設置密碼
檢查方法
使用命令:“cat /etc/grub.conf | grep password”查看grub是否設置密碼
使用命令:“cat /etc/lilo.conf | grep password”查看lilo是否設置密碼
加固方法
Vi編輯 /etc/grub.conf
Splashimage 這個參數下一行添加:password密碼
如果需要md5加密,可以添加一行:password? --md5? 密碼
Vi編輯/etc/lilo.conf
Password=密碼
發現上述的方法已經不適用于新版kali
所以又找了一個方法
檢查GBUB2是否設置密碼
Sudo grep -i ‘password_pbkdf2’ /boot/grub/grub.cfg
在 GRUB2 中,password_pbkdf2?用于標識通過 PBKDF2 算法加密的啟動密碼配置。
這條命令通過搜索 GRUB2 配置文件中是否存在?password_pbkdf2?相關內容,判斷系統是否為 GRUB2 設置了加密啟動密碼。若有對應輸出,說明已設置;若無輸出,則表示未配置密碼。
設置GBUB2密碼(正確加固方法)
- 生成加密密碼:
執行命令生成PBKDF2加密密碼,按提示輸入密碼,添加或修改以下內容(將加密字符串替換為實際生成的內容)GRUB_ENABLE_CRYPTODISK=y
GBUB_PASSWORD=”grub.pbkdf2.sha512.? ………”#填入生成的加密字符串
Snmp團體字
操作目的:
如果打開了snmp協議,snmp團體字設置不能使用默認的團體字
檢查方法:
查看配置文件 cat /etc/snmp/snmpd.conf
加固方法:
Vi編輯 /etc/snmp/snmpd.cof 文件????????
應禁止使用public.private 默認團體字,使用用戶自定義的團體字,例如將以下設置中的public替換為用戶自定義的團體字:com2sec notConfig notConfigUser default public
編輯文件:
bash
sudo vi
?/etc/snmp/snmpd.conf?
2. 添加配置:
在文件中添加:
Conf
com2sec notConfigUser default YourCustomCommunity? # 將 YourCustomCommunity 替換為自定義強團體字(如包含大小寫字母、數字、符號)
access notConfigGroup "" any noauth exact all none none?
3. 保存退出:按 Esc,輸入 :wq 保存并退出。
4. 重啟服務:bash

sudo
?systemctl restart snmpd?
弱口令審計
檢查方法:
john /etc/shadow –single
john /etc/shadow –wordlist=pass.dic
加固方法:
使用“passwd 用戶名” 命令為用戶設置復雜密碼
若顯示!! *表示密碼未設置,或者密碼已經鎖定,無有效哈希可破解
服務進程
Linux系統的服務進程
系統守護進程(服務)
服務就是運行在網絡服務器上監聽用戶請求的進程
服務就是通過端口號來區分的
常見的服務及其對應端口號
ftp:21
ssh:22
telnet:23
smtp:25
ssl:443
http(www):80
pop3:110
系統守護進程(服務)
在unix/linux系統中,服務是一般通過inted進程或者啟動腳本來啟動。
通過inted來啟動的服務可以通過在/etc/inted.conf文件進行注釋來禁用。
通過啟動腳本啟動的服務可以通過改變腳本名稱的方式禁用。
查看linux進程的命令
檢查ssh服務
操作目的:對ssh服務進行安全檢查
檢查方法:
使用命令“cat /etc/ssh/sshd_config”查看配置文件
加固方法:
使用命令“vi /etc/ssh/sshd_config”編輯配置文件
- 不允許root直接登錄?? 設置“PermitRootLogin”的值為no
無法通過ssh進行遠程登陸
修改SSH使用的協議版本?? 設置“Protocol”? 的版本為2,如果沒有這一行,直接添加這一行。
- 修改允許密碼錯誤次數(默認6次)設置“MaxAuthTries” 值為3
???
Tcp Wrapper
操作目的:
使用tcp? wrapper 對? libwrap庫支持的程序做訪問控制
檢查方法:
使用命令“vi /etc/hosts.allow” 和 “cat /etc/hosts.deny” 查看配置
加固方法:
使用命令“vi /etc/hosts.allow”?? 和”vi /etc/hosts.deny”? 修改配置
- 若允許 Windows 主機訪問 Linux 虛擬機的 SSH:
- 查看 Windows 主機 IP:按?Win + R,輸入?cmd?打開命令提示符,執行?ipconfig,找到?IPv4 地址(如?192.168.1.100)。
- 在 Linux 虛擬機的?hosts.allow?中填寫:sshd:Windows主機的IPv4地址(例如?sshd:192.168.1.100),表示僅允許該 Windows 主機 IP 訪問 Linux 的 SSH 服務。
- 若允許其他設備訪問:
- 同理,獲取對應設備的 IP(如另一臺 Linux 服務器、手機等),填寫到?hosts.allow?中。
最終目的是:填寫 “希望被允許連接到 Linux 虛擬機 SSH 服務的設備 IP”,而非固定填主機或虛擬機 IP,需根據實際訪問需求決定。
Vi /etc/hosts.allow
按i 進入編輯模式
加入: sshd:IP地址
Vi /etc/hosts.deny
按I 進入編輯模式
Sshd:ALL
(該配置為僅允許特定ip地址訪問ssh)
NFS共享
操作目的:
查看NFS共享
檢查方法:
使用命令“exportfs” 查看NFS輸出的共享文件
加固方法:
使用命令:“vi /etc/exports”編輯配置文件,刪除不必要的共享
如果發現配置文件里面沒有命令,說明你沒有配置過共享
如果有的話,進行刪除,并用下面的兩條命令進行執行
systemctl restart nfs-server?
systemctl restart nfs-kernel-server?
syslogd認證相關記錄
操作目的:
查看所有日志記錄
檢查方法:
#cat /etc/rsyslog.conf | grep authpriv
查看是否有 authpriv.* /var/log/secure
加固方法:
添加相關日志的記錄:
將authpirv 設備的任何級別的信息記錄到 /var/log/secure發現本來就在這個路徑當中,所以不用進行修改
Syslogd 日志設置
操作目的:
查看所有日志記錄
檢查方法:
使用命令:”cat /etc/rsyslog.conf”? 查看rsyslogd
系統日志(默認)? /var/log/messages
Cron日志(默認)? /var/log/cron
安全日志(默認)? /var/log/secure
加固方法:
添加相關日志的記錄
- local1:屬于為本地使用預留的日志設施(local0 - local7 )之一,沒有固定的日志記錄類型限制 ,可由用戶自定義用于記錄特定應用程序或服務產生的日志。例如,可以將自定義腳本的運行日志、一些特定業務系統的日志通過配置使用 local1 來記錄,方便區分和管理。
- auth:主要記錄與安全和認證相關的消息,比如用戶登錄、注銷信息,身份驗證成功或失敗的記錄等。像用戶通過 SSH 登錄系統、使用 sudo 命令提權等操作產生的相關認證信息,通常會由 auth 設施來記錄 。不過,對于一些更私密的安全認證信息,會使用 authpriv 設施記錄。
限制ctrl+alt+del命令
- 操作目的:
防止誤使用ctrl+alt+del重啟命令
檢查方法
使用命令“cat /etc/inittab | grep ctrlaltdel”? 查看輸入行是否被注釋
加固方法:
先使用命令“vi /etc/inittab”? 編輯配置文件,在行開頭添加注釋符號“#”,
#ca::ctrlaltdel:/sbin/shutdown -t3 -r now,在使用命令“init q” 應用設置
新舊系統判斷
從系統初始化機制來看,當前填寫方式需結合系統類型判斷:
?
- 若系統使用?systemd(多數新 Linux 發行版,如 CentOS 7+、Ubuntu 16.04+):
/etc/inittab?已不再生效(圖中文件開頭也提示?inittab is no longer used when using systemd),此時即使注釋?#ca::ctrlaltdel:/sbin/shutdown -t3 -r now,也無法限制?Ctrl+Alt+Del。需通過?systemd?機制處理,例如:bash
systemctl mask ctrl-alt-del.target? # 屏蔽 Ctrl+Alt+Del 對應的系統目標?
- 若系統仍使用傳統初始化(極老舊系統):
在?/etc/inittab?中注釋?ca::ctrlaltdel:/sbin/shutdown -t3 -r now?行是正確的,注釋后?Ctrl+Alt+Del?的重啟功能會被禁用,后續執行?init q?刷新配置即可生效。因此,需先確認系統初始化類型:新系統需用?systemd?方案,老舊系統此填寫有效
查看發現是屬于新版本的
這個是新版本的教程
- 屏蔽?Ctrl+Alt+Del?對應的系統目標:
bash
systemctl mask ctrl-alt-del.target?
執行此命令后,Ctrl+Alt+Del?的重啟功能會被禁用。
- 驗證狀態(可選):
bash
systemctl status ctrl-alt-del.target?
若顯示?masked,則表示屏蔽成功。
此方法適配?systemd?初始化機制,是 CentOS 7 等新系統限制?Ctrl+Alt+Del?的正確操作。
發現虛擬機已經禁止了這個命令,執行成功。
服務進程安全
關閉不必要的服務
- 使用服務:“who -r”? 查看當前init級別
- 使用命令“chkconfig --list”查看所有服務的狀態
- 使用命令“chkconfig -level? <init級別> <服務名> on | off | reset”設置服務在個init 級別下開機是否啟動
禁止?httpd?服務在運行級別 3、5 開機啟動:
chkconfig --level 35 httpd off?
設置?sshd?服務在運行級別 2、3、4、5 開機啟動:
chkconfig --level 2345 sshd on?
恢復?network?服務默認啟動設置:
chkconfig --level 3 network reset
完結撒花