1. 程式人生 > 實用技巧 >第十五章 屬主屬組,Umask許可權設定,特殊屬性

第十五章 屬主屬組,Umask許可權設定,特殊屬性

屬主屬組

chown   #修改屬主屬組
-R #遞迴設定

chgrp #只能修改屬組

只有root許可權才可以任意修改屬主屬組
普通使用者不能使用這個命令

[root@lxy ~]# cd /opt/
[root@lxy /opt]#
[root@lxy /opt]# ll
total 12
-rw-rw--w-. 1 yuwei yuwei 10 Dec 17 18:36 123
-rw-r---w-. 1 test test 9 Dec 17 18:41 passwd
drwxr-x-wx. 2 root root 70 Dec 17 19:04 test
-rw-r---w-. 1 root root 9 Dec 17 18:33 test.txt
[root@lxy /opt]# id test
uid=1000(test) gid=1000(test) groups=1000(test)
[root@lxy /opt]# chown test.test 123
[root@lxy /opt]# ll
total 12
-rw-rw--w-. 1 test test 10 Dec 17 18:36 123
-rw-r---w-. 1 test test 9 Dec 17 18:41 passwd
drwxr-x-wx. 2 root root 70 Dec 17 19:04 test
-rw-r---w-. 1 root root 9 Dec 17 18:33 test.txt
[root@lxy /opt]# chown yuwei passwd
[root@lxy /opt]# ll
total 12
-rw-rw--w-. 1 test test 10 Dec 17 18:36 123
-rw-r---w-. 1 yuwei test 9 Dec 17 18:41 passwd
drwxr-x-wx. 2 root root 70 Dec 17 19:04 test
-rw-r---w-. 1 root root 9 Dec 17 18:33 test.txt
[root@lxy /opt]# chown .yuwei 123
[root@lxy /opt]# ll
total 12
-rw-rw--w-. 1 test yuwei 10 Dec 17 18:36 123
-rw-r---w-. 1 yuwei test 9 Dec 17 18:41 passwd
drwxr-x-wx. 2 root root 70 Dec 17 19:04 test
-rw-r---w-. 1 root root 9 Dec 17 18:33 test.txt
[root@lxy /opt]# chown root:root 123
[root@lxy /opt]# ll
total 12
-rw-rw--w-. 1 root root 10 Dec 17 18:36 123
-rw-r---w-. 1 yuwei test 9 Dec 17 18:41 passwd
drwxr-x-wx. 2 root root 70 Dec 17 19:04 test
-rw-r---w-. 1 root root 9 Dec 17 18:33 test.txt
[root@lxy /opt]# chgrp test 123
[root@lxy /opt]# ll
total 12
-rw-rw--w-. 1 root test 10 Dec 17 18:36 123
-rw-r---w-. 1 yuwei test 9 Dec 17 18:41 passwd
drwxr-x-wx. 2 root root 70 Dec 17 19:04 test
-rw-r---w-. 1 root root 9 Dec 17 18:33 test.txt

[root@lxy /opt]# chown -R test.test test #遞迴設定
[root@lxy /opt]# ll
total 12
-rw-rw--w-. 1 root test 10 Dec 17 18:36 123
-rw-r---w-. 1 yuwei test 9 Dec 17 18:41 passwd
drwxr-x-wx. 2 test test 70 Dec 17 19:04 test
-rw-r---w-. 1 root root 9 Dec 17 18:33 test.txt
[root@lxy /opt]# ll test
total 0
-rw-rw-r--. 1 test test 0 Dec 17 19:03 new1.txt
-rw-r--r--. 1 test test 0 Dec 17 18:50 old3.txt
-rw-r--r--. 1 test test 0 Dec 17 18:50 old4.txt
-rw-r--r--. 1 test test 0 Dec 17 18:50 old5.txt

Umask許可權設定

umask   #許可權控制命令 
022 #預設的umask值
永久設定 /etc/profile

[root@lxy ~]# mkdir test
[root@lxy ~]# touch test.log
[root@lxy ~]# ll
total 0
drwxr-xr-x. 2 root root 6 Dec 18 16:58 test #新建立的目錄許可權為755
-rw-r--r--. 1 root root 0 Dec 18 16:58 test.log #新建立的檔案許可權為644

umask的計算

umask是個許可權控制的命令,預設的值是022,系統預設建立目錄的許可權是怎麼計算來的,由目錄的最大許可權777,減去umask的預設許可權,得到的結果就是新建立目錄的許可權。系統預設建立檔案的許可權是怎麼計算的,由檔案的最大許可權666,減去umask的預設許可權,得到的結果就是新建立檔案的許可權。當檔案的許可權為出現奇數時,會在奇數位上面+1.

