Tìm hiểu truy cập hệ thống.
1.Session
1.1.Session là gì?
Session hay phiên trong Linux thường để chỉ một shell session, là một kết nối từ một người dùng đến một shell của một hệ thống. Shell là một chương trình giúp giao tiếp giữa người dùng và kernel. Thường khi một terminal được mở thì đồng nghĩa là một session được mở. Systemd sử dụng cgroups để theo dõi những tiến trình của một session tạo ra.
1.2.tty vs pts vs :0
- tty: Là môi trường nhập xuất văn bản, trong Linux nó có thể là bất kỳ terminal hay bất kỳ serial port, console mà kết nối trực tiếp đến hệ thống nào.
- pts: Là một phiên đăng nhập bởi terminal được giả lập từ các trương trình khác(như xterm, ssh, telnet)
- :0: Là phiên đăng nhập đồ họa.
1.3.Interactive and Non-interactive shell
- Interactive shell: là shell mà có sự tương tác với người dùng thông qua bàn phím, màn hình.
- Non-interactive shell: là shell mà các câu lệnh được chạy bởi một chương trình tự động nào đó(như scripts) và không tương tác với người dùng.
2. Remote access with ssh
2.1.SSH là gì?
SSH
(Secure Shell) là một giao thức dùng để thiết lập kêt nối một cách bảo mật và an toàn.
Giao thức này bảo mật vì nó mã hóa dữ liệu và các kết nối của nó được xác thực.
SSH Client (OpenSSH,…) dùng để giao tiếp giữa client với Server có sử dụng các cơ chế mã hóa để đảm bảo tiêu chí an toàn thông tin thay thế cho các phương pháp cũ về trước như Telnet, rlogin,…
/etc/ssh
Trên Linux, ssh client và ssh server đều sử dụng thư mục /etc/ssh/ để lưu các file cấu hình
2.2.Public key and private key.
Giao thức ssh sử dụng hệ thống public and private key
. Sử dụng public và private key
có thể giúp một giao tiếp được mã hóa và xác thực.
Ví dụ:
- A có public key, private key và B có public key của A. Khi A muốn gửi tin nhắn cho B thì A sẽ mã hóa tin nhắn bằng private key của mình và gửi cho B. Vì B có public key của A nên chỉ có B mới nhận được tin nhắn và giải mã tin nhắn bằng public key đó.
- Tương tự khi B gửi lại tin nhắn cho A thì sẽ dùng public key của A để mã hóa. Khi A nhận được tin nhắn sẽ sử dụng private key của mình để giải mã.
2.3. Sử dụng SSH để đăng nhập sử dụng mật khẩu.
Để đăng nhập đến một server sử dụng ssh trên Linux sử dụng lệnh:
ssh <user>@<server>
ví dụ
[root@cen3 ~]# ssh lamth@10.88.88.1
The authenticity of host '10.88.88.1 (10.88.88.1)' can't be established.
ECDSA key fingerprint is SHA256:/aW3guxg6c4erTJA9jTN2Qsvy/1cbG4XQzxUykVk2q4.
ECDSA key fingerprint is MD5:78:05:c8:26:ea:29:c3:4a:d4:a2:69:91:9e:eb:5c:91.
Are you sure you want to continue connecting (yes/no)? yes
Warning: Permanently added '10.88.88.1' (ECDSA) to the list of known hosts.
lamth@10.88.88.1's password:
Last login: Fri Jun 21 09:22:21 2019 from 10.88.88.30
lamth@m4700:~$ ^C
Đăng xuất khỏi remote server sử dụng lệnh exit
hoặc sử dụng Ctrl+d
[root@cen3 ~]# ssh lamth@10.88.88.1
lamth@10.88.88.1's password:
lamth@m4700:~$
lamth@m4700:~$ exit
logout
Connection to 10.88.88.1 closed.
[root@cen3 ~]#
scp
Lệnh scp
cũng giống như lệnh cp
nhưng nó có thể copy giữa các host khác nhau thông qua giao thức ssh.
2.4. Thiết lập đăng nhập không sử dụng mật khẩu
Để thiết lập xác thực không mật khẩu bằng public và private key, sử dụng ssh-keygen
để tạo bộ key, sau đó copy public key của bạn đến server muốn remote.
ssh-keygen
Khi chạy lệnh ssh-keygen
, nó sẽ tạo ra một cặp key. Tùy chọn -t để chọn phương thức mã hóa.
Ví dụ:
[root@cen3 ~]# ssh-keygen -t rsa
Generating public/private rsa key pair.
Enter file in which to save the key (/root/.ssh/id_rsa):
Enter passphrase (empty for no passphrase):
Enter same passphrase again:
Your identification has been saved in /root/.ssh/id_rsa.
Your public key has been saved in /root/.ssh/id_rsa.pub.
The key fingerprint is:
SHA256:YNen9hZXtp6TYihQ5TpFhUuCnr90KmAEKVAhfMwbrPU root@cen3
The key's randomart image is:
+---[RSA 2048]----+
|=.*.. . oo. |
| + X . o+o |
| = = + o.+oo o|
| . . E =. o+ o.|
| . .Soo . .. |
| o .+.o.o. o|
| . . ..+.oo = |
| . o... . .|
| . |
+----[SHA256]-----+
Khi chạy xong lệnh , cặp key mới tạo sẽ nằm trong thư mục ~/.ssh/id_rsa. (private key sử dụng rsa) và ~/.ssh/id_rsa.pub. (public key sử dụng rsa).
[root@cen3 ~]# ls -l .ssh
total 16
-rw-------. 1 root root 1679 00:03 21 Th06 id_rsa
-rw-r--r--. 1 root root 391 00:03 21 Th06 id_rsa.pub
Sau khi có cặp key, tiến hành copy public key tới file ~/.ssh/authorized trên server muốn đăng nhập sử dụng scp
.
Ví dụ:
[root@cen3 ~]# scp ~/.ssh/id_rsa.pub lamth@10.88.88.1:~/.ssh/authorized_keys
lamth@10.88.88.1's password:
id_rsa.pub 100% 391 270.0KB/s 00:00
[root@cen3 ~]#
Sau đó có thể đăng nhập đến server đó mà không cần password:
[root@cen3 ~]# ssh lamth@10.88.88.1
lamth@m4700:~$
2.5. X forwarding via ssh
SSH có một tính năng phổ biến là X11 forwarding để bật các phần mềm đồ họa bằng cách sử dụng ssh -X
, cần xác định biến DISPLAY để nó có thể biết chạy phần mềm đồ họa trên màn hình nào.
Cách Enable:
- Cài đặt các package cần thiết.
yum install -y xorg-x11-server-Xorg xorg-x11-xauth xorg-x11-apps
- Chỉnh sửa file
/etc/ssh/sshd_config
với cấu hình:X11Forwarding yes
- Khởi động lại dịch vụ sshd:
systemctl restart sshd
Ví dụ: ``` [root@cen3 ~]# ssh -X lamth@10.88.88.1
Last login: Fri Jun 21 13:48:42 2019 from 10.88.88.30 lamth@m4700:~$ thunderbird Error: no DISPLAY environment variable specified lamth@m4700:~$ export DISPLAY=:0.0 lamth@m4700:~$ thunderbird
## 3. SELinux
**SELinux(Secure-Enhanced Linux)** là một kiến trúc bảo mật được tích hợp vào Linux kernel, do đó nó có ở mọi hệ thống phát triển dự trên Linux từ mobile, Desktop, Server. **SELinux** là một sự án của cơ qua An ninh Quốc Gia Mỹ (NSA) và cộng đồng phát triển SELinux.
**SELinux** cung cấp một hệ thống MAC(Mandatory Address Control-Kiểm soát truy cập bắt buộc) trong nhân Linux. Nó xác định cách mà tất cả các tiến trình có thể tương tác với các phần khác của hệ thống như: pipe, file, network port, socket, thư mục, process khác.
SELinux có 3 chế độ hoạt động cơ bản:
- **Enforcing**: Chế độ mặc định sẽ cho phép và thực thi chính sách bảo mật SELinux trên hệ thống, từ chối các hành động truy cập và ghi log tại /var/log/audit/audit.log.
- **Permissive**: Trong chế độ Permissive, SELinux được kích hoạt nhưng sẽ không thực thi chính sách bảo mật, chỉ cảnh báo và ghi lại các hành động tại /var/log/audit/audit.log. Chế độ Permissive hữu ích cho việc khắc phục sự cố
- **Disabled**: SELinux bị vô hiệu hóa.
Kiểm tra SELinux đang ở chế độ nào: `sestatus`
```bash
[root@cen3 ~]# sestatus
SELinux status: enabled
SELinuxfs mount: /sys/fs/selinux
SELinux root directory: /etc/selinux
Loaded policy name: targeted
Current mode: permissive
Mode from config file: error (Success)
Policy MLS status: enabled
Policy deny_unknown status: allowed
Max kernel policy version: 31
[root@cen3 ~]#
Vô hiệu hóa SELinux
- Vô hiệu hóa tạm thời:
setenforce 0
- Vô hiệu hóa vĩnh viễn: Sửa file /etc/selinux/config với giá trị
SELINUX=disable