Nhiệm vụ Linux. Xin chúc mừng những người chiến thắng và cho chúng tôi biết về giải pháp cho các nhiệm vụ

Nhiệm vụ Linux. Xin chúc mừng những người chiến thắng và cho chúng tôi biết về giải pháp cho các nhiệm vụ

Vào ngày 25 tháng XNUMX chúng tôi đã mở đăng ký cho Nhiệm vụ Linux, đây là Trò chơi dành cho những người yêu thích và chuyên gia về hệ điều hành Linux. Một số thống kê: 1117 người đăng ký trò chơi, 317 người trong số họ tìm thấy ít nhất một chìa khóa, 241 người hoàn thành xuất sắc nhiệm vụ của màn đầu tiên, 123 - người thứ hai và 70 người vượt qua màn thứ ba. Hôm nay trò chơi của chúng tôi đã kết thúc và chúng tôi xin chúc mừng những người chiến thắng!

  • Alexander Teldekov chiếm vị trí đầu tiên.
    Alexander tự nhủ rằng mình là nhà quản trị hệ thống tiêu biểu nhất. Sống ở Volgograd, đã quản lý nhiều hệ thống giống Unix khác nhau trong khoảng hai mươi năm. Tôi đã làm việc ở các nhà cung cấp Internet, một ngân hàng và một nhà tích hợp hệ thống. Bây giờ anh ấy làm việc từ xa trong một công ty nhỏ, làm việc về cơ sở hạ tầng đám mây cho một khách hàng lớn nước ngoài. Thích đọc sách và nghe nhạc. Về trò chơi, Alexander nói rằng anh ấy thích toàn bộ trò chơi, anh ấy yêu thích những nhiệm vụ như vậy. Trong một cuộc phỏng vấn tại một trong những công ty, tôi đã làm điều gì đó tương tự như Hackerrank, điều đó thật thú vị.
  • Vị trí thứ hai - Roman Suslov.
    Một cuốn tiểu thuyết từ Moscow. Anh ấy 37 tuổi. Làm kỹ sư Linux/Unix tại Jet Infosystems. Tại nơi làm việc, tôi phải quản trị và khắc phục sự cố hệ thống Linux/Unix + SAN. Sở thích rất đa dạng: hệ thống Linux, lập trình, kỹ thuật đảo ngược, bảo mật thông tin, Arduino. Giới thiệu về trò chơi Roman lưu ý rằng nhìn chung anh ấy thích trò chơi này. “Tôi căng não một chút và thoát khỏi cuộc sống xám xịt của công việc hàng ngày. 🙂 Tôi muốn có nhiều nhiệm vụ hơn, nếu không tôi chưa kịp nếm thử thì trò chơi đã kết thúc rồi ”.
  • Thứ ba - alex3d.
    Alex sống ở Moscow và làm việc trong lĩnh vực phát triển phần mềm. “Cảm ơn bạn vì cuộc thi. Thật thú vị khi kiểm tra kỹ năng google-fu của tôi.”

Ngoài ra trong bảng xếp hạng 10 cầu thủ xuất sắc nhất:

  • Yevgeniy Saldayev
  • Markel Mokhnachevsky
  • Konstantin Konosov
  • Pavel Sergeev
  • Vladimir Bovaev
  • Ivan Bubnov
  • Pavlo Klets

Chúng tôi hiểu rằng có nhiều lựa chọn để giải quyết tất cả các vấn đề của mình; một số giải pháp khả thi được mô tả dưới đây.

1. Giai đoạn đầu

Chúng tôi gọi nó là “Bạn có thực sự là quản trị viên không?”, vì nhiệm vụ khá đơn giản - khắc phục dịch vụ đèn ấm.

1.1. Sự thật thú vị:

Hai người chơi đã tìm được chìa khóa đầu tiên trong 15 phút đầu tiên của trận đấu và trong giờ đầu tiên chúng ta có ba người dẫn đầu đã hoàn thành nhiệm vụ.

1.2. Bài tập

Bạn đến làm việc trong một công ty mà lâu nay không có chuyên gia công nghệ thông tin có năng lực. Trước khi bắt đầu sắp xếp mọi thứ vào trật tự, bạn cần giải quyết vấn đề nóng bỏng đang cản trở công việc của văn phòng.