[root@lxy ~]# umask
0022
[root@lxy ~]# umask 033
[root@lxy ~]# umask
0033
[root@lxy ~]# mkdir data
[root@lxy ~]# ll
total 0
drwxr--r--. 2 root root 6 Dec 18 17:06 data
drwxr-xr-x. 2 root root 6 Dec 18 16:58 test
-rw-r--r--. 1 root root 0 Dec 18 16:58 test.log
[root@lxy ~]# touch test.txt
[root@lxy ~]# ll
total 0
drwxr--r--. 2 root root 6 Dec 18 17:06 data
drwxr-xr-x. 2 root root 6 Dec 18 16:58 test
-rw-r--r--. 1 root root 0 Dec 18 16:58 test.log
-rw-r--r--. 1 root root 0 Dec 18 17:06 test.txt

特殊許可權


setuid #在執行一個命令的時候,相當於這個命令的所有者,主要作用於屬主許可權的x位


[root@lxy ~]# ll /usr/bin/passwd
-rwsr-xr-x. 1 root root 27832 Jun 10 2014 /usr/bin/passwd
[root@lxy ~]# stat /usr/bin/passwd
File: ‘/usr/bin/passwd’
Size: 27832 Blocks: 56 IO Block: 4096 regular file
Device: 803h/2051d Inode: 100960630 Links: 1
Access: (4755/-rwsr-xr-x) Uid: ( 0/ root) Gid: ( 0/ root)
Context: system_u:object_r:passwd_exec_t:s0
Access: 2019-12-16 18:28:46.025128480 +0800
Modify: 2014-06-10 14:27:56.000000000 +0800
Change: 2019-11-26 20:24:06.355108144 +0800
Birth: -

#root使用者設定setuid 許可權
[root@lxy ~]# ll /usr/bin/rm
-rwxr-xr-x. 1 root root 62952 Oct 31 2018 /usr/bin/rm
[root@lxy ~]# chmod u+s /usr/bin/rm
[root@lxy ~]# ll /usr/bin/rm
-rwsr-xr-x. 1 root root 62952 Oct 31 2018 /usr/bin/rm
[root@lxy ~]# stat /usr/bin/rm
File: ‘/usr/bin/rm’
Size: 62952 Blocks: 128 IO Block: 4096 regular file
Device: 803h/2051d Inode: 100686169 Links: 1
Access: (4755/-rwsr-xr-x) Uid: ( 0/ root) Gid: ( 0/ root)
Context: system_u:object_r:bin_t:s0
Access: 2019-12-18 03:41:02.098907636 +0800
Modify: 2018-10-31 03:16:01.000000000 +0800
Change: 2019-12-18 17:43:52.450121986 +0800

#普通使用者測試

[test@lxy ~]$ rm -rf /opt/
rm: cannot remove ‘/opt/’: Permission denied
[test@lxy ~]$ rm -rf /opt/
[test@lxy ~]$ ll /opt/
ls: cannot access /opt/: No such file or directory


#如果普通對這個命令檔案沒有執行許可權時,也會報錯

[root@lxy ~]# mkdir /opt
[root@lxy ~]#
[root@lxy ~]#
[root@lxy ~]# chmod o-x /usr/bin/rm
[root@lxy ~]# ll /usr/bin/rm
-rwsr-xr--. 1 root root 62952 Oct 31 2018 /usr/bin/rm

#普通使用者測試

[test@lxy ~]$ rm -rf /opt/
rm: cannot remove ‘/opt/’: Permission denied

#當一個檔案屬主沒有執行許可權時,設定setuid之後就是大S,有執行許可權就是小s
[root@lxy ~]# ll
total 0
drwxr--r--. 2 root root 6 Dec 18 17:06 data
drwxr-xr-x. 2 root root 6 Dec 18 16:58 test
-rw-r--r--. 1 root root 0 Dec 18 16:58 test.log
-rw-r--r--. 1 root root 0 Dec 18 17:06 test.txt
[root@lxy ~]# chmod u+s test.log
[root@lxy ~]# ll
total 0
drwxr--r--. 2 root root 6 Dec 18 17:06 data
drwxr-xr-x. 2 root root 6 Dec 18 16:58 test
-rwSr--r--. 1 root root 0 Dec 18 16:58 test.log
-rw-r--r--. 1 root root 0 Dec 18 17:06 test.txt

