描述
因為在學校要做資訊安全的報告,因此對帳號提權部分做了一點研究。本篇會對於 sudoers
和 sudo
的使用方式作介紹。主要探討的是為何在安裝 ubuntu 時,設定的使用者會有 sudo
提權的功能。
對於 sudo 的描述在先前文章有提過。
sudoers
配置檔的預設某些內容,格式為 使用者帳號 登入者的來源主機名稱=(可切換的身份) 可下達的指令
。
...
# User privilege specification
root ALL=(ALL:ALL) ALL
# Members of the admin group may gain root privileges
%admin ALL=(ALL) ALL
# Allow members of group sudo to execute any command
%sudo ALL=(ALL:ALL) ALL
...
- 使用者帳號
- 可以使用
sudo
帳號名稱 - 或者以
%
為開頭表示已GID
設定
- 可以使用
- 登入者的來源主機名稱
- 限制使用者從特定網路主機連線,才能使用
sudo
指令 - 值
ALL
則代表不限制來源主機。
- 限制使用者從特定網路主機連線,才能使用
- 可切換的身份
- 值是填入帳號的
UID
- 取得這些帳號的權限
ALL
表示任何都可取得
- 值是填入帳號的
- 可下達的指令
- 取得提權權限時可下的指令
ALL
表示執行的指令沒被限制
sudo usage
$ sudo -u [UID] ls [FILE_PATH] # 取得該 UID 的權限,並執行指令
$ sudo -g [GID] ls [FILE_PATH] # 取德該 GID 的權限,並執行指令
Example
cch 為安裝時,設定的使用者。test 則是新增的。
cch@mars:~$ id cch
uid=1000(cch) gid=1000(cch) groups=1000(cch),4(adm),24(cdrom),27(sudo),30(dip),46(plugdev),108(lxd)
cch@mars:~$ id test
uid=1001(test) gid=1001(test) groups=1001(test)
先用 su
做使用者登入切換
$ su -l test
Password:
test@mars:~$
例如我們用 test
使用者查看 syslog
test@mars:~$ head -n 1 /var/log/syslog
head: cannot open '/var/log/syslog' for reading: Permission denied
test@mars:~$ ls -l /var/log/syslog
-rw-r----- 1 syslog adm 392736 Nov 17 01:46 /var/log/syslog
出現以下訊息,簡單來說就是無權限,因此要至 sudoers
配置
test@mars:~$ sudo head -n 1 /var/log/syslog
[sudo] password for test:
test is not in the sudoers file. This incident will be reported.
test@mars:~$ sudo cat /var/log/syslog
[sudo] password for test:
test is not in the sudoers file. This incident will be reported.
解決方式 1,在 sudoers
中添加
$ test ALL=(cch) ALL
在執行一次
$ sudo head -n1 /var/log/syslog
Sorry, user test is not allowed to execute '/usr/bin/head -n1 /var/log/syslog' as root on mars.
但我們在 suoders
讓 test
可以切換 cch
。因此下達 -u cch
的參數即可成功
$ sudo -u cch head -n1 /var/log/syslog
[sudo] password for test:
Nov 12 00:56:39 mars kernel: [ 0.000000] Linux version 4.15.0-66-generic (buildd@lgw01-amd64-044) (gcc version 7.4.0 (Ubuntu 7.4.0-1ubuntu1~18.04.1)) #75-Ubuntu SMP Tue Oct 1 05:24:09 UTC 2019 (Ubuntu 4.15.0-66.75-generic 4.15.18)
解決方式二,加至 sudo
GID
cch@mars:~$ sudo addgroup test sudo
Adding user `test' to group `sudo' ...
Adding user test to group sudo
Done.
cch@mars:~$ id test
uid=1001(test) gid=1001(test) groups=1001(test),27(sudo)
執行結果
test@mars:~$ sudo head -n1 /var/log/syslog
[sudo] password for test:
Nov 12 00:56:39 mars kernel: [ 0.000000] Linux version 4.15.0-66-generic (buildd@lgw01-amd64-044) (gcc version 7.4.0 (Ubuntu 7.4.0-1ubuntu1~18.04.1)) #75-Ubuntu SMP Tue Oct 1 05:24:09 UTC 2019 (Ubuntu 4.15.0-66.75-generic 4.15.18)
解決方式三,先在 sudoers
定義以下
$ test ALL=(ALL:ALL) ALL
不在 adm
群組和 syslog
使用者下,透過上述設定,並藉由 sudo
提權 adm
群組或 syslog
使用者權限。
$ sudo -g adm head -n1 /var/log/syslog
Nov 12 00:56:39 mars kernel: [ 0.000000] Linux version 4.15.0-66-generic (buildd@lgw01-amd64-044) (gcc version 7.4.0 (Ubuntu 7.4.0-1ubuntu1~18.04.1)) #75-Ubuntu SMP Tue Oct 1 05:24:09 UTC 2019 (Ubuntu 4.15.0-66.75-generic 4.15.18)
test@mars:~$ id test
uid=1001(test) gid=1001(test) groups=1001(test)
test@mars:~$ sudo -u syslog head -n1 /var/log/syslog
Nov 12 00:56:39 mars kernel: [ 0.000000] Linux version 4.15.0-66-generic (buildd@lgw01-amd64-044) (gcc version 7.4.0 (Ubuntu 7.4.0-1ubuntu1~18.04.1)) #75-Ubuntu SMP Tue Oct 1 05:24:09 UTC 2019 (Ubuntu 4.15.0-66.75-generic 4.15.18)
結論
從上述的結果來看 cch
使用者因為有再 sudo
GID,因此可以用 sudo
做提權。那 test
使用者則是要透過指令將 sudo
GID 加至 test
或者可針對可予以切換的使用者或群組作設定,讓該 test
透過 sudo -u
或 sudo -g
做權限切換動作。
sudoers
是一個可針對使用者能做的事情做限制,善加利用的話也可以達到安全防護效果。