Cô lao công dùng cây lau nhà vướng vào dây điện của tủ máy chủ. Nguồn điện đã được khôi phục nhưng một trang web rất quan trọng vẫn chưa hoạt động. Trang web này rất quan trọng vì công ty không quan tâm lắm đến vấn đề bảo mật thông tin và trên trang chính của trang này, bạn có thể tìm thấy văn bản rõ ràng mật khẩu quản trị viên cho máy tính của CEO.

Hôm trước đổi mật khẩu mà ai cũng quên mật khẩu mới, giám đốc không làm việc được. Có tin đồn rằng trên chiếc máy này còn có nhiều chìa khóa hơn có thể giúp chúng ta giải mã bản sao lưu tài liệu kế toán.

Mọi người đều mong đợi một giải pháp nhanh chóng cho vấn đề!

1.3. Giải pháp

1. Trước hết, bạn cần thay đổi mật khẩu root trên máy ảo để có thể truy cập vào nó. Khi khởi động, chúng ta nhận thấy đây là Ubuntu 16.04 Server.

Để đặt lại mật khẩu root, chúng ta khởi động lại máy, khi tải, lúc này menu grub hiển thị, chúng ta vào chỉnh sửa mục Ubuntu bằng nút “e”. Chỉnh sửa dòng linux, thêm vào cuối init=/bin/bash. Chúng tôi tải qua Ctrl+x, chúng tôi nhận được một bash. Gắn lại root bằng rw, thay đổi mật khẩu:

$ mount -o remount,rw /dev/mapper/ubuntu--vg-root
$ passwd

Đừng quên đồng bộ hóa, khởi động lại.

2. Tình trạng nói rằng máy chủ web của chúng tôi không hoạt động, hãy xem:

$ curl localhost
Not Found
The requested URL / was not found on this server.
Apache/2.4.18 

Trên thực tế, Apache đang chạy nhưng phản hồi với mã 404. Hãy xem cấu hình:

$ vim /etc/apache2/sites-enabled/000-default.conf

Ở đây cũng có một chiếc chìa khóa - StevenPaulSteveJobs.

Kiểm tra đường dẫn /usr/share/WordPress - Không có chuyện đó nhưng có /usr/share/wordpress. Chỉnh sửa cấu hình và khởi động lại Apache.

$ systemctl restart apache2

3. Thử lại, chúng tôi nhận được lỗi:

Warning: mysqli_real_connect(): (HY000/2002): Connection refused in /usr/share/wordpress/wp-includes/wp-db.php on line 1488

Cơ sở dữ liệu không chạy?

$ systemctl status mysql
Active: active (running)

Có chuyện gì vậy? Chúng ta cần phải tìm ra nó. Để làm điều này, bạn cần có quyền truy cập vào MySQL, như được mô tả trong tài liệu. Một trong những điểm tài liệu khuyên chúng ta nên đăng ký tùy chọn skip-grant-tables в /etc/mysql/mysql.conf.d/mysqld.cnf. Ở đây cũng có một chiếc chìa khóa - AugustaAdaKingByron.

Sửa quyền người dùng 'wp'@'localhost'. Chúng tôi khởi chạy MySQL, làm cho nó có thể truy cập được qua mạng, bình luận tùy chọn trong cấu hình skip-networking.

4. Sau các bước này, máy chủ web khởi động nhưng trang web vẫn không hoạt động vì

Warning: require_once(/usr/share/wordpress/wp-content/themes/twentysixteen/footer.php): failed to open stream: Permission denied in /usr/share/wordpress/wp-includes/template.php on line 562

Chúng tôi chỉnh sửa quyền đối với tập tin.

$ chmod 644 /usr/share/wordpress/wp-content/themes/twentysixteen/footer.php

Chúng tôi làm mới trang, truy cập trang web và tìm chìa khóa - BjarneStroustrup! Chúng tôi đã tìm thấy cả ba chìa khóa, giám đốc của chúng tôi có thể làm việc, chúng tôi đã giải mã được hồ sơ kế toán. Mọi người đều vui vẻ và bạn còn rất nhiều việc phải làm trước mắt để thiết lập cơ sở hạ tầng, sao lưu và bảo mật trong công ty.

2. Giai đoạn thứ hai