#普通使用者對檔案沒有執行許可權時,是執行不了,即使擁有setuid的許可權,也不能執行,
[test@lxy ~]$ ll
total 4
-rwSrw-r--. 1 test test 4 Dec 18 17:53 123.txt
[test@lxy ~]$ ./123.txt
-bash: ./123.txt: Permission denied
[test@lxy ~]$ ll
total 4
-rwxrw-r--. 1 test test 4 Dec 18 17:53 123.txt
[test@lxy ~]$ ./123.txt
/home/test

#root使用者對檔案沒有執行許可權時,是執行不了,即使擁有setuid的許可權,root也是不能執行的
[root@lxy ~]# chmod -x /usr/bin/rm
[root@lxy ~]# ll /usr/bin/rm
-rwSr--r--. 1 root root 62952 Oct 31 2018 /usr/bin/rm
[root@lxy ~]# mkdir /opt
[root@lxy ~]# rm -rf /opt
-bash: /bin/rm: Permission denied

#這個許可權不要亂用。


setgid 讓一個目錄下的所有新建立的目錄或者檔案的預設組都是該目錄的組,而不是建立使用者的組

讓一個成為共享目錄

主要作用於屬組的x位

建立2個使用者,建立一個目錄,讓其屬主及屬組有任何許可權,其它人沒有許可權


#建立兩個測試使用者
[root@lxy ~]# useradd test01
[root@lxy ~]# useradd test02
[root@lxy ~]# echo '1' |passwd --stdin test01
Changing password for user test01.
passwd: all authentication tokens updated successfully.
[root@lxy ~]# echo '1' |passwd --stdin test02
Changing password for user test02.
passwd: all authentication tokens updated successfully.

#建立一個共享目錄
[root@lxy ~]# mkdir /opt/gongxiang

#建立一個共享組
[root@lxy ~]# groupadd gongxiang

#將共享,目錄設定為共享組
[root@lxy ~]# chgrp gongxiang /opt/gongxiang/
[root@lxy ~]# ll /opt/
total 0
drwxr-xr-x. 2 root gongxiang 6 Dec 18 18:17 gongxiang

#讓屬主屬組都要任何許可權,其它使用者沒有許可權
[root@lxy ~]# chmod 770 /opt/gongxiang/

#將兩個使用者加入共享組
[root@lxy ~]# usermod -G gongxiang test01
[root@lxy ~]# usermod -G gongxiang test02

#給共享目錄設定setgid
[root@lxy ~]# chmod g+s /opt/gongxiang/
[test01@lxy /opt]$ stat gongxiang/
File: ‘gongxiang/’
Size: 86 Blocks: 0 IO Block: 4096 directory
Device: 803h/2051d Inode: 67753409 Links: 4
Access: (2770/drwxrws---) Uid: ( 0/ root) Gid: ( 2026/gongxiang)
Context: unconfined_u:object_r:usr_t:s0
Access: 2019-12-18 18:48:13.316985658 +0800
Modify: 2019-12-18 18:48:11.411985725 +0800
Change: 2019-12-18 18:48:11.411985725 +0800
Birth: -


#test01測試

[test01@lxy /opt/gongxiang]$ touch test01.txt
[test01@lxy /opt/gongxiang]$ ll
total 0
-rw-rw-r--. 1 test01 gongxiang 0 Dec 18 18:43 test01.txt
[test01@lxy /opt/gongxiang]$ mkdir test01
[test01@lxy /opt/gongxiang]$ ll
total 0
drwxrwsr-x. 2 test01 gongxiang 6 Dec 18 18:43 test01
-rw-rw-r--. 1 test01 gongxiang 0 Dec 18 18:43 test01.txt
[test01@lxy /opt/gongxiang]$ ll test02
total 0
-rw-rw-r--. 1 test02 gongxiang 0 Dec 18 18:45 test02.log
[test01@lxy /opt/gongxiang]$ rm -f test02/test02.log
[test01@lxy /opt/gongxiang]$ ll test02
total 0

#test02使用者測試
[test02@lxy /opt/gongxiang]$ touch test02.txt
[test02@lxy /opt/gongxiang]$ mkdir test02
[test02@lxy /opt/gongxiang]$ ll
total 0
drwxrwsr-x. 2 test01 gongxiang 6 Dec 18 18:43 test01
-rw-rw-r--. 1 test01 gongxiang 0 Dec 18 18:43 test01.txt
drwxrwsr-x. 2 test02 gongxiang 6 Dec 18 18:44 test02
-rw-rw-r--. 1 test02 gongxiang 0 Dec 18 18:43 test02.txt
[test02@lxy /opt/gongxiang]$ touch test02/test02.log
[test02@lxy /opt/gongxiang]$ ll test02
total 0
-rw-rw-r--. 1 test02 gongxiang 0 Dec 18 18:45 test02.log

