Thursday, December 24, 2020

AWS Api Gateway & Lambda

1. Create lambda function

    - add header "Access-Controll-Allow-Orgin: '*'" in response.

2. Create new api gateway

3. Create Resource

    - Enable API Gateway CORS: tick

4. Create Method

    - Integration Type: lambda function

    - Use Lambda Proxy Integration: tick

    - Lambda Function: enter lambda function name

    - Save

5. Mapping Template

{
  "method": "$context.httpMethod",
  "body" : $input.json('$'),
  "headers": {
    #foreach($param in $input.params().header.keySet())
    "$param": "$util.escapeJavaScript($input.params().header.get($param))" #if($foreach.hasNext),#end

    #end
  },
  "queryParams": {
    #foreach($param in $input.params().querystring.keySet())
    "$param": "$util.escapeJavaScript($input.params().querystring.get($param))" #if($foreach.hasNext),#end

    #end
  },
  "pathParams": {
    #foreach($param in $input.params().path.keySet())
    "$param": "$util.escapeJavaScript($input.params().path.get($param))" #if($foreach.hasNext),#end

    #end
  }  
}

Sunday, November 29, 2020

Shouldn’t Use OFFSET and LIMIT For Your Pagination

This is what you should use: 

"Select column1, column2, ..., columnN from table where IDX > 1000 limit 20

Why? Because by explicitly passing the latest read row, you are telling your DB exactly where to start the search base on an efficient indexed key and won't have consider any rows outside of the range.

https://medium.com/swlh/why-you-shouldnt-use-offset-and-limit-for-your-pagination-4440e421ba87 

Monday, September 28, 2020

Vì sao emails gửi đi lại bị đánh dấu là spam.

 Vừa rồi tôi có setup 1 hệ thống mail server cho công ty dùng để test. Tuy nhiên, việc gửi đến các địa chỉ mail như gmail, hotmail, yahoo đều bị đánh dấu spam, thậm chí khi gửi mail từ địa chỉ khác vào mail server này thì không thấy nhận được.

 Sau nửa ngày tìm hiểu thì đã giải quyết được vấn đề, lý do là thiếu thông tin chứng thực về địa chỉ mail này, đó là DomainKeys Identified Mail (DKIM) và Sender Policy Framework (SPF)

DKIM là chuẩn cho phép người gửi sử dụng chữ ký số ký vào mail của họ. Sau đó mail server sẽ sử dụng chữ ký này để đảm bảo nội dung không bị thay đổi trong quá trình gửi bởi một bên thứ ba nào đó. Xem cách cấu hình DKIM ở đây

SPF là chuẩn thẩm định email được thiết kế để ngăn chặn email giả. Cấu hình DNS với SPF sẽ nói cho mail server khác biết mail server này đã được cho phép gửi email. Xem cách cấu hình SPF ở đây 


Thursday, September 3, 2020

Postfix

1. add into /etc/postfix/main.cf file;

relayhost = [domain.com]:25

smtp_sasl_auth_enable = no

smtp_sasl_password_maps = hash:/etc/postfix/sasl/sasl_passwd

smtp_sasl_security_options = noanonymous

smtp_tls_CAfile = /etc/postfix/cacert.pem

smtp_use_tls = yes

save and close

2. add login credentials into /etc/postfix/sasl/sasl_passwd

domain.com email@domain.com:password

save and close

3. create hash database from sasl_passwd file

sudo postmap sasl_passwd

sudo chmod 640 /etc/postfix/sasl/sasl_passwd

sudo chmod 640 /etc/postfix/sasl/sasl_passwd.db

4. test send mail.

echo "Tested" | mailx -r email@domain.com -s "Testing Gmail Relay2" email2@domain.com


5. Tips:

http://www.postfix.org/TUNING_README.html#mailing_tips

https://wiki.deimos.fr/Postfix:_limit_outgoing_mail_throttling

https://www.howtoforge.com/community/threads/limit-outgoing-number-of-messages-in-postfix.41131/



Saturday, August 22, 2020

Nếu con xem sex

 Hôm nay bố viết cho con lá thư đầu tiên vì muốn có một cuộc nói chuyện giữa những người đàn ông với nhau.