Cần phải giải quyết vấn đề thu thập phân tích. Mọi người đều thích phân tích - ai sử dụng nó, ở đâu và với số lượng bao nhiêu. Chúng tôi nghĩ ra một trường hợp mà tất cả các kỹ sư có thể gặp phải dưới hình thức này hay hình thức khác trong cuộc sống.

2.1. Sự thật thú vị

Một trong những người chơi của chúng tôi đã nhập đúng khóa trong vòng 10 phút đầu tiên của trò chơi và trong vòng một giờ đầu tiên, chúng tôi đã có người lãnh đạo hoàn thành nhiệm vụ.

2.2. Bài tập

Bạn đến làm việc tại công ty, các nhà quản lý đến gặp bạn và yêu cầu bạn tìm xem những lá thư được gửi từ Châu Phi cho ai. Chúng ta cần xây dựng 21 địa chỉ người nhận hàng đầu dựa trên chúng. Các chữ cái đầu tiên trong địa chỉ của người nhận là chìa khóa. Một điều: máy chủ thư mà các bức thư được gửi qua đó không tải. Mọi người đều mong đợi một giải pháp nhanh chóng cho vấn đề!

2.3. Giải pháp

1. Máy chủ không khởi động được do phân vùng trao đổi trong fstab không tồn tại, khi tải, hệ thống cố gắn kết nó và gặp sự cố. Làm thế nào để khởi động?

Tải image về, chúng ta tải CentOS 7, boot từ Live CD/DVD (Troubleshooting -> Rescue), mount hệ thống, chỉnh sửa /etc/fstab. Chúng tôi ngay lập tức tìm thấy chìa khóa đầu tiên - GottfriedWilhelm11646Leibniz!

Tạo trao đổi:

$ lvcreate -n swap centos -L 256M
$ sync && reboot

2. Như mọi khi, không có mật khẩu, bạn cần thay đổi mật khẩu root trên máy ảo. Chúng tôi đã làm điều này trong nhiệm vụ đầu tiên. Chúng tôi thay đổi và đăng nhập thành công vào máy chủ, nhưng nó ngay lập tức khởi động lại. Máy chủ bị quá tải với tốc độ đến mức bạn thậm chí không có thời gian để xem xét cẩn thận tất cả nhật ký. Làm thế nào để hiểu những gì đang xảy ra?

Một lần nữa, chúng tôi khởi động từ livecd, nghiên cứu cẩn thận nhật ký hệ thống và đề phòng, xem xét cron, vì tính tuần hoàn như vậy. Ở đó chúng tôi tìm thấy vấn đề và chìa khóa thứ hai - Alan1912MathisonTuring!

Cần trong /etc/crontab xóa hoặc nhận xét dòng echo b > /proc/sysrq-trigger.

3. Sau đó, máy chủ đã tải xong và bạn có thể hoàn thành nhiệm vụ của người quản lý: “Địa chỉ ở Châu Phi là gì?” Thông tin này thường có sẵn cho công chúng. Bạn có thể tìm thấy thông tin này trên Internet bằng cách sử dụng cụm từ “địa chỉ ip Châu Phi”, “cơ sở dữ liệu địa lý”. Để giải quyết vấn đề, bạn có thể sử dụng cơ sở dữ liệu phân phối địa chỉ có sẵn miễn phí (geoip). Chúng tôi đã sử dụng cơ sở dữ liệu làm tiêu chuẩn MaxMind GeoLite2, có sẵn theo giấy phép Creative Commons Ghi công-Chia sẻ tương tự 4.0.

Hãy cố gắng giải quyết vấn đề của chúng ta chỉ bằng cách sử dụng các tiện ích hệ thống Linux, nhưng nhìn chung, nó có thể được giải quyết theo rất nhiều cách: sử dụng các tiện ích lọc văn bản và sử dụng tập lệnh bằng nhiều ngôn ngữ lập trình khác nhau.

Để bắt đầu, chúng ta chỉ cần lấy cặp “IP người gửi-người nhận” từ nhật ký thư /var/log/maillog (chúng ta hãy xây dựng bảng người nhận email - IP người gửi). Điều này có thể được thực hiện bằng lệnh sau:

$ cat /var/log/maillog | fgrep -e ' connect from' -e 'status=sent' | sed 's/[]<>[]/ /g' | awk '/connect from/ {ip=$11} /status=sent/ {print $10" "ip}' > log1.txt