sticky 粘滯位,讓一個目錄成為所有使用者都有所有許可權,目錄許可權是777.又讓所有使用者除了root和屬主可以管理自己的檔案或者目錄,其它人沒有管理的許可權。

主要作用在其他人的x位,t表示


[root@lxy ~]# mkdir -m 777 /test
[root@lxy ~]# ll -d /test
drwxrwxrwx. 2 root root 6 Dec 18 18:58 /test
[root@lxy ~]# chmod o+t /test/
[root@lxy ~]# ll -d /test
drwxrwxrwt. 2 root root 6 Dec 18 19:00 /test
[root@lxy ~]# stat /test
File: ‘/test’
Size: 6 Blocks: 0 IO Block: 4096 directory
Device: 803h/2051d Inode: 1083835 Links: 2
Access: (1777/drwxrwxrwt) Uid: ( 0/ root) Gid: ( 0/ root)
Context: unconfined_u:object_r:default_t:s0
Access: 2019-12-18 19:00:13.822960217 +0800
Modify: 2019-12-18 19:00:33.146959534 +0800
Change: 2019-12-18 19:01:09.490958251 +0800
Birth: -

#test01使用者測試
[test01@lxy ~]$ touch /test/test01.txt
[test01@lxy ~]$ ll /test/
total 0
-rw-rw-r--. 1 test01 test01 0 Dec 18 19:01 test01.txt
-rw-rw-r--. 1 test02 test02 0 Dec 18 19:01 test02.txt
[test01@lxy ~]$ rm -f /test/test02.txt
rm: cannot remove ‘/test/test02.txt’: Operation not permitted

#test02使用者測試
[test02@lxy ~]$ touch /test/test02.txt
[test02@lxy ~]$ ll /test/
total 0
-rw-rw-r--. 1 test01 test01 0 Dec 18 19:01 test01.txt
-rw-rw-r--. 1 test02 test02 0 Dec 18 19:01 test02.txt
[test02@lxy ~]$ rm -f /test/test01.txt
rm: cannot remove ‘/test/test01.txt’: Operation not permitted
[test02@lxy ~]$ rm -f /test/test02.txt

特殊屬性


特殊屬性不受許可權的控制
lsattr #顯示檔案的隱藏的屬性,特殊屬性

chattr #設定特殊屬性

+ #新增

- #移除

a #只能表示追加,不能刪除,移動,修改,給重要的檔案,日誌加上特殊屬性

i #什麼都不能操作,不能刪除,移動,追加,重定向,給重要的配置檔案加上特殊屬性



#測試a屬性
[root@lxy ~]# lsattr test.txt #顯示檔案的隱藏的屬性,特殊屬性
-----a---------- test.txt
[root@lxy ~]# cat test.txt
hostname
[root@lxy ~]# ./test.txt
lxy
[root@lxy ~]# cp test.txt /tmp/
[root@lxy ~]# rm -f test.txt
rm: cannot remove ‘test.txt’: Operation not permitted
[root@lxy ~]# mv test.txt /opt/
mv: cannot move ‘test.txt’ to ‘/opt/test.txt’: Operation not permitted
[root@lxy ~]# vim test.txt
[root@lxy ~]# echo pwd >> test.txt
[root@lxy ~]# cat test.txt
hostname
pwd
[root@lxy ~]# echo pwd > test.txt
-bash: test.txt: Operation not permitted

#測試i屬性
[root@lxy ~]# lsattr test.txt
-----a---------- test.txt
[root@lxy ~]# chattr -a test.txt
[root@lxy ~]# lsattr test.txt
---------------- test.txt
[root@lxy ~]# chattr +i test.txt
[root@lxy ~]# cat test.txt
hostname
pwd
[root@lxy ~]# ./test.txt
lxy
/root
[root@lxy ~]# cp ./test.txt /opt/
[root@lxy ~]# mv ./test.txt /mnt/
mv: overwrite ‘/mnt/test.txt’? y
mv: cannot move ‘./test.txt’ to ‘/mnt/test.txt’: Operation not permitted
[root@lxy ~]# rm -f test.txt
rm: cannot remove ‘test.txt’: Operation not permitted
[root@lxy ~]# echo 123 >test.txt
-bash: test.txt: Permission denied
[root@lxy ~]# echo 123 >>test.txt
-bash: test.txt: Permission denied