22個(gè)必須學(xué)習(xí)的Linux安全命令
Linux系統(tǒng)的安全性涉及很多方面,從設(shè)置帳戶到確保用戶合法,限制比完成工作所需的更多權(quán)限。這里是關(guān)于Linux系統(tǒng)日常工作的一些最基本的安全命令。
sudo
使用sudo運(yùn)行特權(quán)命令,而不是將用戶切換到root,是一個(gè)必不可少的良好實(shí)踐,因?yàn)樗兄诖_保在需要時(shí)僅使用root權(quán)限并限制錯(cuò)誤的影響。對sudo命令的訪問權(quán)限取決于/etc/sudoers和/etc/group文件中的設(shè)置。
- $ sudo adduser shark
- Adding user `shark' ...
- Adding new group `shark' (1007) ...
- Adding new user `shark' (1007) with group `shark' ...
- Creating home directory `/home/shark' ...
- Copying files from `/etc/skel' ...
- Enter new UNIX password:
- Retype new UNIX password:
- passwd: password updated successfully
- Changing the user information for shark
- Enter the new value, or press ENTER for the default
- Full Name []: shark
- Room Number []:
- Work Phone []:
- Home Phone []:
- Other []:
- Is the information correct? [Y/n] Y
例如,如果運(yùn)行sudo并詢問你是誰,將確認(rèn)以root身份運(yùn)行該命令。
- $ sudo whoami
- root
如果為用戶管理sudo設(shè)置,還需要熟悉visudo命令。
visudo
visudo命令允許通過在文本編輯器中打開文件并檢查更改的語法來更改//etc/sudoers文件。 使用“sudo visudo”運(yùn)行命令,并確保理解語法。權(quán)限可以由用戶或組分配。在大多數(shù)Linux系統(tǒng)上,/etc/sudoers文件已經(jīng)配置了如下所示的組,這些組允許將權(quán)限分配給/etc/group文件中設(shè)置的組。在這些情況下,根本不需要使用visudo命令,只需熟悉以這種方式賦予root權(quán)限的組,并對/etc/group文件進(jìn)行更新。
- %admin ALL=(ALL) ALL
- %sudo ALL=(ALL:ALL) ALL
- %wheel ALL=(ALL:ALL) ALL
請注意,組名稱前面帶有%符號。
可以在/etc、group文件中顯示提供sudo訪問權(quán)限的組,因?yàn)樗赡苁且韵轮唬?/p>
- $ egrep "admin|sudo|wheel" /etc/group
- sudo:x:27:shs,jdoe
給予某人sudo特權(quán)的最簡單方法是將它們添加到/etc/group中的授權(quán)組。但是,這意味著它們可以以root身份運(yùn)行任何命令。如果希望某些用戶對一組有限的命令具有root權(quán)限(例如,添加和刪除帳戶),可以定義希望它們能夠通過命令別名運(yùn)行的命令,如下所示:
- Cmnd_Alias ACCT_CMDS = /usr/sbin/adduser, /usr/sbin/deluser
然后讓用戶或組使用sudo運(yùn)行這些命令,并使用以下命令之一:
- nemo ALL=(ALL) ACCT_CMDS
- %techs ALL=(ALL:ALL) ACCT_CMDS
第一行允許用戶“nemo”使用sudo運(yùn)行twp(adduser和deluser)命令,而第二行則為/etc/group文件中“tech”組中的任何人分配相同的權(quán)限。
who和w
who和w命令顯示誰登錄系統(tǒng),雖然w顯示更多信息,例如他們登錄的位置,登錄時(shí)間以及他們空閑的時(shí)間。
- $ w
- 18:03:35 up 9 days, 22:48, 2 users, load average: 0.00, 0.00, 0.00
- USER TTY FROM LOGIN@ IDLE JCPU PCPU WHAT
- joe tty2 /dev/tty2 27Apr18 9days 7:34 0.09s /usr/lib/x86_64-linux
- shs pts/1 192.168.0.15 09:50 7.00s 0.28s 0.00s w
last
last命令顯示用戶最近的登錄信息,在嘗試跟蹤更改或其他活動(dòng)時(shí)通常很有用。
- $ last nemo
- nemo pts/1 192.168.0.15 Wed May 2 07:01 - 08:29 (01:27)
- wtmp begins Tue May 1 10:21:35 2018
Nemo一段時(shí)間沒有登錄了。他可能正在度假(也許是釣魚?)或剛剛離開公司。這種信息可用于決定是否需要對此進(jìn)行跟進(jìn)。
find
find命令用于許多類型的搜索。在安全性方面,可能會發(fā)現(xiàn)自己在尋找沒有owner(沒有相應(yīng)帳戶)或者都是可寫和可執(zhí)行文件的文件。find命令很容易編寫,但需要熟悉它的許多選項(xiàng)來定義要查找的內(nèi)容。以下兩個(gè)命令中的第一個(gè)將查找當(dāng)前沒有定義所有者的文件。 第二個(gè)將找到可能任何人都可以運(yùn)行和修改的文件。
- $ sudo find /home -nouser
- $ sudo find / -perm -o=wx
請記住,第二個(gè)命令中的-o引用“其他”組,不是所有者,不是與文件關(guān)聯(lián)的組。
file
file命令查看文件并根據(jù)其內(nèi)容而不是其名稱確定文件的類型。許多文件(如jpeg文件)在標(biāo)識它們的文件的開頭附近包含標(biāo)識符。以下示例中的“.jpg”文件顯然不是真正的jpeg文件,而是可執(zhí)行文件 ,盡管它的名稱包含jpg。
- jdoe@stinkbug:~$ ls -ltotal 24-rw-r--r-- 1 root root 0 Apr 13 09:59 empty-rwxr-xr-x 1 jdoe jdoe 18840 May 10 17:39 myphoto.jpg-rwx------ 1 jdoe jdoe 24 May 2 07:06 trythisjdoe@stinkbug:~$ file myphoto.jpgmyphoto.jpg: ELF 64-bit LSB executable, x86-64, version 1 (SYSV), dynamically linked, interpreter /lib64/ld-linux-x86-64.so.2, for GNU/Linux 3.2.0, BuildID[sha1]=5d19f7a492405ea9b022a9aa8151f6fb4143633d, stripped
which
which命令標(biāo)識在鍵入其名稱時(shí)將運(yùn)行的可執(zhí)行文件。這并不總是你的想法。如果特洛伊木馬程序已插入文件系統(tǒng)中的某個(gè)位置,該位置顯示在合法帳戶之前的搜索路徑中,則會運(yùn)行該木馬程序。這是一個(gè)很好的理由,以確保搜索路徑包含/usr/bin之類的目錄,然后添加較少的標(biāo)準(zhǔn)位置,特別是在“.”(當(dāng)前目錄)之前。
- $ which date/usr/local/bin/date <=== probably not what we wanted
可以通過切換到用戶并回顯用戶來檢查用戶的搜索路徑:
- shs@stinkbug:~$ sudo su - nemonemo@stinkbug:~$ echo $PATH/usr/local/bin:/usr/bin:/bin:/usr/local/games:/usr/games:/snap/bin
即使用戶的搜索路徑設(shè)置在/etc/profile或/etc/bash.bashrc等系統(tǒng)文件中,它們也可能已被本地設(shè)置更改。
- $ which date/usr/local/bin/date<=== probably not what we wanted
SS
ss命令是一個(gè)用于調(diào)查套接字的工具,允許執(zhí)行顯示偵聽端口和活動(dòng)連接等操作。在不添加某些約束的情況下,ss將顯示比可能想要查看的信息更多的信息。畢竟,操作系統(tǒng)的許多部分都通過套接字進(jìn)行通信。如果要生成已建立的連接或偵聽端口列表(即外部系統(tǒng)可用的服務(wù)),這些命令將非常有用。
建立連接:
- $ ss -tState Recv-Q Send-Q Local Address:Port Peer Address:Port ESTAB 0 224 192.168.0.20:ssh 192.168.0.15:56647$ ss | grep ESTAB | grep tcptcp ESTAB 0 64 192.168.0.20:ssh 192.168.0.15:64885
監(jiān)聽端口:
- $ ss -ltnState Recv-Q Send-Q Local Address:Port Peer Address:Port LISTEN 0 128 *:22 *:*LISTEN 0 5 127.0.0.1:631 *:* LISTEN 0 50 *:445 *:*LISTEN 0 50 *:139 *:*LISTEN 0 128 *:5355 *:*LISTEN 0 128 :::22 :::*LISTEN 0 5 ::1:631 :::*LISTEN 0 50 :::445 :::*LISTEN 0 128 :::5355 :::*LISTEN 0 50 :::139 :::*
請注意,端口631(CUPS)僅偵聽環(huán)回接口(127.0.0.1)。
ufw
如果在Linux系統(tǒng)上運(yùn)行防火墻 ,這是控制系統(tǒng)訪問的重要步驟,則用于啟動(dòng)/停止,啟用/禁用,修改和顯示狀態(tài)或活動(dòng)規(guī)則的命令至關(guān)重要。以下是ufw的一些示例命令,可以在許多Ubuntu系統(tǒng)上找到的“簡單防火墻”:
- $ sudo ufw status verboseStatus: activeLogging: on (low)Default: deny (incoming), allow (outgoing), disabled (routed)New profiles: skipTo Action From-- ------ ----22 ALLOW IN 192.168.0.0/24
此防火墻處于活動(dòng)狀態(tài),僅允許來自本地網(wǎng)絡(luò)的連接進(jìn)行ssh。
以下命令將1)設(shè)置上面顯示的規(guī)則和2)禁用防火墻。
- $ sudo ufw allow from 192.168.0.0/24 to any port 22$ sudo ufw disable
iptables
了解如何列出iptables的防火墻規(guī)則也很重要。 這些命令將提供netfilter規(guī)則的完整列表:
- sudo iptables -vL -t filtersudo iptables -vL -t natsudo iptables -vL -t manglesudo iptables -vL -t rawsudo iptables -vL -t security
ip
ip命令允許顯示網(wǎng)絡(luò)接口上的信息。 在下面的示例中,我們看到了環(huán)回和公共接口。
- $ ip a1: lo: <LOOPBACK,UP,LOWER_UP> mtu 65536 qdisc noqueue state UNKNOWN group default qlen 1000 link/loopback 00:00:00:00:00:00 brd 00:00:00:00:00:00 inet 127.0.0.1/8 scope host lo valid_lft forever preferred_lft forever inet6 ::1/128 scope host valid_lft forever preferred_lft forever2: enp0s25: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc pfifo_fast state UP group default qlen 1000 link/ether 00:1e:4f:c8:43:fc brd ff:ff:ff:ff:ff:ff inet 192.168.0.20/24 brd 192.168.0.255 scope global dynamic enp0s25 valid_lft 59794sec preferred_lft 59794sec inet6 fe80::f233:4f72:4556:14c2/64 scope link valid_lft forever preferred_lft forever
ip route
ip route命令將顯示路由表:
- $ ip routedefault via 192.168.0.1 dev enp0s25 proto static metric 100169.254.0.0/16 dev enp0s25 scope link metric 1000192.168.0.0/24 dev enp0s25 proto kernel scope link src 192.168.0.20 metric 100
kill,pkill和killall
正如在“有多種方法可以殺死Unix進(jìn)程”中所看到的,Unix和Linux系統(tǒng)提供了一個(gè)方便的命令選擇,用于終止進(jìn)程,無論希望它們死亡的原因??梢园催M(jìn)程ID或名稱終止??梢砸淮螁为?dú)或一組進(jìn)程。在任何情況下,都可以使用各種kill命令,并且應(yīng)該準(zhǔn)備好根據(jù)需要使用它們。 例子包括:
- $ kill 1234$ pkill bad$ killall badproc
passwd
雖然passwd命令在系統(tǒng)安全性方面可能是一個(gè)明顯的命令,但它也不應(yīng)該從任何安全性要點(diǎn)列表中省略。擁有合理的密碼更改策略,尤其是在用戶來去或更改角色時(shí),這一點(diǎn)非常重要。
但是,passwd命令不僅用于更改密碼。還可以將其與sudo權(quán)限一起使用,以更改其他用戶的密碼,鎖定/解鎖或過期帳戶,檢查帳戶狀態(tài)以及更改確定密碼何時(shí)到期或設(shè)置時(shí)間密碼警告的設(shè)置。
查看手冊頁(man passwd)了解詳細(xì)信息并使用以下命令:
- $ sudo passwd nemo<== change nemo's password$ sudo passwd -e dory <== expire dory's password (forces her to reset it)$ sudo passwd -i shark <== disable shark's account
pwck
pwck命令對/etc/passwd和/etc/shadow文件進(jìn)行完整性檢查,確保存在必需的字段,存在文件和目錄等。
- $ sudo pwckuser 'squash': directory '/home/squash' does not existuser 'squash': program '/bin/bsh' does not exist
setfacl&getfacl
不要輕易顯示rwxr-x ---類型權(quán)限,會讓你想象這就是Linux系統(tǒng)上的文件權(quán)限。使用setfacl和getfacl命令,可以授予不是文件所有者且不是關(guān)聯(lián)組(并且不希望它們)訪問文件的成員。假設(shè)希望nemo具有對文件的讀取權(quán)限,該文件概述了ufw設(shè)置說明文件,但僅此而已。 使用這樣的命令修改文件的訪問控制列表:
- $ setfacl -m u:nemo:r ufw-setup
然后getfacl命令將顯示已進(jìn)行的更改:
- $ getfacl ufw-setup# file: ufw-setup# owner: shs# group: shsuser::rwxuser:nemo:r-- <===group::rw- #effective:r--mask::r--other::---
sestatus&apparmor
sestatus和apparmor命令可以顯示SELinux和apparmor工具的狀態(tài),這些工具使用強(qiáng)制訪問控制在應(yīng)用程序之間提供隔離。如果使用這些工具中的一個(gè)或另一個(gè),應(yīng)該知道如何顯示其狀態(tài)。
sestatus
- https://www.networkworld.com/article/3272286/open-source-tools/22-essential-security-commands-for-linux.html
apparmor
- $ sudo apparmor_statusapparmor module is loaded.18 profiles are loaded.18 profiles are in enforce mode. /sbin/dhclient /usr/bin/evince /usr/bin/evince-previewer /usr/bin/evince-previewer//sanitized_helper /usr/bin/evince-thumbnailer /usr/bin/evince-thumbnailer//sanitized_helper /usr/bin/evince//sanitized_helper /usr/lib/NetworkManager/nm-dhcp-client.action /usr/lib/NetworkManager/nm-dhcp-helper /usr/lib/connman/scripts/dhclient-script /usr/lib/cups/backend/cups-pdf /usr/lib/snapd/snap-confine /usr/lib/snapd/snap-confine//mount-namespace-capture-helper /usr/sbin/cups-browsed /usr/sbin/cupsd /usr/sbin/cupsd//third_party /usr/sbin/ippusbxd /usr/sbin/tcpdump0 profiles are in complain mode.3 processes have profiles defined.3 processes are in enforce mode. /sbin/dhclient (705) /usr/sbin/cups-browsed (30173) /usr/sbin/cupsd (26828)0 processes are in complain mode.0 processes are unconfined but have a profile defined.
還應(yīng)該知道如何啟動(dòng)和停止這些工具。
- $ sudo /etc/init.d/apparmor start$ sudo /etc/init.d/apparmor stop$ sudo /etc/init.d/apparmor restart
而對于SELinux,各種模式代表什么:
- enforcing -- SELinux security policy is enforcedpermissive -- SELinux prints warnings instead of enforcingdisabled -- SELinux is fully disabled
Linux系統(tǒng)上的許多命令可以幫助管理安全性。上面的描述旨在介紹這些命令,但不解釋有關(guān)它們?nèi)绾喂ぷ骰蚩梢允褂玫乃袃?nèi)容。