TungNT (Blue)

tungnt.blue@gmail.com

User Tools

Site Tools


development:system:ubuntu

Kiểm tra thông tin VPS

Xem thông tin tài nguyên hệ thống

$ top
top - 05:48:46 up  4:14,  2 users,  load average: 0.00, 0.00, 0.00
Tasks:  99 total,   1 running,  57 sleeping,   0 stopped,   0 zombie
%Cpu(s):  0.0 us,  0.5 sy,  0.0 ni, 99.3 id,  0.2 wa,  0.0 hi,  0.0 si,  0.0 st
KiB Mem :  2040732 total,  1440384 free,    95776 used,   504572 buff/cache
KiB Swap:        0 total,        0 free,        0 used.  1793516 avail Mem 

  PID USER      PR  NI    VIRT    RES    SHR S  %CPU %MEM     TIME+ COMMAND                                                                                                                           
 4443 tungnt    20   0   44576   3844   3200 R   0.5  0.2   0:00.06 top                                                                                                                               
    1 root      20   0   77808   8588   6360 S   0.0  0.4   0:03.37 systemd                                                                                                                           
    2 root      20   0       0      0      0 S   0.0  0.0   0:00.00 kthreadd                                                                                                                          
    4 root       0 -20       0      0      0 I   0.0  0.0   0:00.00 kworker/0:0H                                                                                                                      
    6 root       0 -20       0      0      0 I   0.0  0.0   0:00.00 mm_percpu_wq    
$ htop

Xem thông tin hệ điều hành

