4.Linux使用者組和許可權管理
阿新 • • 發佈:2020-11-28
第一部分 使用者和組
1.建立使用者gentoo,附加組為bin和root,預設shell為/bin/csh,註釋資訊為“Gentoo Distribution”
[root@centos8 ~]# useradd -G bin,root -s /bin/csh -c "“Gentoo Distribution”" geetoo [root@centos8 ~]# getent passwd geetoo geetoo:x:1001:1001:“Gentoo Distribution”:/home/geetoo:/bin/csh [root@centos8 ~]# id geetoo uid=1001(geetoo) gid=1001(geetoo) groups=1001(geetoo),1(bin),0(root)
2.建立下面的使用者、組和組成員
名字為webs的組
使用者nginx,使用webs作為附加組
使用者varnish,使用webs作為附加組
使用者mysql,不可互動登入系統,且不是webs的成員,nginx,varnish,mysql密碼都是magede
[root@centos8 ~]# groupadd webs [root@centos8 ~]# getent group webs webs:x:1002: [root@centos8 ~]# useradd -G webs nginx [root@centos8 ~]# getent passwd nginx nginx:x:1002:1003::/home/nginx:/bin/bash [root@centos8 ~]# id nginx uid=1002(nginx) gid=1003(nginx) groups=1003(nginx),1002(webs) [root@centos8 ~]# useradd -G webs varnish [root@centos8 ~]# getent passwd varnish varnish:x:1003:1004::/home/varnish:/bin/bash [root@centos8 ~]# id varnish uid=1003(varnish) gid=1004(varnish) groups=1004(varnish),1002(webs) [root@centos8 ~]# useradd -s /sbin/nologin mysql [root@centos8 ~]# getent passwd mysql mysql:x:1004:1005::/home/mysql:/sbin/nologin [root@centos8 ~]# id mysql uid=1004(mysql) gid=1005(mysql) groups=1005(mysql) [root@centos8 ~]# echo magedu | passwd --stdin nginx Changing password for user nginx. passwd: all authentication tokens updated successfully. [root@centos8 ~]# echo magedu | passwd --stdin varnish Changing password for user varnish. passwd: all authentication tokens updated successfully. [root@centos8 ~]# echo magedu | passwd --stdin mysql Changing password for user mysql. passwd: all authentication tokens updated successfully. [root@centos8 ~]# getent shadow nginx nginx:$6$7r6YkegEx2W26SMM$f3YETfxOYLPZGes2fjZezD4vn2ITOYVOMG3pRlkGh1gACjUh5QZmzgQUdJwdEYywg8qnTRLf9NkjRJ04YpH3U0:18586:0:99999:7::: [root@centos8 ~]# getent shadow varnish varnish:$6$hYCSWUVx7egt6s72$PlpwJAVY61feV19uInUesGVm1iG9eTLjDuLRben9A44uSMlPe9qKDG2y5mQV0gW92jcYRB/zuUHNUuT6rk8V01:18586:0:99999:7::: [root@centos8 ~]# getent shadow mysql mysql:$6$BfZ8lKoLQE4VzSyf$UpAgw63Hv.wd7SYMZIG7WBYp98d0KuZFG7XJn1xdFk1Of3n3lkTfUsEfvtUdW1VMnLq5/06Wji85GD/ksXSO4.:18586:0:99999:7:::
第二部分 面試題
面試題:執行cp /etc/issue /data/dir 所需要的最小許可權?
[root@centos8 ~]# cd /data [root@centos8 data]# ls [root@centos8 data]# mkdir dir [root@centos8 data]# cp /etc/issue dir/ [root@centos8 data]# ll dir/issue -rw-r--r--. 1 root root 23 Nov 20 22:39 dir/issue [root@centos8 data]# chmod a= dir [root@centos8 data]# ll total 0 d---------. 2 root root 19 Nov 20 22:39 dir #資料夾沒有許可權。 [root@centos8 data]# su neteagle [neteagle@centos8 data]$ cp dir/issue ~ cp: cannot stat 'dir/issue': Permission denied #沒有許可權。 [neteagle@centos8 data]$ exit exit [root@centos8 data]# ll total 0 d---------. 2 root root 19 Nov 20 22:39 dir [root@centos8 data]# chmod o+x dir [root@centos8 data]# ll dir/issue -rw-r--r--. 1 root root 23 Nov 20 22:39 dir/issue [root@centos8 data]# su neteagle [neteagle@centos8 data]$ cp dir/issue ~ [neteagle@centos8 data]$ ll ~/issue -rw-r--r--. 1 neteagle neteagle 23 Nov 20 22:43 /home/neteagle/issue [neteagle@centos8 data]$ ll total 0 d--------x. 2 root root 19 Nov 20 22:39 dir #說明這個資料夾只要有執行許可權,就能進去,進去就能複製 [neteagle@centos8 data]$ exit exit [root@centos8 data]# ll dir/issue -rw-r--r--. 1 root root 23 Nov 20 22:39 dir/issue [root@centos8 data]# chmod a= dir/issue [root@centos8 data]# ll dir/issue ----------. 1 root root 23 Nov 20 22:39 dir/issue [root@centos8 data]# su neteagle [neteagle@centos8 data]$ cp dir/issue ~/issue2 cp: cannot open 'dir/issue' for reading: Permission denied #如果檔案沒有任何許可權,不能複製。 [neteagle@centos8 data]$ exit exit [root@centos8 data]# chmod o+x dir/issue [root@centos8 data]# ll dir/issue ---------x. 1 root root 23 Nov 20 22:39 dir/issue [root@centos8 data]# su neteagle [neteagle@centos8 data]$ cp dir/issue ~/issue3 cp: cannot open 'dir/issue' for reading: Permission denied #檔案有執行許可權是不能複製 [neteagle@centos8 data]$ exit exit [root@centos8 data]# ll dir total 4 ---------x. 1 root root 23 Nov 20 22:39 issue [root@centos8 data]# chmod o=r dir/issue [root@centos8 data]# ll dir/issue -------r--. 1 root root 23 Nov 20 22:39 dir/issue [root@centos8 data]# su neteagle [neteagle@centos8 data]$ cp dir/issue ~/issue4 [neteagle@centos8 data]$ ll ~/issue4 -------r--. 1 neteagle neteagle 23 Nov 20 22:48 /home/neteagle/issue4 #檔案有讀許可權,就可以複製 [neteagle@centos8 data]$ exit exit [root@centos8 data]# mkdir dir2 [root@centos8 data]# chmod a= dir2 [root@centos8 data]# ll total 0 d--------x. 2 root root 19 Nov 20 22:39 dir d---------. 2 root root 6 Nov 20 22:49 dir2 [root@centos8 data]# su neteagle [neteagle@centos8 data]$ ll dir/issue -------r--. 1 root root 23 Nov 20 22:39 dir/issue [neteagle@centos8 data]$ cp dir/issue dir2/ cp: cannot stat 'dir2/issue': Permission denied #資料夾沒有許可權,複製不了。 [neteagle@centos8 data]$ exit exit [root@centos8 data]# ll total 0 d--------x. 2 root root 19 Nov 20 22:39 dir d---------. 2 root root 6 Nov 20 22:49 dir2 [root@centos8 data]# chmod o+w dir2 [root@centos8 data]# ll total 0 d--------x. 2 root root 19 Nov 20 22:39 dir d-------w-. 2 root root 6 Nov 20 22:49 dir2 [root@centos8 data]# su neteagle [neteagle@centos8 data]$ cp dir/issue dir2/ cp: cannot stat 'dir2/issue': Permission denied #資料夾只有寫許可權不能複製。 [neteagle@centos8 data]$ exit exit [root@centos8 data]# ll total 0 d--------x. 2 root root 19 Nov 20 22:39 dir d-------w-. 2 root root 6 Nov 20 22:49 dir2 [root@centos8 data]# chmod o=x dir2 [root@centos8 data]# ll total 0 d--------x. 2 root root 19 Nov 20 22:39 dir d--------x. 2 root root 6 Nov 20 22:49 dir2 [root@centos8 data]# su neteagle [neteagle@centos8 data]$ cp dir/issue dir2/ cp: cannot create regular file 'dir2/issue': Permission denied #光加執行不能複製。 [neteagle@centos8 data]$ exit exit [root@centos8 data]# chmod o=wx dir2/ [root@centos8 data]# su neteagle [neteagle@centos8 data]$ ll total 0 d--------x. 2 root root 19 Nov 20 22:39 dir d-------wx. 2 root root 6 Nov 20 22:49 dir2 [neteagle@centos8 data]$ cp dir/issue dir2/ #加執行和寫,可以複製 [neteagle@centos8 data]$ exit exit [root@centos8 data]# cd [root@centos8 ~]# ll -d /data drwxr-xr-x. 4 root root 29 Nov 20 22:49 /data [root@centos8 ~]# chmod a= /data [root@centos8 ~]# su neteagle [neteagle@centos8 root]$ cp /data/dir/issue /data/dir2/issue2 cp: failed to access '/data/dir2/issue2': Permission denied #/date目錄沒有許可權,也不能複製 [neteagle@centos8 root]$ exit exit [root@centos8 ~]# ll -d /data d---------. 4 root root 29 Nov 20 22:49 /data [root@centos8 ~]# chmod o+x /data [root@centos8 ~]# ll -d /data d--------x. 4 root root 29 Nov 20 22:49 /data [root@centos8 ~]# su neteagle [neteagle@centos8 root]$ cp /data/dir/issue /data/dir2/issue2 #/data目錄有執行許可權,就可以複製。 [neteagle@centos8 root]$ exit exit [root@centos8 ~]# which cp alias cp='cp -i' /usr/bin/cp [root@centos8 ~]# ll /bin/cp -rwxr-xr-x. 1 root root 333128 Apr 10 2020 /bin/cp [root@centos8 ~]# chmod a= /bin/cp [root@centos8 ~]# su neteagle [neteagle@centos8 root]$ cp /data/dir/issue /data/dir2/issue3 bash: /usr/bin/cp: Permission denied #cp沒有許可權,不能複製。 [neteagle@centos8 root]$ exit exit [root@centos8 ~]# ll /bin/cp ----------. 1 root root 333128 Apr 10 2020 /bin/cp [root@centos8 ~]# chmod o+x /bin/cp [root@centos8 ~]# ll /bin/cp ---------x. 1 root root 333128 Apr 10 2020 /bin/cp [root@centos8 ~]# su neteagle [neteagle@centos8 root]$ cp /data/dir/issue /data/dir2/issue4 #cp 有執行許可權就可以複製 [neteagle@centos8 root]$ exit exit 總結: /bin/cp 需要x許可權。 /etc 需要x許可權。 /etc/issue 需要r許可權。 /data 需要x許可權。 /data/dir 需要w ,x許可權。
第三部分 檔案許可權
1.當用戶docker對/testdir目錄無執行許可權時,意味著無法做那些操作?
[root@centos8 data]# useradd docker
[root@centos8 data]# echo 123456 |passwd --stdin docker
Changing password for user docker.
passwd: all authentication tokens updated successfully.
[root@centos8 data]# chown docker testdir/
[root@centos8 data]# ll -d testdir/
drwxr-xr-x. 2 docker root 6 Nov 20 21:14 testdir/
[root@centos8 data]# chmod u-x testdir/
[root@centos8 data]# ll -d testdir/
drw-r-xr-x. 2 docker root 6 Nov 20 21:14 testdir/
[root@centos8 data]# touch testdir/a.txt
[root@centos8 data]# su docker
[docker@centos8 data]$ cd testdir/
bash: cd: testdir/: Permission denied
[docker@centos8 data]$ touch testdir/a.txt
touch: cannot touch 'testdir/a.txt': Permission denied
[docker@centos8 data]$ rm -rf testdir/
rm: cannot remove 'testdir/': Permission denied
[docker@centos8 data]$ cat testdir/a.txt
cat: testdir/a.txt: Permission denied
[docker@centos8 data]$ echo docker data >> testdir/a.txt
bash: testdir/a.txt: Permission denied
[docker@centos8 data]$ echo docker data > testdir/a.txt
bash: testdir/a.txt: Permission denied
#結論:沒有讀許可權,沒有寫許可權,當然也就沒有執行許可權。
2.當用戶mongodb對/testdir目錄無讀許可權時,意味著無法做那些操作?
[root@centos8 data]# useradd mongodb
[root@centos8 data]# ls
a.txt testdir
[root@centos8 data]# ll -d
drwxr-xr-x. 3 root root 34 Nov 20 21:14 .
[root@centos8 data]# ll -d testdir/
drw-r-xr-x. 2 docker root 19 Nov 20 21:21 testdir/
[root@centos8 data]# chown mongodb testdir/
[root@centos8 data]# ll -d testdir/
drw-r-xr-x. 2 mongodb root 19 Nov 20 21:21 testdir/
[root@centos8 data]# chmod u=wx testdir/
[root@centos8 data]# ll -d testdir/
d-wxr-xr-x. 2 mongodb root 19 Nov 20 21:21 testdir/
[root@centos8 data]# su mongodb
[mongodb@centos8 data]$ cd testdir/
[mongodb@centos8 testdir]$ touch b.txt
[mongodb@centos8 testdir]$ echo mongodb data >> b.txt
[mongodb@centos8 testdir]$ cat b.txt
mongodb data
[mongodb@centos8 testdir]$ cp b.txt ~/
[mongodb@centos8 testdir]$ rm -f b.txt
#結論:什麼操作都能做,因為other有r許可權
3.當redis對/testdir目錄無寫許可權時,該目錄下的只讀檔案file1是否可修改和刪除?
[root@centos8 data]# ll -d testdir/
d-wxr-xr-x. 2 mongodb root 19 Nov 20 21:28 testdir/
[root@centos8 data]# useradd redis
[root@centos8 data]# chown redis testdir/
[root@centos8 data]# ll -d testdir/
d-wxr-xr-x. 2 redis root 19 Nov 20 21:28 testdir/
[root@centos8 data]# chmod u=rx testdir/
[root@centos8 data]# ll -d testdir/
dr-xr-xr-x. 2 redis root 19 Nov 20 21:28 testdir/
[root@centos8 data]# touch testdir/file1
[root@centos8 data]# chmod 400 testdir/file1
[root@centos8 data]# ll testdir/file1
-r--------. 1 root root 0 Nov 20 21:34 testdir/file1
[redis@centos8 data]$ echo xx >>testdir/file1
bash: testdir/file1: Permission denied
[redis@centos8 data]$ rm -f testdir/file1
rm: cannot remove 'testdir/file1': Permission denied
#結論不能修改,也不能刪除
4.當用戶zabbix對/testdir目錄有寫和執行許可權時,該目錄下的只讀檔案file1是否可修改和刪除?
[root@centos8 data]# useradd zabbix
[root@centos8 data]# chown zabbix testdir
[root@centos8 data]# ll -d testdir/
dr-xr-xr-x. 2 zabbix root 32 Nov 20 21:34 testdir/
[root@centos8 data]# chmod u=wx testdir/
[root@centos8 data]# ll -d testdir/
d-wxr-xr-x. 2 zabbix root 32 Nov 20 21:34 testdir/
[root@centos8 data]# ll -d testdir/file1
-r--------. 1 root root 0 Nov 20 21:34 testdir/file1
[root@centos8 data]# su zabbix
[zabbix@centos8 data]$ echo xx >>testdir/file1
bash: testdir/file1: Permission denied
[zabbix@centos8 data]$ rm -f testdir/file1
#結論:不能修改,可以刪除
5.複製/etc/fstab檔案到/var/tmp下,設定檔案所有者為tomcat讀寫許可權,所屬組為apps 組有讀寫許可權,其他人無許可權
[root@centos8 data]# cp /etc/fstab /var/tmp
[root@centos8 data]# ll /var/tmp/fstab
-rw-r--r--. 1 root root 709 Nov 20 21:40 /var/tmp/fstab
[root@centos8 data]# useradd tomcat
[root@centos8 data]# groupadd apps
[root@centos8 data]# chown tomcat.apps /var/tmp/fstab
[root@centos8 data]# ll /var/tmp/fstab
-rw-r--r--. 1 tomcat apps 709 Nov 20 21:45 /var/tmp/fstab
[root@centos8 data]# chmod 660 /var/tmp/fstab
[root@centos8 data]# ll /var/tmp/fstab
-rw-rw----. 1 tomcat apps 709 Nov 20 21:45 /var/tmp/fstab
6.誤刪除了使用者git的家目錄,請重建並恢復該使用者家目錄及相應的許可權屬性
[root@centos8 data]# useradd git
[root@centos8 data]# ll -d /home/git
drwx------. 3 git git 78 Nov 20 21:51 /home/git
[root@centos8 data]# ll -a /home/git
total 12
drwx------. 3 git git 78 Nov 20 21:51 .
drwxr-xr-x. 10 root root 113 Nov 20 21:51 ..
-rw-r--r--. 1 git git 18 Nov 9 2019 .bash_logout
-rw-r--r--. 1 git git 141 Nov 9 2019 .bash_profile
-rw-r--r--. 1 git git 312 Nov 9 2019 .bashrc
drwxr-xr-x. 4 git git 39 Nov 20 13:27 .mozilla
[root@centos8 data]# rm -rf /home/git
[root@centos8 data]# ll /home
total 0
drwx------. 3 docker docker 99 Nov 20 21:14 docker
drwx------. 3 hf hf 120 Nov 20 16:49 hf
drwx------. 3 mongodb mongodb 112 Nov 20 21:31 mongodb
drwx------. 3 neteagle neteagle 99 Nov 20 15:59 neteagle
drwx------. 3 redis redis 99 Nov 20 21:33 redis
drwx------. 3 tomcat tomcat 78 Nov 20 21:41 tomcat
drwx------. 3 zabbix zabbix 99 Nov 20 21:40 zabbix
[root@centos8 data]# ll -a /etc/skel/
total 24
drwxr-xr-x. 3 root root 78 Nov 20 13:28 .
drwxr-xr-x. 135 root root 8192 Nov 20 21:51 ..
-rw-r--r--. 1 root root 18 Nov 9 2019 .bash_logout
-rw-r--r--. 1 root root 141 Nov 9 2019 .bash_profile
-rw-r--r--. 1 root root 312 Nov 9 2019 .bashrc
drwxr-xr-x. 4 root root 39 Nov 20 13:27 .mozilla
[root@centos8 data]# cp -a /etc/skel/ /home/git
[root@centos8 data]# ll -a /home/git
total 12
drwxr-xr-x. 3 root root 78 Nov 20 13:28 .
drwxr-xr-x. 10 root root 113 Nov 20 21:59 ..
-rw-r--r--. 1 root root 18 Nov 9 2019 .bash_logout
-rw-r--r--. 1 root root 141 Nov 9 2019 .bash_profile
-rw-r--r--. 1 root root 312 Nov 9 2019 .bashrc
drwxr-xr-x. 4 root root 39 Nov 20 13:27 .mozilla
[root@centos8 data]# ll -d /home/git
drwxr-xr-x. 3 root root 78 Nov 20 13:28 /home/git
[root@centos8 data]# chown git.git /home/git
[root@centos8 data]# ll -d /home/git
drwxr-xr-x. 3 git git 78 Nov 20 13:28 /home/git
[root@centos8 data]# chmod 700 /home/git
[root@centos8 data]# ll -d /home/git
drwx------. 3 git git 78 Nov 20 13:28 /home/git
第四部分 特殊許可權
1.在/testdir/dir裡建立的新檔案自動屬於webs組,組apps的成員如下:tomcat能對這些新檔案有讀寫許可權,組dbs的成員如下:mysql只能對新檔案有讀許可權,其它使用者(不屬於webs,apps,dbs)不能訪問這個資料夾
[root@centos8 data]# mkdir -p testdir/dir
[root@centos8 data]# groupadd webs
[root@centos8 data]# chown :webs testdir/dir/
[root@centos8 data]# ll -d testdir/dir/
drwxr-xr-x. 2 root webs 6 Nov 20 22:05 testdir/dir/
[root@centos8 data]# chmod g+s testdir/dir/
[root@centos8 data]# ll -d testdir/dir/
drwxr-sr-x. 2 root webs 6 Nov 20 22:05 testdir/dir/
[root@centos8 data]# touch testdir/dir/a.txt
[root@centos8 data]# ll testdir/dir/a.txt
-rw-r--r--. 1 root webs 0 Nov 20 22:07 testdir/dir/a.txt
[root@centos8 data]# id tomcat
uid=1006(tomcat) gid=1007(tomcat) groups=1007(tomcat)
[root@centos8 data]# groupmems -l -g apps
[root@centos8 data]# groupmems -a tomcat -g apps
[root@centos8 data]# groupmems -l -g apps
tomcat
[root@centos8 data]# setfacl -m u:tomcat:rw a.txt
[root@centos8 data]# getfacl
Usage: getfacl [-aceEsRLPtpndvh] file ...
Try `getfacl --help' for more information.
[root@centos8 data]# getfacl a.txt
# file: a.txt
# owner: root
# group: root
user::rw-
user:tomcat:rw-
group::r--
mask::rw-
[root@centos8 data]# groupmems -l -g dbs
groupmems: group 'dbs' does not exist in /etc/group
[root@centos8 data]# groupadd dbs
[root@centos8 data]# groupmems -l -g dbs
[root@centos8 data]# groupmems -a mysql -g dbs
groupmems: user 'mysql' does not exist
[root@centos8 data]# useradd mysql
[root@centos8 data]# groupmems -a mysql -g dbs
[root@centos8 data]# groupmems -l -g dbs
mysql
[root@centos8 data]# setfacl -m u:mysql:r a.txt
[root@centos8 data]# getfacl a.txt
# file: a.txt
# owner: root
# group: root
user::rw-
user:tomcat:rw-
user:mysql:r--
group::r--
mask::rw-
other::r--
[root@centos8 data]# setfacl -m o:- testdir/dir/
[root@centos8 data]# getfal testdir/dir/
bash: getfal: command not found...
[root@centos8 data]# getfacl testdir/dir/
# file: testdir/dir/
# owner: root
# group: webs
# flags: -s-
user::rwx
group::r-x
other::---
2.誤將/bin/chmod檔案的執行許可權刪除,如何恢復?
[root@centos8 data]# ll /bin/chmod
-rwxr--r--. 1 root root 133952 Nov 20 22:26 /bin/chmod
[root@centos8 data]# chmod a-x /bin/chmod #去掉/bin/chmod執行許可權。
[root@centos8 data]# ll /bin/chmod
-rw-r--r--. 1 root root 133952 Apr 10 2020 /bin/chmod #現在已經沒有執行許可權
[root@centos8 data]# chmod u+x /bin/chmod
-bash: /usr/bin/chmod: Permission denied #賦予執行許可權,提示許可權不足。
[root@centos8 data]# install /bin/chmod -m 744 ./chmod #在用install指令拷貝時指定許可權,趁此時假加入執行許可權
[root@centos8 data]# ll
total 136
-rw-rw-r--+ 1 root root 3 Nov 20 20:56 a.txt
-rwxr--r--. 1 root root 133952 Nov 20 22:26 chmod
drwxr-xr-x. 3 root root 17 Nov 20 22:05 testdir
[root@centos8 data]# mv ./chmod /bin/chmod #用mv將先前的chmod 移動到/bin/chmod,覆蓋。
mv: overwrite '/bin/chmod'? y
[root@centos8 data]# ll /bin/chmod
-rwxr--r--. 1 root root 133952 Nov 20 22:26 /bin/chmod
#現在/bin/chomd 許可權恢復