Làm chủ Centos 7 trong 30 ngày - Ngày 2: SELinux (Chiều)
FASTER - STRONGER - SAVER
sales@1hosting.com.vn   0915 54 99 22
Trang Chủ > Kiến thức dịch vụ > Làm chủ Centos 7 >Làm chủ Centos 7 trong 30 ngày – Ngày 2: SELinux (Chiều)

Làm chủ Centos 7 trong 30 ngày – Ngày 2: SELinux (Chiều)

SELinux files and processes

Tiếp nối bài học buổi sáng, buổi chiều chúng ta sẽ đi sâu hơn nữa vào cơ chế kiểm soát truy nhập file và process của SELinux. Hãy nhìn vào chi tiết context của file và cách chúng được định nghĩa trong SELinux. Context trong SELinux là một tập hợp các thông tin liên quan đến bảo mật giúp SELinux xác định các policy kiểm soát truy nhập. Trong Linux, mọi thứ đều có security context nhưng security context khác nhau cho những loại object khác nhau. Ta hiển thị SELinux file context cho một file bằng lệnh sau:

ls -alZ /var/*

Ta được như sau:

drwx------. apache apache system_u:object_r:httpd_cache_t:s0 httpd

Có 4 phần phân cách nhau bới dấu “:”

+ Phần đầu là SELinux user context, được chỉ ra là system_u ở đây là một SELinux user.

+ Phần thứ hai là SELinux roles với object_r

+ Phần thứ ba quan trọng nhất là cái định nghĩa loại file (type of context) và chúng ta hiểu rằng nó thuộc về thư mục của một user

+ Phần thứ tư (s0) cho biết tính chất của file và nó làm việc với MLS

Bây giờ ta sẽ xem SELinux process context sử dụng httpd ta đã cài trước đó.

[root@static var]# systemctl start httpd
[root@static var]# ps -efZ | grep httpd
system_u:system_r:httpd_t:s0 root 2042 1 1 21:43 ? 00:00:00 /usr/sbin/httpd -DFOREGROUND
system_u:system_r:httpd_t:s0 apache 2043 2042 0 21:43 ? 00:00:00 /usr/sbin/httpd -DFOREGROUND
system_u:system_r:httpd_t:s0 apache 2044 2042 0 21:43 ? 00:00:00 /usr/sbin/httpd -DFOREGROUND
system_u:system_r:httpd_t:s0 apache 2045 2042 0 21:43 ? 00:00:00 /usr/sbin/httpd -DFOREGROUND
system_u:system_r:httpd_t:s0 apache 2046 2042 0 21:43 ? 00:00:00 /usr/sbin/httpd -DFOREGROUND
system_u:system_r:httpd_t:s0 apache 2047 2042 0 21:43 ? 00:00:00 /usr/sbin/httpd -DFOREGROUND
unconfined_u:unconfined_r:unconfined_t:s0-s0:c0.c1023 root 2049 1928 0 21:43 pts/0 00:00:00 grep --color=auto httpd

Security context ở đây là:

system_u:system_r:httpd_t:s0

Với  users kí hiệu bởi _u, roles kí hiệu bởi _r, và types kí hiệu bởi _t. 

SELinux users

SELinux user được định nghĩa trong policy được load vào bộ nhớ lúc khởi động và chỉ có một vài user này. Các user thông thường trên Linux sẽ được map vào các SELinux user. Để xem các mapping này, ta dùng lệnh sau:

[root@static var]# semanage login -l

Login Name                SELinux User               MLS/MCS Range                      Service

__default__                unconfined_u              s0-s0:c0.c1023                              *
root                             unconfined_u              s0-s0:c0.c1023                              *
system_u                    system_u                      s0-s0:c0.c1023                            *

Ở đây ta thấy chỉ có user thông thường và root được map vào unconfined_u trong khi đó process và các services được map vào system_u SELinux user. Để xem toàn bộ SELinux user đang có trên hệ thống, ta dùng lệnh sau:

semanage user -l 

và được 

Các user ở đây bao gồm:

 + guest_u: User này không truy nhập vào X Windows system hay netwoking và cũng không thể thực hiện lệnh su hoặc sudo

 + xguest_u: User này có quyền truy nhập vào GUI và network thông qua duy nhất browser

 + user_u: User này có quyền truy nhập vào GUI và network nhưng không sử dụng được su hoặc sudo

 + staff_u:  Giống user_u nhưng có thể sử dụng được su hoặc sudo

 + sysadmin_u: User này gần như có quyền truy nhập tất tả như root.

 + system_u: User này dành cho các system services và không được map vào các account thông thường.

Ứng dụng mớ lý thuyết trên, ta sẽ thực hiện một vài policy trên hệ thống như sau:

1.  Giới hạn sử dụng su hoặc sudo

Bằng cách map 1 user vào một SELinux user đã có sẵn, chẳng hạn admin  như ví dụ sau, ta đã hạn chế admin sử dụng lệnh su hoặc sudo

semanage login -a -s user_u admin

2.  Giới hạn quyền thực thi scripts

Với policy này thì ngoài việc map vào 1 SELinux user không có quyền chạy scripts, ta còn phải giới hạn quyền thực thi scripts trong thư mục của chính user đó

 semanage login -a -s guest_u admin

Kiểm tra thuộc tính sau:

 getsebool allow_guest_exec_content 

Nếu là ON thì ta cần OFF ngay nó như sau:

 setsebool allow_guest_exec_content off 

3. Giới hạn truy nhập vào dịch vụ

Giả sử user admin có quyền dùng sudo để thực thi các tác vụ như stop/start services như httpd. Ta sẽ phải giới hạn việc truy cập này như sau:

semanage login -a -s user_u admin

Sau đó ta verify lại bằng cách chạy lệnh seinfo như sau:

seinfo -uuser_u -x 

ta sẽ thấy:

[root@static ~]# seinfo -uuser_u -x
 user_u
 default level: s0
 range: s0
 roles:
 object_r
 user_r

Kết quả trên cho thấy roles user_u có thể access vào. Thêm 1 bước nữa để xem domain nào user_r được cho phép 

seinfo -ruser_r -x 

Chà, có vẻ rất nhiều đây
[root@static ~]# seinfo -ruser_r -x
user_r
Dominated Roles:
user_r
Types:
abrt_helper_t
alsa_home_t
antivirus_home_t
httpd_user_content_t
httpd_user_htaccess_t
httpd_user_script_t
httpd_user_script_exec_t
httpd_user_rw_content_t
httpd_user_ra_content_t

Ta xem role có thể access  vào domain httpd_t bằng lệnh sau:

 seinfo -ruser_r -x | grep httpd_t 

Không giá trị nào trả về, điều đó có nghĩa là role user_r không được phép đi vào khu vực domain httpd_t và do đó nó không thể start các httpd process hay các daemon.