Đầu tiên xin chúc mừng con trai, con đã lớn và không còn là cậu bé như bố vẫn hình dung nữa. Mặc dù trước đó bố luôn nghĩ con vẫn còn là một đứa trẻ, nhưng thực sự con đã bước vào tuổi dậy thì và tò mò về một số điều chưa biết. Điều này khiến bố vừa vui mừng, vừa lo lắng.


Mừng vì con đã lớn rồi. Tuổi mới lớn tò mò nam nữ là chuyện thường, không tò mò mới là bất thường.


Nhưng lo là liệu con có thể vượt qua giai đoạn tăng trưởng này một cách an toàn và khỏe mạnh không? Đừng xấu hổ, bố cũng từng trải qua thời kỳ như con, vì vậy bố có thể hiểu con rất nhiều.


Mọi người khi bước vào tuổi dậy thì, do sự phát triển thể chất sẽ tò mò tìm hiểu kiến thức giới tính, đây là phản ứng tâm lý bình thường.


Tuy nhiên không nên vào các trang web khiêu dâm để lấy kiến thức tình dục. Một là khả năng nhận thức và phán đoán của con vẫn chưa phát triển hoàn thiện. Con dễ bị đánh lừa bởi những thông tin sai lệch, điều này sẽ gây ra áp lực tâm lý nhất định.


Con phải biết rằng kiến thức về tình dục trên các trang web khiêu dâm là không khoa học. Nó chứa đựng một mức phóng đại và xuyên tạc nhất định. Điều này sẽ khiến con hiểu lầm.


Thứ hai, khả năng tự chủ của con sẽ không được đảm bảo. Một khi đã nghiện trải nghiệm khoái cảm của tình dục, con sẽ sa đà vào nó khiến tâm trí đầy mâu thuẫn và đau đớn.


Một số người tìm những video này để giải tỏa tâm lý trống trải hoặc trút bỏ áp lực học tập. Tuy nhiên sau khi giải tỏa được, họ sẽ hối hận, thậm chí tự trách về hành động của mình.


Những điều này rất bất lợi cho sự phát triển thể chất và tinh thần của con. Vì vậy khi bối rối về tình dục, con có thể tìm một số kênh tham khảo hợp lý. Ví dụ hãy hỏi bố. Bố là một người đàn ông và là người đáng để con tin tưởng.


Ví dụ khác, hãy tìm câu trả lời từ những cuốn sách liên quan. Những cuốn sách về tâm sinh lý tuổi dậy thì mà bố tặng con trước đây là một kho báu rất tốt đó!


Bố muốn nói với con một vài điểm như sau:


1. Tình dục giống như ăn và thở, cũng không phải là thứ bẩn thỉu, đó là bản năng của con người và không đáng để tò mò quá mức.


Bố cũng đến từ thời niên thiếu, cũng từng tò mò về kiến thức giới tính. Thời điểm đó chưa có internet, bố bí mật vào phòng xem phim khiêu dâm với các bạn nam khác.


Lần đầu được xem, bố cũng rất phấn khích và không kìm được... Tuy nhiên sau khi xem vài lần, bố cảm thấy vô nghĩa và buồn tẻ.


Học lực của bố sa sút trông thấy. Sau này bố đã kịp thời điều chỉnh bản thân, dồn hết tâm trí vào việc học và không bao giờ nghĩ đến những hình ảnh đó nữa.


Nhưng không phải ai cũng như bố. Một bạn nam trong lớp, người cùng xem những bộ phim khiêu dâm đó đã "ăn trái cấm" với một bạn nữ. Và sau đó cô gái có thai.


Hai người họ cuối cùng đều bỏ học vì xấu hổ và cô gái được đưa đến bệnh viện để phá thai.


Vì sự thiếu hiểu biết và mê muội về tình dục, hai đứa trẻ đã phạm phải những sai lầm khiến họ phải ân hận suốt đời.


Tò mò nhất thời, đánh mất tương lai, rối tung cả đời.


Con có nghĩ rằng đó là giá trị của việc xem phim khiêu dâm?