Và trước khi chúng ta tiếp tục biên soạn cơ sở dữ liệu về các địa chỉ ở Châu Phi, chúng ta hãy xem xét các địa chỉ IP hàng đầu của người gửi.

$ cat log1.txt | cut -d' ' -f1 | sort | uniq -c | sort -r | head -n 40
5206 [email protected]
4165 [email protected]
3739 [email protected]
3405 [email protected]
3346 [email protected]

Trong số đó, ba người nhận đầu tiên từ trên xuống rõ ràng nổi bật về số lượng chữ cái. Nếu bạn grep địa chỉ IP của những người gửi đã gửi đến các địa chỉ từ 3 địa chỉ hàng đầu này, bạn sẽ nhận thấy ưu thế rõ ràng của một số mạng nhất định:

$ cat log1.txt | fgrep '[email protected]' | cut -d' ' -f2 | sort | cut -d'.' -f1 | uniq -c | sort -r | head
831 105
806 41
782 197
664 196
542 154
503 102
266 156
165 45
150 160
108 165

Hầu hết các mạng 105/8, 41/8, 196/8,197/8 đều được phân bổ cho AFRINIC - một trong năm nhà đăng ký Internet khu vực phân phối tài nguyên Internet. AFRINIC phân phối không gian địa chỉ trên khắp Châu Phi. Và 41/8 hoàn toàn ám chỉ AFRINIC.

https://www.nic.ru/whois/?searchWord=105.0.0.0 
https://www.nic.ru/whois/?searchWord=41.0.0.0

Vì vậy, trên thực tế, câu trả lời cho vấn đề nằm ở chính nhật ký.

$ cat log1.txt | fgrep -e '105.' -e '41.' -e '196.' -e '197.' -e '154.' -e '102.' | awk '{print $1}' | sort | uniq -c | sort -r | head -n 21
4209 [email protected]
3313 [email protected]
2704 [email protected]
2215 [email protected]
1774 [email protected]
1448 [email protected]
1233 [email protected]
958 [email protected]
862 [email protected]
762 [email protected]
632 [email protected]
539 [email protected]
531 [email protected]
431 [email protected]
380 [email protected]
357 [email protected]
348 [email protected]
312 [email protected]
289 [email protected]
282 [email protected]
274 [email protected]

Ở giai đoạn này, chúng ta nhận được chuỗi “LinuxBenedictTorvadst”.

Khóa đúng: "LinusBenedictTorvalds".

Chuỗi kết quả chứa lỗi đánh máy liên quan đến khóa chính xác trong 3 ký tự cuối cùng. Điều này là do thực tế là các mạng chúng tôi chọn không hoàn toàn dành riêng cho các quốc gia Châu Phi và cách phân phối email theo địa chỉ IP trong nhật ký của chúng tôi.

Với thông số kỹ thuật đầy đủ của các mạng lớn nhất được phân bổ cho các quốc gia Châu Phi, có thể nhận được câu trả lời chính xác:

$ cat log1.txt | fgrep -e' '105.{30..255}. -e' '41. -e' '196.{64..47}. -e' '196.{248..132}. -e' '197.{160..31}. -e' '154.{127..255}. -e' '102.{70..255}. -e' '156.{155..255}. | awk '{print $1}' | sort | uniq -c | sort -r | head -n 21
3350 [email protected]
2662 [email protected]
2105 [email protected]
1724 [email protected]
1376 [email protected]
1092 [email protected]
849 [email protected]
712 [email protected]
584 [email protected]
463 [email protected]
365 [email protected]
269 [email protected]
225 [email protected]
168 [email protected]
142 [email protected]
111 [email protected]
 96 [email protected]
 78 [email protected]
 56 [email protected]
 56 [email protected]
 40 [email protected]

Vấn đề cũng có thể được giải quyết theo cách khác.
Tải xuống MaxMind, giải nén nó và ba lệnh tiếp theo cũng giải quyết được vấn đề của chúng tôi.

$ cat GeoLite2-Country-Locations-ru.csv | grep "Африка" | cut -d',' -f1 > africaIds.txt
$ grep -Ff africaIds.txt GeoLite2-Country-Blocks-IPv4.csv | cut -d',' -f1 > africaNetworks.txt
$ grepcidr -f africaNetworks.txt log1.txt | cut -d' ' -f1 | sort | uniq -c | sort -r | head -n21

