如果您正在關注Linux系統的安全性,那麼這些命令是您必須知道的。
Linux系統的安全性有很多問題——從設定帳戶到確保合法使用者的許可權沒有超出工作所需。本文將介紹用於Linux系統日常工作的一些最基本的安全命令。
sudo
使用sudo執行特權命令——而不是將使用者切換到根使用者,是一種必不可少的良好實踐,因為它有助於確保只在需要時使用根特權,並限制錯誤的影響。您對sudo命令的訪問取決於/etc/sudoers和/etc/group檔案中的設定。
$ 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
例如,如果您執行sudo並詢問您是誰,您將得到以root身份執行該命令的確認。
$ sudo whoami
root
如果要為使用者管理sudo設定,還需要熟悉visudo命令。
visudo
visudo命令允許您在文字編輯器中開啟檔案並檢查語法更改,從而更改/etc/sudoers檔案。使用“sudo visudo”執行命令,並確保理解語法。特權可以由使用者或組分配。在大多數Linux系統上,/etc/sudoers檔案已經配置瞭如下所示的組,這些組允許將特權分配給在/etc/group檔案中設定的組。在這些情況下,您根本不需要使用visudo命令—只需熟悉以這種方式授予根特權的組,並更新/etc/group檔案。
%admin ALL=(ALL) ALL
%sudo ALL=(ALL:ALL) ALL
%wheel ALL=(ALL:ALL) ALL
注意組名前面有%符號。
您可以像這樣在/etc/group檔案中顯示提供sudo訪問的組,因為它可能是這些檔案之一:
$ egrep "admin|sudo|wheel" /etc/group
sudo:x:27:shs,jdoe
給某人sudo特權最簡單的方法是將他們新增到/etc/group.中的授權組中但是,這意味著它們可以作為根使用者執行任何命令。如果你想讓一些使用者對有限的命令集擁有根許可權(例如,新增和刪除帳戶),你可以定義你想讓他們能夠透過命令別名執行的命令:
Cmnd_Alias ACCT_CMDS = /usr/sbin/adduser, /usr/sbin/deluser
然後讓使用者或組能夠執行這些命令使用sudo命令與這些命令之一:
nemo ALL=(ALL) ACCT_CMDS
%techs ALL=(ALL:ALL) ACCT_CMDS
第一行允許使用者“nemo”使用sudo執行twp (adduser和deluser)命令,而第二行將相同的特權分配給/etc/group檔案中“tech”組中的任何人。
who和w
who和w命令將向您顯示誰已經登入到系統中,但是w將顯示更多資訊,例如登入位置、登入時間和空閒時間。
$ 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
如果不喜歡執行visudo命令時呼叫的預設編輯器,請使用“sudo update-alternatives - config editor”命令。它將提供許多編輯器作為選項並更改您的設定。
last
last命令顯示了使用者最近的登入資訊,當您試圖跟蹤更改或其他活動時,它通常非常有用。
$ 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
尼莫有一段時間沒有登入了。他可能在度假(也許是釣魚?)或者剛剛離開公司。這類資訊可以幫助您決定是否需要對此進行後續工作。
find
find命令用於許多型別的搜尋。當涉及到安全性時,您可能會發現自己在尋找沒有所有者(沒有對應的帳戶)或既可寫又可執行的檔案。Find命令很容易組合,但是需要熟悉它的許多選項,以便定義您要查詢的內容。這兩個命令中的第一個將找到當前沒有定義所有者的檔案。第二種方法是找到任何人都可以執行和修改的檔案。
$ sudo find /home -nouser
$ sudo find / -perm -o=wx
請記住,第二個命令中的-o指的是“其他”組——不是所有者,也不是與檔案關聯的組。
file
file命令檢視一個檔案,並根據其內容(而不是名稱)確定檔案的型別。許多檔案(如jpeg檔案)在標識它們的檔案的開頭附近包含識別符號。下面示例中的“.jpg”檔案顯然不是真正的jpeg檔案,而是可執行檔案——儘管它的名稱不同。
jdoe@stinkbug:~$ ls -l
total 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 trythis
jdoe@stinkbug:~$ file myphoto.jpg
myphoto.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命令標識將在鍵入其名稱時執行的可執行檔案。這並不總是你想的那樣。如果一個木馬病毒已經被插入到檔案系統的一個位置,顯示在你的搜尋路徑之前,合法的,它將執行。這是一個很好的理由,以確保您的搜尋路徑包括目錄,如/usr/bin之前,它新增較少的標準位置,特別是之前”。(當前目錄)。
$ which date
/usr/local/bin/date <=== probably not what we wanted
你可以檢查使用者的搜尋路徑,切換到使用者和呼應:
shs@stinkbug:~$ sudo su - nemo
nemo@stinkbug:~$ echo $PATH
/usr/local/bin:/usr/bin:/bin:/usr/local/games:/usr/games:/snap/bin
即使使用者的搜尋路徑是在/etc/profile或/etc/bash這樣的系統檔案中設定的bashrc,它們可能已經被本地設定更改。
$ which date
/usr/local/bin/date <=== probably not what we wanted
你可以檢查使用者的搜尋路徑,切換到使用者和呼應:
shs@stinkbug:~$ sudo su - nemo
nemo@stinkbug:~$ echo $PATH
/usr/local/bin:/usr/bin:/bin:/usr/local/games:/usr/games:/snap/bin
即使使用者的搜尋路徑是在/etc/profile或/etc/bash這樣的系統檔案中設定的bashrc,它們可能已經被本地設定更改。
ss
ss命令是研究套接字的工具,允許您執行諸如顯示監聽埠和活動連線之類的操作。在不新增一些約束的情況下,ss將顯示比您希望看到的更多的資訊。畢竟,作業系統的許多部分都是透過套接字進行通訊的。如果您希望生成已建立連線或監聽埠的列表(即這樣的命令將被證明非常有用)。
建立連線:
$ ss -t
State 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 tcp
tcp ESTAB 0 64 192.168.0.20:ssh 192.168.0.15:64885
監聽埠
:
$ ss -ltn
State 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)只監聽環回介面(127.0.0.1)。
ufw
如果您在Linux系統上執行防火牆——這是控制對系統訪問的重要步驟,用於啟動/停止、啟用/禁用、修改和顯示狀態或活動規則的命令非常關鍵。下面是ufw的一些示例命令——你會在許多Ubuntu系統上找到的“簡單防火牆”:
$ sudo ufw status verbose
Status: active
Logging: on (low)
Default: deny (incoming), allow (outgoing), disabled (routed)
New profiles: skip
To Action From
-- ------ ----
22 ALLOW IN 192.168.0.0/24
該防火牆是活動的,只允許從本地網路連線到
ssh。
以下命令將
1)設定上述規則,2)禁用防火牆。
$ sudo ufw allow from 192.168.0.0/24 to any port 22
$ sudo ufw disable
iptables
瞭解如何為iptables列出防火牆規則也很重要。這些命令將為您提供一個完整的netfilter規則列表:
sudo iptables -vL -t filter
sudo iptables -vL -t nat
sudo iptables -vL -t mangle
sudo iptables -vL -t raw
sudo iptables -vL -t security
ip
ip命令允許您在網路介面上顯示資訊。在下面的例子中,我們看到了環回和公共介面。
$ ip a
1: 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 forever
2: 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路由命令將顯示您的路由表:
$ ip route
default via 192.168.0.1 dev enp0s25 proto static metric 100
169.254.0.0/16 dev enp0s25 scope link metric 1000
192.168.0.0/24 dev enp0s25 proto kernel scope link src 192.168.0.20 metric 100
kill, pkill & killall
正如您在“殺死Unix程式的方法不止一種”中所看到的那樣,Unix和Linux系統提供了一種方便的命令選擇,用於終止程式,而不管您為什麼希望它們死亡。您可以透過程式ID或名稱終止。你可以一次殺死一個人或一群人。在任何情況下,您都可以使用各種kill命令,並且應該準備在需要時使用它們。例子包括:
$ kill 1234
$ pkill bad
$ killall badproc
passwd
當涉及到系統安全性時,passwd命令可能是一個明顯的命令,但它也不應該從任何安全性要點列表中被忽略。對於密碼更改,特別是當使用者來來往往或更改角色時,有一個合理的策略是很重要的。
然而,passwd命令不僅僅用於更改密碼。您還可以使用它與sudo特權來更改其他使用者的密碼、鎖定/解鎖或過期帳戶、檢查帳戶狀態並更改決定密碼何時過期或時間密碼警告的設定。
檢視手冊頁(man passwd)瞭解詳細資訊,並使用以下命令:
$ 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檔案進行一些完整性檢查——確保出現了必需的欄位、檔案和目錄等等。
$ sudo pwck
user 'squash': directory '/home/squash' does not exist
user 'squash': program '/bin/bsh' does not exist
setfacl & getfacl
不要讓rwxr-x- type許可權的簡單顯示誘使您認為這就是在Linux系統上檔案許可權的全部。使用setfacl和getfacl命令,您可以讓不屬於檔案所有者、不屬於相關組成員(您不希望他們成為)的人訪問檔案。假設您希望nemo能夠讀取概述ufw設定說明檔案的檔案,但僅此而已。使用如下命令修改檔案的訪問控制列表(ACL):
$ setfacl -m u:nemo:r ufw-setup
然後getfacl命令將顯示所做的更改:
$ getfacl ufw-setup
# file: ufw-setup
# owner: shs
# group: shs
user::rwx
user:nemo:r-- <===
group::rw- #effective:r--
mask::r--
other::---
sestatus & apparmor
sestatus和apparmor命令可以顯示SELinux和apparmor工具的狀態,這些工具使用強制訪問控制在應用程式之間提供隔離。如果您正在使用這些工具之一,您應該知道如何顯示它們的狀態。
sestatus
$ sudo sestatus
SELinux status: enabled
SELinuxfs mount: /sys/fs/selinux
SELinux root directory: /etc/selinux
Loaded policy name: targeted
Current mode: enforcing
Mode from config file: enforcing
Policy MLS status: enabled
Policy deny_unknown status: allowed
Max kernel policy version: 28
apparmor
$ sudo apparmor_status
apparmor 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/tcpdump
0 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.
你還應該知道如何啟動和停止這些工具。
$ sudo /etc/init.d/apparmor start
$ sudo /etc/init.d/apparmor stop
$ sudo /etc/init.d/apparmor restart
對於SELinux,不同的模式代表什麼:
enforcing -- SELinux security policy is enforced
permissive -- SELinux prints warnings instead of enforcing
disabled -- SELinux is fully disabled
Linux系統上的許多命令可以幫助您管理安全性。上面的描述是為了介紹這些命令,而不是解釋關於它們如何工作或如何使用的所有內容。
來自 “ https://www.networkworld.com/article/3272286/open- ”,原文連結:http://blog.itpub.net/31545812/viewspace-2221855/,如需轉載,請註明出處,否則將追究法律責任。