Saturday, December 3, 2011

Umask và sticky bit

1.Sơ lược về umask


Khi tạo một file hay thư mục trong hệ thống, những file/thư mục mới này sẽ được gán một quyền mặc định. Quyền mặc định này được quản lý bởi giá trị umask. Umask gồm 4 octal.

Để xem giá trị umask của user hiện tại có thể dùng lệnh umask trong terminal


[cuong@F16 ~]$ umask 
0002



Đối với file, mặc định khi mới được tạo ra sẽ có quyền là 0666, đối với thư mục là 0777. Hai giá trị này được gọi là Base Permission. Điều đó có nghĩa là khi một file mới được tao ra thì mọi user đều có quyền read và write đối với file đó và mọi user đều có full quyền trên thư mục mới được tạo ra.

Để hạn chế vấn đề này, umask được sử dụng để thiết lập quyền mặc định của file/thư mục khi mới được tạo ra.

Giả sử umask hiện tại là 0002 thì khi file mới được tạo ra, quyền mặc định của file đó sẽ là 664 và thư mục sẽ có quyền là 775.


[cuong@F16 check]$ mkdir test
[cuong@F16 check]$ touch myfile
[cuong@F16 check]$ ll
total 4
-rw-rw-r--. 1 cuong cuong    0 Dec  3 11:32 myfile
drwxrwxr-x. 2 cuong cuong 4096 Dec  3 11:32 test

2. Umask mặc định của user

Mặc định đối với normal user sẽ có giá trị umask mặc định là 002. Còn đối với các super user thì umask là 022. Giá trị mặc định này được định nghĩa trong /etc/bashrc hoặc /etc/profile. Như vậy khi root tạo file thì file đó sẽ có quyền là 644, còn thư mục là 755. Lưu ý đối với thư mục thì quyền execute chính là quyền để list thư mục đó.

Quyền mặc định của file/thư mục sau khi đã bị umask ảnh hưởng được tính như sau:

Base permission AND (NOT umask)

Ví dụ: quyền mặc định của thư mục là 777, umask là 002, khi đó quyền của thư mục khi mới được tạo ra là:

Umask: 000 000 010
NOT:   111 111 101
AND
            111 111 111
         ------------------
            111 111 101
        ------------------
             7      7      5
Như vậy quyền đối với thư mục mới được tạo ra là 775.


3.Tính toán umask 

Với phép tính trên ta có thể tính toán được umask sau khi đã có yêu cầu về việc phân quyền. Tương ứng với các giá trị octal như sau:

0 : read, write and execute
1 : read and write
2 : read and execute
3 : read only
4 : write and execute
5 : write only
6 : execute only
7 : no permissions

Ví dụ, với thư mục mới tạo ra, không cho group và others có bất cứ quyền gì đối với thư mục, ta có thể sử dụng bảng trên để truy ra umask

Owner: full         0
Group: nothing 7
Others:nothing 7

Như vậy, giá trị umask sẽ là 077.

[cuong@F16 check]$ umask
0077
[cuong@F16 check]$ mkdir new
[cuong@F16 check]$ touch newfile
[cuong@F16 check]$ ll
total 4
drwx------. 2 cuong cuong 4096 Dec  3 11:34 new
-rw-------. 1 cuong cuong    0 Dec  3 11:34 newfile


4.Sticky bit

Sticky bit là một flag dùng để xác định quyền truy cập đối với file/thư mục. 
Một thư mục được thiết lập sticky bit có nghĩa là chỉ có owner và superuser mới có thể xóa các files trong thư mục đó. Các user khác không có quyền xóa mặc cho việc phân quyền đối với user thế nào. 

[Guest@F16 test]$ ll
total 0
-rw-rw-r--. 1 newuser Guest 0 Dec  3 11:50 afile
-rw-rw-r--. 1 newuser Guest 0 Dec  3 11:50 bfile
-rw-rw-r--. 1 Guest   Guest 0 Dec  3 11:48 dfile

[Guest@F16 test]$ id
uid=1001(Guest) gid=1001(Guest) groups=1001(Guest) context=unconfined_u:unconfined_r:unconfined_t:s0-s0:c0.c1023

[Guest@F16 test]$ rm afile 
rm: cannot remove `afile': Operation not permitted <--Ko cho phép Guest xóa file của newuser.

[Guest@F16 test]$ rm bfile 
rm: cannot remove `bfile': Operation not permitted

[Guest@F16 test]$ su newuser
Password: 

[newuser@F16 test]$ id
uid=1002(newuser) gid=1001(Guest) groups=1001(Guest) context=unconfined_u:unconfined_r:unconfined_t:s0-s0:c0.c1023

[newuser@F16 test]$ rm afile <-- newuser xóa file của chính mình 
[newuser@F16 test]$ rm dfile 
rm: cannot remove `dfile': Operation not permitted <-- ko cho phép xóa file của Guest