Bằng cách này hay cách khác, cuối cùng chúng tôi đã tính toán được số liệu thống kê và các nhà quản lý đã nhận được dữ liệu họ cần để làm việc!

3. Giai đoạn thứ ba

Giai đoạn thứ ba có phần giống với giai đoạn đầu tiên - bạn cũng cần sửa chữa dịch vụ đèn ấm, nhưng mọi thứ phức tạp hơn so với nhiệm vụ đầu tiên.

3.1. Sự thật thú vị

Trong 15 phút đầu tiên, ba người chơi đã tìm được chìa khóa đầu tiên, 2 giờ 20 phút sau khi màn chơi bắt đầu, người chiến thắng của chúng ta đã hoàn thành nhiệm vụ.

3.2. Bài tập

Bạn đến làm việc cho một công ty nơi tất cả tài liệu của công ty được lưu trữ trên máy chủ Wiki nội bộ. Năm ngoái, một kỹ sư đã đặt mua 3 đĩa mới cho máy chủ ngoài một đĩa hiện có, lập luận rằng để hệ thống có khả năng chịu lỗi, các đĩa cần được đặt thành một số loại mảng. Thật không may, vài tuần sau khi lắp đặt, người kỹ sư này đã đi nghỉ ở Ấn Độ và không trở về.

Máy chủ đã hoạt động bình thường trong vài năm, nhưng vài ngày trước mạng của công ty đã bị hack. Theo hướng dẫn, nhân viên bảo mật đã lấy đĩa ra khỏi máy chủ và gửi cho bạn. Trong quá trình vận chuyển, một đĩa đã bị thất lạc không thể cứu vãn được.

Chúng ta cần khôi phục lại chức năng của Wiki, trước hết chúng ta quan tâm đến nội dung của các trang wiki. Một đoạn văn bản nhất định trên một trong các trang của wiki này là mật khẩu của máy chủ 1C và cần gấp để mở khóa nó.

Ngoài ra, ở đâu đó trên các trang wiki hoặc ở một nơi khác có mật khẩu của máy chủ nhật ký và máy chủ giám sát video, những mật khẩu này cũng cần được khôi phục; nếu không có chúng, việc điều tra vụ việc là không thể. Như mọi khi, chúng tôi mong đợi một giải pháp nhanh chóng cho vấn đề!

3.3. Giải pháp

1. Chúng tôi cố gắng khởi động từng đĩa một từ các đĩa mà chúng tôi có và ở mọi nơi chúng tôi đều nhận được cùng một thông báo:

No bootable medium found! System halted 

Bạn cần phải khởi động từ một cái gì đó. Khởi động từ Live CD/DVD (Khắc phục sự cố -> Cứu) lại giúp ích. Khi tải, chúng tôi cố gắng tìm phân vùng khởi động, không tìm thấy, cuối cùng chúng tôi vào shell. Chúng tôi đang cố gắng nghiên cứu những gì và cách làm với đĩa. Được biết, có ba người trong số họ. Có nhiều công cụ hơn cho việc này trong phiên bản thứ 7 của CentOS, nơi có các lệnh blkid hoặc lsblk, hiển thị cho chúng ta tất cả thông tin về các đĩa.

Chúng tôi làm như thế nào và làm gì:

$ ls /dev/sd*

Rõ ràng là ngay lập tức

/dev/sdb1 - ext4
/dev/sdb2 - часть lvm
/dev/sda1 и /dev/sdc1 - части рейда
/dev/sda2 и /dev/sdc2 - про них ничего не известно на текущий момент

Chúng ta mount sdb1 thì rõ ràng đây là phân vùng khởi động của CentOS 6.

$ mkdir /mnt/sdb1 && mount /dev/sdb1 /mnt/sdb1

Rõ ràng, chúng ta đi đến phần grub và tìm chìa khóa đầu tiên ở đó - James191955Gosling trong một tệp bất thường.

2. Chúng tôi nghiên cứu pvs và lvs vì chúng tôi làm việc với LVM. Chúng tôi thấy rằng cần có 2 tập vật lý, một tập không được định vị và phàn nàn về việc mất uid. Ta thấy cần có 2 khối logic: root và swap, trong khi root bị mất một phần (thuộc tính P của khối lượng). Không thể gắn kết được, thật đáng tiếc! Chúng tôi thực sự cần anh ấy.