2. Quan hệ nam nữ là bình thường, nhưng không được quan hệ tình dục với trẻ em gái vị thành niên.

Vì lúc này tâm sinh lý, kinh nghiệm xã hội, điều kiện kinh tế... của các con còn non nớt, chưa thể gánh chịu hậu quả của việc quan hệ tình dục.

Khi cảm thấy mình có xung động tình dục, con nên chuyển hướng chú ý ngay lập tức như chơi bóng, nghe nhạc, đọc sách, ... để các xung động vật lý được chuyển tải và giải phóng.

Hãy nhớ rằng quan hệ nam nữ chỉ nên xảy ra khi họ đã trên 18 tuổi.

3. Hạnh phúc thực sự dựa trên một cuộc sống ổn định và tình yêu tận tâm.

Các con còn nhỏ tuổi nên chưa thích hợp để yêu như người lớn.

Yêu sớm có hại, vì vậy con phải học cách bảo vệ mình và người khác, từ chối những lời dụ dỗ xấu và đối xử khôn ngoan.

4. Con à, tuổi mới lớn là thời kỳ trưởng thành quan trọng của con người. Trong thời kỳ này, tâm lý con người phải hoàn thành một bước chuyển biến rất lớn từ thời thơ ấu đến khi trưởng thành.

Trong lúc đó phải đề cao cảnh giác và kiềm chế, đề phòng tình dục mê muội. Đừng bao giờ sa đà, kẻo làm chuyện phiếm khiến cả đời ân hận.

Con cần có tầm nhìn dài hạn, thời học sinh phải xác định rõ mục tiêu của mình, tập trung nhiều hơn vào việc học, trau dồi năng lực và phẩm chất toàn diện của bản thân, vào các hoạt động tập thể khác nhau.

Khi con trưởng thành, có khả năng giải quyết các vấn đề cá nhân, con có thể chuẩn bị cho việc lựa chọn vợ trong tương lai và kết hôn.

Con à, cuối cùng bố muốn nói "Bố xin lỗi con", bố đã dùng cớ "bận" để bỏ qua sự trưởng thành của con và không hoàn thành trách nhiệm giáo dục.

Trong tương lai, bố sẽ đồng hành cùng con nhiều hơn và cùng con đối mặt với những khó khăn mới.

Bố cũng tin rằng con trai bố có thể sống tốt qua giai đoạn khủng hoảng này.

Hãy nhớ rằng, bảo vệ bản thân và tôn trọng phụ nữ sẽ là một chủ đề mới trong cuộc sống của con.

Chúc con sớm trưởng thành!

Yêu con".







https://vnexpress.net/12h-dem-phat-hien-con-trai-xem-phim-khieu-dam-4148458.html

Wednesday, July 29, 2020

Linux Sticky Bit Concept Explained with Examples

Linux permissions are a concept that every user becomes intimately familiar with early on in their development. We need to execute scripts, modify files, and run processes in order to administer systems effectively, but what happens when we see Permission denied? Do you know why we see this message? If you know the cause of the problem, do you know how to implement the solution?

I will give a quick explanation of the various ways to calculate permissions, and then we will focus on the special permissions within Linux. If you want an in-depth look at the chmod command, check out this article from Sudoer Shashank Hegde, Linux permissions: An introduction to chmod.

The TL;DR is that there are two main ways of assigning permissions.

Symbolic method

The symbolic method uses the following syntax:

[tcarrigan@server ~]$ chmod WhoWhatWhich file | directory

Where:

  • Who - represents identities: u,g,o,a (user, group, other, all)
  • What - represents actions: +, -, = (add, remove, set exact)
  • Which - represents access levels: r, w, x (read, write, execute)

An example of this is if I want to add the read and write permissions to a file named test.txt for user and group, I use the following command:

[tcarrigan@server ~]$ chmod ug+rw test.txt

Full disclosure, this is not my preferred method of assigning permissions, and if you would like more information around this method, I recommend your nearest search engine.

Numeric method

The numeric method is, in my experience, the best way to learn and practice permissions. It is based on the following syntax:

[tcarrigan@server ~]$ chmod ### file | directory

Here, from left to right, the character # represents an access level. There are three access levels—user, group, and others. To determine what each digit is, we use the following:

  • Start at 0
  • If the read permission should be set, add 4
  • If the write permission should be set, add 2
  • If the execute permission should be set, add 1

This is calculated on a per access level basis. Let's interpret this permissions example:

-rw-r-x---

The permissions are represented as 650. How did I arrive at those numbers?

  • The user's permissions are: rw- or 4+2=6
  • The group's permissions are: r-x or 4+1=5
  • The others's permissions are: --- or 0

To put this into the command syntax, it looks like this:

[tcarrigan@server ~]$ chmod 650 test.txt

Now that you understand the basics of permission calculation in Linux, let's look at the special permissions included in the OS.

Special permission explained

Special permissions make up a fourth access level in addition to usergroup, and other. Special permissions allow for additional privileges over the standard permission sets (as the name suggests). There is a special permission option for each access level discussed previously. Let's take a look at each one individually, beginning with Set UID:

user + s (pecial)

Commonly noted as SUID, the special permission for the user access level has a single function: A file with SUID always executes as the user who owns the file, regardless of the user passing the command. If the file owner doesn't have execute permissions, then use an uppercase S here.

Now, to see this in a practical light, let's look at the /usr/bin/passwd command. This command, by default, has the SUID permission set:

[tcarrigan@server ~]$ ls -l /usr/bin/passwd 
-rwsr-xr-x. 1 root root 33544 Dec 13  2019 /usr/bin/passwd

Note the s where x would usually indicate execute permissions for the user.

group + s (pecial)

Commonly noted as SGID, this special permission has a couple of functions:

  • If set on a file, it allows the file to be executed as the group that owns the file (similar to SUID)
  • If set on a directory, any files created in the directory will have their group ownership set to that of the directory owner
[tcarrigan@server article_submissions]$ ls -l 
total 0
drwxrws---. 2 tcarrigan tcarrigan  69 Apr  7 11:31 my_articles

This permission set is noted by a lowercase s where the x would normally indicate execute privileges for the group. It is also especially useful for directories that are often used in collaborative efforts between members of a group. Any member of the group can access any new file. This applies to the execution of files, as well. SGID is very powerful when utilized properly.

As noted previously for SUID, if the owning group does not have execute permissions, then an uppercase S is used.

other + t (sticky)

The last special permission has been dubbed the "sticky bit." This permission does not affect individual files. However, at the directory level, it restricts file deletion. Only the owner (and root) of a file can remove the file within that directory. A common example of this is the /tmp directory:

[tcarrigan@server article_submissions]$ ls -ld /tmp/
drwxrwxrwt. 15 root root 4096 Sep 22 15:28 /tmp/

The permission set is noted by the lowercase t, where the x would normally indicate the execute privilege.

Setting special permissions

To set special permissions on a file or directory, you can utilize either of the two methods outlined for standard permissions above: Symbolic or numerical.

Let's assume that we want to set SGID on the directory community_content.

To do this using the symbolic method, we do the following:

[tcarrigan@server article_submissions]$ chmod g+s community_content/

Using the numerical method, we need to pass a fourth, preceding digit in our chmod command. The digit used is calculated similarly to the standard permission digits:

  • Start at 0
  • SUID = 4
  • SGID = 2
  • Sticky = 1

The syntax is:

[tcarrigan@server ~]$ chmod X### file | directory

Where is the special permissions digit.

Here is the command to set SGID on community_content using the numerical method:

[tcarrigan@server article_submissions]$ chmod 2770 community_content/
[tcarrigan@server article_submissions]$ ls -ld community_content/
drwxrws---. 2 tcarrigan tcarrigan 113 Apr  7 11:32 community_content/

Summary

In closing, permissions are fundamentally important to being an effective Linux administrator. There are two defined ways to set permissions using the chmod command: Symbolic and numerical. We examined the syntax and calculations required for both methods. We also considered the special permissions and their role in the system. Now that you understand permissions and the underlying concepts, you can solve the ever-annoying Permission denied error when it tries to impede your work.