$ cat /etc/*release

Xem thông tin bộ nhớ RAM

$ free -m

Xem thông tin CPU

$ cat /proc/cpuinfo

Xem thông tin ổ cứng

$ df -h
$ du -sh /srv/www/
$ du -sh /srv/www/* | sort -h

Xem danh sách những ip đang kết nối đến server

Kiểm tra xem có IP nào đó đang cố gắng tạo nhiều kết nối để làm chậm server mình hay không bằng lệnh:

$ netstat -anp | grep 'tcp \|udp' | awk '{print $5}' | cut -d: -f1 | sort | uniq -c | sort -n

Kiểm tra xem IP nào đang kết nối nhiều nhất, thông thường với hệ thống nhỏ thì 100 kết nối được xem là đột biết còn với server lớn thì khoảng 300 kết nối. Nếu server của bạn là VPS thì khoảng gần 100 kết nối là được xem là nhiều. Giả sử tôi thấy được IP 74.125.128.94 đang chiếm giữ nhiều kết nối thì việc cần thực hiện trước mắt là chặn IP này lại bằng lệnh:

$ iptables -I INPUT -s 74.125.128.94 -j DROP

$ service iptables save

Xem thông tin source list

$ cd /etc/apt/sources.list

Xem file chạy của một lệnh

$ which git #/usr/bin/git

Quản lý Group, User

Kiểm tra tài khoản đang đăng nhập trên hệ thống

$ whoami
tungnt

Xem danh sách user trên hệ thống

$ cat /etc/passwd
root:x:0:0:root:/root:/bin/bash
daemon:x:1:1:daemon:/usr/sbin:/usr/sbin/nologin
bin:x:2:2:bin:/bin:/usr/sbin/nologin
tungnt:x:1000:1000:Ubuntu:/home/servertu:/bin/bash

Xem danh sách Group của User

$ groups www-data
www-data : www-data

Quản lý Group

# Add group
$ groupadd dev

# Del group
$ groupdel dev

# List all group
$ cat /etc/group

$ groups 
dev
$ sudo groups
root

# Check ID of Group, User
$ id dev
uid=1002(dev) gid=1001(dev) groups=1001(dev)

Quản lý User

$ useradd tungnt -c 'Nguyen Thanh Tung' -m -g dev 
$ passwd tungnt
Enter new UNIX password: 
Retype new UNIX password: 
passwd: password updated successfully
$ cat /etc/passwd
tungnt:x:1001:1001:Nguyen Thanh Tung:/home/tungnt:/bin/sh

Update quyền sử dụng dòng lệnh cho user:

tungnt:x:1001:1001:Nguyen Thanh Tung:/home/tungnt:/bin/bash

Cho phép ssh vào tài khoản:

vim /etc/ssh/sshd_config

> AllowUsers tungnt dev bayer

sudo service ssh reload

Gán full quyền cho user:

Dùng lệnh visudo, thêm dòng tungnt ALL=(ALL:ALL) ALL dưới root ALL=(ALL:ALL) ALL.

$ visudo
tungnt    ALL=(ALL:ALL) ALL

Add User vào Group:

$ usermod tungnt -g business #chuyen tungnt vao nhom business
$ usermod -a -G business tungnt #chuyen tungnt vao nhom business nhung van giu trong nhom dev

Xoá user:

$ userdel tungnt

Phân quyền tập tin và thư mục trên Linux

Cấu trúc của một tập tin, thư mục

Chúng ta sẽ cùng xem cấu trúc của một tập tin, thư mục, chúng ta gõ lệnh sau:

$ ls -la

Ý nghĩa của từng chỉ số:

-rw-r--r--     1     root   root     0 Mar  6 21:04 .autofsck
-rw-r--r--     1     root   root     0 Dec  2 11:41 .autorelabel
dr-xr-xr-x.    2     root   root  4096 Mar  6 21:06 bin
dr-xr-xr-x.    4     root   root  4096 Dec  2 11:38 boot
__________________________________________
^ ^  ^  ^      ^      ^      ^    ^      ^-- Ngày tháng tạo ra file và tên file
| |  |  |      |      |      |    |
| |  |  |      |      |      |    \--- Dung lượng của file/folder
| |  |  |      |      |      \-------- Tên group sở hữu
| |  |  |      |      \--------------- Tên user sở hữu
| |  |  |      \---------------------- Hard link, thể hiện nhiều file hoặc thư mục có cùng sử dụng chung inode
| |  |  |
| \--\--\----------------------------- Các chỉ số phân quyền
\------------------------------------- Loại file (chữ d nghĩa là thư mục)

Phân quyền cho tập tin và thư mục

Linux có 3 quyền cơ bản của 1 user và group đó là:

  • r (read) – quyền đọc file/folder
  • w (write) – quyền ghi/sửa nội dung file/folder
  • x (execute) – quyền thực thi (truy cập) thư mục. Đối với thư mục thì bạn cần phải có quyền execute thì mới dùng lệnh cd để truy cập vào được
  • – (Deny) – Không có quyền

Các quyền này cũng được đánh số nhất định:

  • r (read) – được biểu diễn bằng số 4.
  • w (write) – được biểu diễn bằng số 2.
  • x (execute) – được biểu diễn bằng số 1.
  • – (Deny) – được biểu diễn bằng số 0

Cấu trúc chỉ số phân quyền:

  • owner: Quyền của user mà chủ sở hữu của file này.
  • group: Quyền của những users thuộc group mà chủ sở hữu của file này.
  • other: Quyền của tất cả các user khác trên máy.

Để có thể thay đổi các chỉ số phân quyền này ta sẽ dử dụng lệnh chmod:

$ chmod  <tùy chọn> <chỉ số phân quyền> <tên tập tin/thư mục>

Các tùy chọn:

  • -v : Hiển thị báo cáo sau khi chạy lệnh, mỗi lần đổi quyền là hiển thị một lần
  • -c : Giống như trên, nhưng chỉ hiện khi nó đã làm xong tất cả.
  • -R : Áp dụng luôn vào các file/folder nằm bên trong folder được phân quyền (chỉ áp dụng cho thư mục)

Ví dụ:

# chmod 777 test1 <Cấp quyền truy cập đầy đủ cho mọi đối tượng người dùng.>
# chmod 775 test1 <Cấp quyền truy cập đầy đủ cho chủ hệ thống và nhóm quản trị, đối tượng người dùng chỉ có quyền đọc (read) và chạy (execute) file.>
# chmod 755 test1 <Cấp quyền truy cập đầy đủ cho chủ hệ thống, chỉ cho phép nhóm quản trị và đối tượng người dùng đọc và chạy các file trong thư mục.>
# chmod 700 test1 <Chỉ cấp quyền truy cập đầy đủ cho chủ hệ thống và chặn truy cập với mọi đối tượng khác.>
# chmod 500 test1 <Không cho phép nhóm quản trị và người dùng truy cập vào file trong thư mục, đồng thời giới hạn quyền chủ hệ thống chỉ đọc và chạy để tránh xóa và thay đổi các file trong thư mục này.>
# chmod 660 test1 <Cho phép chủ hệ thống và nhóm quản trị đọc, sửa, xóa và ghi dữ liệu vào file, nhưng không phân quyền truy cập cho những người dùng khác.>

Thay đổi chủ sở hữu cho tập tin và thư mục

Mặc định tập tin và thư mục đều có user group riêng của nó, nếu muốn thay đổi dùng lệnh chown:

# chown  <tùy chọn> <tên user>:<tên group>  <tên tập tin/thư mục>

Các tùy chọn:

  • -v : Hiển thị báo cáo sau khi chạy lệnh, mỗi lần đổi chủ sở hữu là hiển thị một lần
  • -c : Giống như trên, nhưng chỉ hiện khi nó đã làm xong tất cả.
  • -R : Áp dụng luôn vào các file/folder nằm bên trong folder được đổi chủ (chỉ áp dụng cho thư mục)

Ví dụ:

# chown paste:paste test1   <Thay đổi cả user và group cho test1>
# chown paste test1         <Thay đổi user cho test1>
# chown :paste test1        <Thay đổi group cho test1>

Cấu hình bảo mật VPS

Thay đổi mật khẩu tài khoản root, tạo tài khoản mới để login vào VPS

Đăng nhập tài khoản root, đổi mật khẩu bằng lệnh passwd.

Tạo tài khoản mới và gán quyền như tài khoản root. Xem phần quản lý User, Group.

Thay đổi port ssh mặc định

Tất cả các vps/server khi được tạo đều sử dụng port 22 làm cổng dành cho kết nối SSH, chúng ta thay bằng port khác. Port này có giá trị từ 1025 đến 65536.

$ vim /etc/ssh/sshd_config
#Port 22
#AddressFamily any
#ListenAddress 0.0.0.0
#ListenAddress ::

Port 2200

#LoginGraceTime 2m
#PermitRootLogin prohibit-password
#StrictModes yes
#MaxAuthTries 6
#MaxSessions 10

PermitRootLogin No

#UseDNS no
#PidFile /var/run/sshd.pid
#MaxStartups 10:30:100
#PermitTunnel no
#ChrootDirectory none
#VersionAddendum none

UseDNS no
AllowUsers tungnt

PermitRootLogin: No: Thay đổi này không cho tài khoản root đăng nhập vào VPS nữa. UseDNS no và AllowUsers tungnt: cho user mới được quyền đăng nhập

Sau khi hoàn thành các bước trên reboot lại server.

Lệnh SSH mới:

$ ssh tungnt@ip_vps -p 2200

https://www.cybrosys.com/blog/how-to-setup-sftp-server-on-ubuntu-20-04

Cài đặt ứng dụng

Update phiên bản mới nhất

$ apt-get update

Các ứng dụng cơ bản

$ apt-get install vim htop default-jre default-jdk

Git

Cài đặt:

$ apt-get install git

Nginx

$ apt-get install nginx
$ service nginx status
$ service nginx start 

https://tecadmin.net/install-multiple-php-version-nginx-ubuntu/

MySQL

$ apt-get install mysql-server

Error connecting to MySQL: Can't connect to local MySQL server through socket '/var/lib/mysql/mysql.sock'

1. Kiểm tra sự tồn tại của file mysql.sock

[root@TungNT]# ls -la /var/lib/mysql/mysql.sock
ls: cannot access /var/lib/mysql/mysql.sock: No such file or directory

2. Kiểm tra nếu sự thiết lập ( trong file my.cnf ) đã thay đổi đường dẫn của file mysql.sock .

[root@TungNT]# netstat -lnp | grep mysql
tcp        0      0 0.0.0.0:3306                0.0.0.0:*                   LISTEN      25151/mysqld        
unix  2      [ ACC ]     STREAM     LISTENING     27600272 25151/mysqld        /var/lib/mysql/mysql.sock

3. Kiểm tra sự hoạt động dịch vụ mysql

[root@TungNT]# ps ax | grep mysql
16343 ?        S      0:00 /bin/sh /usr/bin/mysqld_safe --datadir=/var/lib/mysql --pid-file=/var/lib/mysql/tenten.myvps.vn.pid
16653 ?        Sl     2:50 /usr/sbin/mysqld --basedir=/usr --datadir=/var/lib/mysql --plugin-dir=/usr/lib64/mysql/plugin --user=mysql --log-error=/var/lib/mysql/tenten.myvps.vn.err --open-files-limit=8192 --pid-file=/var/lib/mysql/tenten.myvps.vn.pid
19786 pts/1    S+     0:00 grep mysql

4. Khởi động lại dịch vụ mysql nhằm mục đích khởi tạo lại file mysql.sock.

Cách 1:

[root@TungNT ~]# /etc/init.d/mysqld stop
Shutting down MySQL............................ SUCCESS! 
[root@TungNT ~]# /etc/init.d/mysqld start
Starting MySQL.............................. SUCCESS! 
[root@TungNT ~]# ls -la /var/lib/mysql/mysql.sock
srwxrwxrwx 1 mysql mysql 0 Sep 29 10:32 /var/lib/mysql/mysql.sock

Cách 2:

[root@TungNT ~]# killall -9 mysqld mysqld_safe
[root@TungNT ~]# /etc/init.d/mysqld start
Starting MySQL.............................. SUCCESS! 
[root@TungNT ~]# ls -la /var/lib/mysql/mysql.sock
srwxrwxrwx 1 mysql mysql 0 Sep 29 10:32 /var/lib/mysql/mysql.sock

PHP FPM

$ apt-get install software-properties-common python-software-properties
$ add-apt-repository ppa:ondrej/php
$ apt-get update
$ apt-get install php-fpm php-mysql
$ apt-get install php-common php-mbstring php-xml php7.0-gmp php7.0-curl

Kiểm tra thông tin PHP:

$ php -v
$ php --ini
php -m | grep opentelemetry

Cấu hình:

$ vim /etc/php/7.2/fpm/pool.d/www.conf
...
user = www
group = dev
...
listen = 127.0.0.1:9000
...

Cấu hình vitrual host:

server {
        listen 80;

        root /srv/www/domain.com/;

        index index.php;

        server_name domain.com;


        location / {
                try_files $uri $uri/ /index.php?$query_string;
        }

        location ~ \.php$ {
                try_files      $uri = 404;
                fastcgi_pass   127.0.0.1:9000;
                fastcgi_index  index.php;
                fastcgi_param  SCRIPT_FILENAME $document_root$fastcgi_script_name;
                include        fastcgi_params;
        }
}

Install Multiple PHP Versions:

apt-get install software-properties-common gnupg2 -y 
 
add-apt-repository ppa:ondrej/php 
 
apt-get update -y 
 
apt-get install php7.2 php7.2-fpm php7.2-cli -y
apt-get install php7.4 php7.4-fpm php7.4-cli -y
apt-get install php8.0 php8.0-fpm php8.0-cli -y
apt-get install php8.1 php8.1-fpm php8.1-cli -y
 
php --version 
 
# Set the Default PHP Version:
update-alternatives --config php 

Switch Between Multiple PHP Versions with Nginx:

nginx.conf
server {
        listen       80;
 
        server_name  template.1site.vn api-template.1site.vn cms-template.1site.vn;
 
        root       /var/www/1site/template.1site.vn/public/;
 
        index index.php index.html index.htm;
 
        location / {
                try_files $uri $uri/ /index.php?$query_string;
        }
 
        location ~ \.php$ {
                try_files      $uri = 404;
                fastcgi_pass   127.0.0.1:9082;
                fastcgi_index  index.php;
                fastcgi_param  SCRIPT_FILENAME $document_root$fastcgi_script_name;
                include        fastcgi_params;
        }
}

fastcgi_pass 127.0.0.1:9082; ⇒ Version PHP

/opt/homebrew/etc/php/8.2/php-fpm.d/www.conf
...
; The address on which to accept FastCGI requests.
; Valid syntaxes are:
;   'ip.add.re.ss:port'    - to listen on a TCP socket to a specific IPv4 address on
;                            a specific port;
;   '[ip:6:addr:ess]:port' - to listen on a TCP socket to a specific IPv6 address on
;                            a specific port;
;   'port'                 - to listen on a TCP socket to all addresses
;                            (IPv6 and IPv4-mapped) on a specific port;
;   '/path/to/unix/socket' - to listen on a unix socket.
; Note: This value is mandatory.
listen = 127.0.0.1:9082
...

https://help.clouding.io/hc/en-us/articles/360021630059-How-to-Install-Multiple-PHP-Versions-7-2-7-4-8-0-and-8-1-on-Ubuntu-20-04

Supervisor

Cài đặt:

$ apt-get install supervisor

Kiểm tra trạng thái:

$ service supervisor status

Cấu hình:

$ vim /etc/supervisor/conf.d/domain.com.conf
[program:api.9pay.vn-worker]
process_name=%(program_name)s_%(process_num)02d
command=php /path/artisan queue:listen
autostart=true
autorestart=true
user=tungnt
numprocs=10
redirect_stderr=true
stdout_logfile=/path/storage/logs/worker.log

Wget: Download HTML Template Free

wget -r -E -H -k -p -np -e robots=off -P /home/downloadhtmlfree.com -D nhaphangquangchau.vn,bizweb.dktcdn.net http://nhaphangquangchau.vn

wget \
     --recursive \
     --no-clobber \
     --page-requisites \
     --html-extension \
     --convert-links \
     --restrict-file-names=windows \
     --domains astritbublaku.com \
     --no-parent \
         http://astritbublaku.com/demos/albertos
         
wget \
     -e robots=off \
     --recursive \
     --no-clobber \
     --page-requisites \
     --html-extension \
     --convert-links \
     --restrict-file-names=windows \
     --domains demos.themeselection.com \
     --no-parent \
         https://demos.themeselection.com/materio-bootstrap-html-admin-template/html/vertical-menu-template/app-email.html         

Trong đó:

  • recursive: tải xuống toàn bộ trang web.
  • domains website.org: không theo các liên kết bên ngoài website.org.
  • no-parent: không theo các liên kết bên ngoài các hướng dẫn thư mục / html /.
  • page-requisites: nhận tất cả các yếu tố soạn trang (hình ảnh, CSS, v.v.).
  • html-extension: lưu tệp bằng phần mở rộng .html.
  • convert-links: chuyển đổi các liên kết để chúng hoạt động cục bộ, ngoại tuyến.
  • restrict-file-names = windows: sửa đổi tên tập tin để chúng cũng hoạt động trong Windows.
  • no-clobber: không ghi đè lên bất kỳ tệp hiện có nào (được sử dụng trong trường hợp tải xuống bị gián đoạn và tiếp tục).

Lệnh xoá tiến trình

ps aux | grep manage.py
ps -ef | grep "manage.py" | awk '{print $2}'

ps -ef | grep "manage.py" | awk '{print $2}' | xargs kill -9 $2

 Tạo Swap

$ /bin/dd if=/dev/zero of=/var/swap.1 bs=1M count=1024  
1024+0 records in
1024+0 records out
1073741824 bytes (1.1 GB, 1.0 GiB) copied, 9.77543 s, 110 MB/s
$ /sbin/mkswap /var/swap.1
mkswap: /var/swap.1: insecure permissions 0644, 0600 suggested.
Setting up swapspace version 1, size = 1024 MiB (1073737728 bytes)
no label, UUID=61d06055-5c32-49f7-8e1a-0638978c20f3
$ /sbin/swapon /var/swap.1
swapon: /var/swap.1: insecure permissions 0644, 0600 suggested.
$ free -m
              total        used        free      shared  buff/cache   available
Mem:           1992         360          78          13        1554        1441
Swap:          1023           0        1023

SCP

https://linuxize.com/post/how-to-use-scp-command-to-securely-transfer-files/

scp -P 1618 test.zip tungnt@149.28.140.46:/tmp
scp -P 1618 tungnt@149.28.140.46:/tmp/test.tar test.tar

HTTPs

mkcert

https://github.com/FiloSottile/mkcert

tungnt@TungNT Downloads % mkcert local-cms.9x.vn local.9x.vn local-api.9x.vn
Using the local CA at "/Users/tungnt/Library/Application Support/mkcert" ✨

Created a new certificate valid for the following names 📜
 - "local-cms.9x.vn"
 - "local.9x.vn"
 - "local-api.9x.vn"

The certificate is at "./local-cms.9x.vn+2.pem" and the key at "./local-cms.9x.vn+2-key.pem" ✅

Cấu hình nginx:

server {
        listen       443 ssl;

        server_name  local.9x.vn;

        root       /var/www/9x/local.9x.vn/public/;

        index index.php index.html index.htm;

        add_header 'Access-Control-Allow-Origin' "*";
        add_header 'Access-Control-Allow-Methods' 'GET, POST, OPTIONS, DELETE, PUT';
        add_header 'Access-Control-Allow-Credentials' 'true';
        #add_header 'Access-Control-Allow-Headers' 'User-Agent,Keep-Alive,Content-Type';
        add_header 'Access-Control-Allow-Headers' 'DNT,X-CustomHeader,Keep-Alive,User-Agent,X-Requested-With,If-Modified-Since,Cache-Control,Content-Type';

    ssl_certificate     /Users/tungnt/Downloads/local-cms.9x.vn+2.pem;
    ssl_certificate_key /Users/tungnt/Downloads/local-cms.9x.vn+2-key.pem;

    ssl_session_timeout 5m;
    ssl_protocols TLSv1 TLSv1.1 TLSv1.2;
    ssl_ciphers  HIGH:!aNULL:!MD5;
    ssl_prefer_server_ciphers on;

        location / {
                try_files $uri $uri/ /index.php?$query_string;
        }

        location ~ \.php$ {
                try_files      $uri = 404;
                fastcgi_pass   127.0.0.1:9001;
                fastcgi_index  index.php;
                fastcgi_param  SCRIPT_FILENAME $document_root$fastcgi_script_name;
                include        fastcgi_params;
        }
}

certbot

TLS checker

Bash file example

gc
#! /bin/bash
 
MESSAGE="$1"
 
sudo git commit -am "$MESSAGE"

Cron job

Cấu trúc: minute hour day_of_month month day_of_week command_to_run

Trong đó:

  1. minute: 0-59
  2. hour: 0-23
  3. Field Allowed Values
  4. minute 0-59
  5. hour 0-23
  6. day_of_month: 1-31
  7. month: 1-12 or JAN-DEC
  8. day_of_week: 0-6 or SUN-SAT
  9. command_to_run: job

Ví dụ:

30 17 * * 2 curl http://www.google.com

Cài đặt job:

crontab -e
 
# Here are some more examples of how to use cron’s scheduling component:
* * * * * - Run the command every minute.
12 * * * * - Run the command 12 minutes after every hour.
0,15,30,45 * * * * - Run the command every 15 minutes.
*/15 * * * * - Run the command every 15 minutes.
0 4 * * * - Run the command every day at 4:00 AM.
0 4 * * 2-4 - Run the command every Tuesday, Wednesday, and Thursday at 4:00 AM.
20,40 */8 * 7-12 * - Run the command on the 20th and 40th minute of every 8th hour every day of the last 6 months of the year.

Tham khảo: https://www.digitalocean.com/community/tutorials/how-to-use-cron-to-automate-tasks-ubuntu-1804

development/system/ubuntu.txt · Last modified: 2025/01/01 07:51 by tungnt

Donate Powered by PHP Valid HTML5 Valid CSS Driven by DokuWiki