Còn 2 đĩa nữa, chúng ta xem xét, lắp ráp và gắn kết:

$ mdadm --examine --verbose --scan
$ mdadm --assemble --verbose --scan
$ mkdir /mnt/md127 && mount /dev/md127  /mnt/md127 

Nhìn qua, chúng ta có thể thấy rằng đây là phân vùng khởi động của CentOS 6 và là bản sao của những gì đã có trên đó /dev/sdb1, và ở đây lại có cùng một khóa - DennisBMacAlistairCRitchie!
Hãy xem nó được lắp ráp như thế nào /dev/md127.

$ mdadm --detail /dev/md127

Chúng ta thấy rằng lẽ ra nó phải được ghép từ 4 đĩa, nhưng nó lại được ghép từ hai /dev/sda1 и /dev/sdc1, lẽ ra chúng phải là số 2 và 4 trong hệ thống. Chúng tôi cho rằng từ /dev/sda2 и /dev/sdc2 Bạn cũng có thể thu thập một mảng. Không rõ tại sao không có siêu dữ liệu về chúng, nhưng đây là lương tâm của quản trị viên, người đang ở đâu đó ở Goa. Chúng tôi cho rằng nên có RAID10, mặc dù vẫn có những lựa chọn. Chúng tôi thu thập:

$ mdadm --create --verbose /dev/md0 --assume-clean --level=10 --raid-devices=4 missing /dev/sda2 missing /dev/sdc2

Chúng tôi nhìn vào blkid, pvs, lvs. Chúng tôi phát hiện ra rằng chúng tôi đã thu thập được một khối lượng vật lý mà trước đây chúng tôi thiếu.

lvroot đã được sửa chữa ngay lập tức, chúng tôi gắn kết nó, nhưng trước tiên hãy kích hoạt VG:

$ vgchange -a y
$ mkdir /mnt/lvroot && mount /dev/mapper/vg_c6m1-lv_root /mnt/lvroot 

Và mọi thứ đều ở đó, bao gồm cả khóa trong thư mục chính gốc - /root/sweet.

3. Chúng tôi vẫn đang cố gắng khôi phục máy chủ của mình để nó khởi động bình thường. Tất cả các tập hợp lý từ của chúng tôi /dev/md0 (nơi chúng tôi tìm thấy mọi thứ) kéo nó vào /dev/sdb2, nơi toàn bộ máy chủ ban đầu hoạt động.

$ pvmove /dev/md0 /dev/sdb2
$ vgreduce vg_c6m1 /dev/md0

Chúng tôi tắt máy chủ, tháo đĩa 1 và 3, để lại đĩa thứ hai, khởi động từ Live CD/DVD vào Rescue. Tìm phân vùng khởi động và khôi phục bộ nạp khởi động trong grub:

root (hd0,0)
setup (hd0)

Chúng tôi xé đĩa khởi động và tải thành công, nhưng trang web không hoạt động.

4. Có hai tùy chọn để khởi chạy một trang web: định cấu hình Apache từ đầu hoặc sử dụng nginx với php-fpm đã được cấu hình trước:

$ /etc/init.d/nginx start
$ /etc/init.d/php-fpm start

Cuối cùng, bạn cần khởi động MySQL:

$ /etc/init.d/mysqld start

Nó sẽ không bắt đầu, và câu trả lời nằm ở /var/log/mysql. Ngay khi bạn giải quyết được vấn đề với MySQL, trang web sẽ hoạt động, trên trang chính sẽ có một khóa - RichardGCCMatthewGNUStallman! Bây giờ chúng tôi có quyền truy cập vào 1C và nhân viên sẽ có thể nhận được tiền lương của mình. Và như mọi khi, bạn còn rất nhiều việc phải làm trước mắt để thiết lập cơ sở hạ tầng và bảo mật trong công ty.

Chúng tôi cũng có thể một lần nữa chia sẻ danh sách những cuốn sách đã giúp chúng tôi và những người tham gia chuẩn bị cho trò chơi: linux.mail.ru/books.

Cảm ơn đã đồng hành cùng chúng tôi! Hãy theo dõi thông báo của các trò chơi tiếp theo!

Nguồn: www.habr.com

Thêm một lời nhận xét