7. Giềng mối:
Như tôi đoán trước, lần này quả thật "cuti" im ắng. Suốt hai
tuần lễ, tôi không nhận được một thông điệp nào từ "cuti" nhưng lần này tôi
không còn ngại "cuti" bỏ cuộc mà tin rằng "cuti" đang 'vật lộn' với mớ khái niệm
mới, với môi trường hệ điều hành mới. Tôi biết đây là một đoạn dốc khá cao và
căng thẳng với "cuti" vì cu cậu gần như phải bắt đầu lại từ đầu với một hệ điều
hành mới mẻ.
Có sẵn kinh nghiệm dùng
máy tính và sử dụng hệ điều hành Windows cộng với dăm ba mẹo vặt không tạo điều
kiện thuận lợi cho "cuti" 'vượt dốc' mà ngược lại có thể tạo những khó khăn nặng
nề hơn vì chắc chắc cu cậu sẽ không ngừng liên hệ đến những thói quen và kiến
thức có sẵn về hệ điều hành Windows. Điều đáng nói là "cuti" không hề gởi một
thông điệp nào để than vãn hoặc cầu cứu. Tôi không biết cu cậu có tham gia diễn
đàn nào khác và đang tung lên hàng loạt câu hỏi. Dù "cuti" có thử giải quyết
cách này, cu cậu chắc chắn sẽ mất một khoảng thời gian dài để đi đến giai đoạn
hiểu được mình đang ở đâu.
Sau hai
tuần, tôi nhận được một bức e-mail từ "cuti". Nó có nội dung rất dí dỏm như sau
(tôi đã lượt bỏ những chi tiết riêng tư và không phù hợp với tinh thần chủ đề,
tôi cũng đã điều chỉnh lại cho ngôn từ nghiêm túc và chuyên nghiệp
hơn):
"Anh
già khó tánh kính mến,
Hai tuần qua em bị
con chim cánh cụt 'đè' gần ngất xỉu nhiều lần. Em nhiều lần rất muốn gởi anh một
vài thông điệp để cầu cứu nhưng lời anh nói cứ ám trong đầu: "Sao hỏi anh?
Cuốn cẩm nang Linux của em đâu?" làm em ngần ngại. Lúc này em không khác gì
người đi trong rừng Amazon, chẳng còn biết phương hướng ở đâu nữa. Bây giờ em
mới thật sự thấy chuyện đánh cuộc của anh em mình khó đến mức nào.
Anh già biết hông? sau bao nhiêu là mò mẫm,
em mới hiểu ra chỉ có root mới có thể tạo account cho người dùng và mới tìm ra
được lệnh dùng để tạo account. Nhìn lại thì thấy những chuyện này không khác gì
bên Windows mấy. Tuy nhiên, để khai mở những điểm anh đưa ra về chuyện 'nhìn sự
việc như một system admin hay một coder' thì em quả lạc lối mất rồi. Cuốn 'cẩm
nang Linux' của em không đề cập bao nhiêu về những điểm này. Vậy em tìm hiểu
những thông tin này ở đâu anh? Thật kỳ lạ anh ạ, trước đây hễ thấy cuốn e-book
nào dày vài trăm trang là em hết muốn đụng tới. Giờ đây, em lại mong cuốn e-book
Linux của em dày hơn, nhiều hơn. Em nghĩ anh là con người nguy hiểm là một điều
không sai bởi vì không hiểu tại sao anh có thể biến em từ một đứa không buồn
đụng đến cuốn e-book mà bây giờ lại mong nó dày hơn. Hì hì, em nói đùa đó thôi.
Có nhiều lúc em muốn bỏ dở để đi bắn Gunbound cho khoẻ nhưng nghĩ lại thì thấy
hơi... ê vì thế nào cũng bị anh chửi cho một chặp, nên thôi.
Em đã tạo được account dành cho người dùng
bình thường và có thể login bằng account đó rồi. Tuy nhiên, em đang ở trong giai
đoạn 'dậm chân tại chỗ' bởi vì khi dùng account này và thử 'vi' trang index.html
của web server trên máy chủ Linux thì nó luôn luôn báo lỗi 'changing read-only
file'. Câu hỏi của em là: bằng cách nào mình có thể 'viết' vào nó để thay đổi
nội dung hở anh?
Nếu rảnh anh sớm hồi âm dùm
em nhe? Em biết anh chắc bận rộn lắm nhưng không hỏi anh thì hỏi ai bây giờ? Nếu
anh quá bận rộn thì chắc em phải đành cho con chim cánh cụt 'đè' thêm ít hôm
nữa, chắc cũng không sao đâu.
Chúc anh và
gia đình vui khoẻ.
Em,
Cuti."
Tôi đọc e-mail
của "cuti", ngẫm nghĩ tìm cách trả lời cho cu cậu. Câu hỏi cu cậu đưa ra
[i]"bằng cách nào mình có thể 'viết' vào nó để thay đổi nội dung hở anh?" là
một câu hỏi ở dạng có thể có vô số các câu trả lời. Tôi sẽ chọn câu trả lời nào
đây?
Mấy ngày kế tiếp, tôi vô cùng bận rộn
nên vẫn chưa trả lời cho "cuti" nhưng thỉnh thoảng tôi ghi xuống dăm ba điểm
quan trọng để dùng chúng mà khai triển câu trả lời. Chiều nay, trên đường đi làm
về, ngồi trên tàu lửa, tôi mở laptop ra và quyết định thảo một bức e-mail cho
"cuti" như sau:[/i]
"Cuti thân mến,
Anh đã nhận được mail của em vài ngày trước
đây nhưng lu bu công việc quá nên chưa hồi âm ngay cho em được. Mong em thông
cảm. Anh sẽ trả lời các thắc mắc của em theo thứ tự như sau:
1. Em nên ngần ngại khi hỏi anh
nếu như:
- em chưa đọc kỹ cuốn "cẩm nang"
của em
- em đọc rồi nhưng chưa hiểu rõ và không
muốn đọc lại lần nữa để hiểu rõ hơn
Nói cách
khác, nếu em hỏi có cái gì dính dáng với "what" và "how" thì cứ nhớ đến câu:
"Sao hỏi anh? Cuốn cẩm nang Linux của em đâu?" :). Nếu em hỏi có cái gì
dính với "why" thì anh sẽ trả lời thắc mắc của em.
Lý do anh khuyến khích em đọc và suy nghĩ vì quá trình 'hành xác'
này sẽ biến những thứ em đọc và suy nghĩ thành 'tài sản' của em. Anh có thể tổng
kết, rút gọn lại những điều em cần đọc và giải thích cho em. Tuy nhiên, mình
không nên đi theo hướng này vì nó làm... hư người đi :). Em cần tự mình hình
thành một lối suy nghĩ, tiếp cận và giải quyết vấn đề riêng cho mình.
2. Chuyện đánh cuộc của anh em mình sẽ
rất khó đối với những ai không hiểu được chiều rộng và bề sâu của điều
cần phải làm. Nó sẽ khó với những ai đã hình dung được chiều rộng và bề
sâu này và nó sẽ không khó với những ai đã 'thử' đi xuống bề sâu và đi
ngang qua chiều rộng này. Đọc mail của em, anh hình dung là em đã bắt đầu hình
dung được chiều rộng và bề sâu của vấn đề. Thật tình mà nói, em rất sáng dạ và
chịu khó vì em đã đi qua một đoạn đường khá 'chông gai' trong một khoảng thời
gian ngắn ngủi như thế. Anh không gặp bao nhiêu người có thể làm như em đâu. Cho
nên gắng lên em và nên kiên nhẫn hơn.
3. Câu
hỏi "bằng cách nào mình có thể 'viết' vào nó để thay đổi nội dung hở
anh?" thì anh có thể tóm gọn như sau:
Không riêng gì root làm chủ một (hoặc nhiều) hồ sơ, thư mục... mà
bất cứ tài khoản nào cũng vậy, nếu chủ nhân của các hồ sơ này ấn định một số
giới hạn đến những thứ họ tạo ra thì tổng quát mà nói, em không thể thay đổi
được nó một cách chính diện bằng chính tài khoản của em ngoại trừ... em 'hack'
(và ngoại trừ em có 'root' account). Hành động 'hack' ở đây được tiếp cận và
phân tích ra sao thì tùy vào mức độ am hiểu hệ thống của người muốn 'hack'. Tuy
nhiên có hai trường hợp tổng quát để có thể làm nền tảng cho việc 'thay đổi nội
dung hồ sơ' ấy:
- 'mượn tay' root để thay đổi
nội dung vì chỉ có root mới có thể làm chuyện này.
- 'biến' mình thành root để thay đổi nội dung cũng vì lý do ở
trên.
Ngoài ra, có thể có khả năng khác. Ví
dụ như hồ sơ này cho phép những ai trong nhóm (group) điều chỉnh (nếu như
attribute của hồ sơ này ấn định như thế).
Vậy, điều em cần tìm hiểu ở đây là gì? Đây:
- tìm chủ quyền và giá trị ấn định chủ quyền hồ sơ mình cần thay
đổi (cho owner, group và others) xem thử nó là gì?
- 'mượn tay' root là sao? do đâu có khái niệm 'mượn tay' root?
- 'biến' mình thành root là sao? do đâu có khái
niệm 'biến' mình thành root?
Đây là cốt lõi
của các điểm yếu thường gặp trên hệ thống *nix nếu chế độ mặc định bị lỗi hoặc
system admin thiếu kinh nghiệm, thiếu cẩn thận trong quá trình điều chỉnh hoặc
chính software trên hệ thống này bị lỗi. Từ ba điểm yếu này mở ra muôn vàn khả
năng, biến thái, kết hợp, điều chế, thử nghiệm.... và đây chính là 'hack': hành
động tìm kiếm và đi đến tác động để thay đổi thái độ làm việc của hệ
thống. Không riêng gì trên *nix mà bất cứ hệ điều hành nào cũng vậy, bất cứ
cơ chế xác thực người dùng (authentication) và ấn định chủ quyền người dùng
(authorisation) nào đều có cơ hội bị 'xoáy thủng' dựa trên ba điểm trên.
Anh chỉ có thể trả lời chi tiết hơn khi nào
em đã nắm vững cơ chế ấn định chủ quyền của tài nguyên trên một máy chủ. Em còn
nhớ đoạn lệnh anh gởi cho em lần trước làm em 'lùng bùng' không? Nó có liên quan
trực tiếp đến cái gọi là giá trị ấn định chủ quyền đó. Anh giới thiệu
thêm vài từ khoá: ls, umask, chmod, chown,
chgrp để em đỡ phải lan man. Sau khi đã hiểu rõ những gì thuộc về mấy từ
khoá trên và những giềng mối xung quanh nó, thắc mắc của em sẽ trở nên rõ ràng
hơn.
Thứ năm tới đây anh có ngày nghỉ. Có lẽ
anh sẽ bận buổi sáng nhưng buổi chiều thì rảnh. Nếu muốn 'bổ' thêm vài 'thang'
thì cho anh biết. Từ đây đến đó còn ba ngày cho nên em nên tham khảo qua mấy từ
khoá ở trên trước đi. Em cũng nên chuẩn bị sẵn những điều mình thắc mắc thì anh
em mình 'chat' mới có chất lượng. Nên nhớ: ask me why, don't ask me what
:)
Chúc em một ngày vui.
Chào cuti."
Tối hôm ấy tôi gởi "cuti" bức e-mail trên. Sáng ngày hôm sau
tôi nhận được hồi âm của "cuti":
"Hello anh
già khó tánh :)
Cứ mỗi lần nhận được một
thông điệp của anh, bộ não của em lại chạy ro ro. Em lại sinh ra một cái tật mới
là miệng hay lẩm bẩm ;-), chắc anh biết lý do tại sao.
Chiều thứ Năm em cũng rảnh nhưng phải sau một giờ trưa lận bởi vì
em phải vào trường. Như vậy khoảng sau 4 giờ chiều nơi anh ở. Vậy có tiện không
anh?
Em sẽ 'lên danh sách' những điều em
thắc mắc để được anh 'châm' cho vài phát. Em đang lùng thêm vài cuốn e-book
Linux, không biết anh có cuốn nào khác không?
Vậy anh nhé? Hẹn gặp lại chiều thứ Năm.
Chúc anh một tuần làm việc vui vẻ.
Cuti."
Suốt mấy ngày tiếp
theo, tôi vùi đầu vào công việc và ba ngày đi qua nhanh chóng. Chiều thứ Năm ấy
tôi quên bẵng mình có 'hẹn' với "cuti", vẫn đi chơi với gia đình. Mãi đến sau 4
giờ chiều mới sực nhớ. Khi tôi về nhà và logon, "cuti" vẫn chưa online. Tôi
cười, thầm nghĩ "Chà, tưởng đâu mình cho cuti leo cây, không ngờ lại bị cuti cho
mình leo cây". Tôi gởi "cuti" một offline message:
"Cuti, anh đã online. Khi nào em vào, hú một tiếng cho anh biết."
Mãi mười lăm phút sau tôi mới nhận được
thông điệp hồi báo của "cuti". Cu cậu có vẻ "hớt hãi" lắm:
"Dạ em đây, em đây. Trên đường đi học về bị xẹp lốp anh à cho nên
trễ nãi hết. Cho em xin lỗi nhe. May mà không có anh ở đây chớ không thì chắc
cũng bị ăn vài cái 'kí' trên đầu rồi. Hi hi."
Tôi trả lời:
"Không sao
em, anh cũng mới online chừng 15 phút thôi. Em ăn cơm chưa? cứ thong thả đi."
"cuti" lại hóm hỉnh:
"Dạ em đang vừa 'đớp', vừa 'chat' đây. Hông phải vừa đốp, vừa
chát đâu nghe? Ai mà dám đốp chát với anh ;-)."
Tôi cười, đáp:
"Vậy em
thong thả ăn cơm đi rồi mình nói chuyện sau. Anh duyệt web, trả lời e-mail cũng
được."
"cuti" rối rít:
"Dạ không, được mà anh. Bụng đớp kệ bụng, não
đớp kệ não. Em ăn hai thứ một lượt cũng được mà."
Phì cười vì tính dí dỏm cố hữu của cu cậu, tôi cũng hóm hỉnh
với cu cậu:
"Vậy thì được thôi, anh chỉ sợ
cơm thì lên não mà chữ thì xuống ruột... già thì công toi thôi, hì hì. Vậy em đã
'lên danh sách' những điều em muốn hỏi chưa?"
"cuti" nhanh nhẩu:
"Ha ha,
anh cũng biết nói chuyện tếu lâm nữa sao? Em cứ tưởng anh là một lão đạo mạo chỉ
có số với chữ không chớ! Còn chuyện danh sách thì có rồi chớ anh. Lúc máy mó
trên con Linux thì bao nhiêu là câu hỏi. Lúc đọc mail của anh lại thêm cả đống
câu hỏi. Vậy mà khi ngồi xuống liệt kê lại thì chẳng còn được bao nhiêu câu hết.
Lạ thật."
Tôi đáp:
"Vậy em cứ hỏi rồi tự nhiên câu hỏi này sẽ dẫn đến câu hỏi kia
thôi. Còn chuyện em nghĩ anh đạo mạo thì em lầm to rồi đó :)."
"cuti" trịnh trọng:
"Em hỏi nhe? Anh sẵn sàng chưa?"
Tôi bật cười, trả lời:
"Shoot!"
"cuti" chộp ngay
câu trả lời của tôi và hỏi liền:
"shoot là
gì vậy anh? đá banh hả?"
Tôi không nén
nổi, bật cười xoà vì tính con nít và năng động (và có phần thiếu tập trung) của
"cuti". Tôi đáp:
"Thôi đi ông thần. Ráng tập
trung vào vấn đề, đừng thấy gì hỏi đó. Em chỉ cần biết 'shoot' là 'hỏi đi' là
đủ. Đó chỉ là một cách nói."
"cuti" ra vẻ
nghiêm trang:
"Câu 1: tại sao anh nói:
"ask me why, don't ask me what" vậy? Em hiểu nghĩa tiếng Anh là
hỏi tại sao, đừng hỏi cái gì. Vậy ý anh là thế nào?"
Tôi đáp:
"Rất đơn giản.
- 'What' là 'cái gì', 'cái gì' có thể tìm thấy
trong sách giáo khoa và sách tham khảo. Công việc của em là tìm ra câu trả lời
cho các cái 'cái gì' bởi vì anh không thể trả lời hết cái 'cái gì' được. 'cái
gì' là kiến thức căn bản.
- 'Why' là 'tại
sao', 'tại sao' cũng có trong sách giáo khoa và sách tham khảo nhưng cần phải
được đúc kết, rút tỉa. Một người thể chưa đủ 'cái gì' để hình thành 'tại sao',
có thể chưa đủ kinh nghiệm để hình thành 'tại sao' và cũng có thể chưa đủ suy
luận để hình thành 'tại sao'. 'tại sao' là kiến thức mở rộng.
Cho nên anh có thể giúp em những cái 'why'
mà không thể giúp em những cái 'what'. Nên nhớ, sau khi có 'what' rồi thì mới có
'why'.
Rồi, câu kế tiếp."
"cuti" thảng thốt:
"Trời! anh giải thích y như kiểu suy luận toán học hông bằng.
Ùm... để em xem lại một phát nữa cái. Ùm... hình như lần trước anh đề cập đến
sách giáo khoa và sách tham khảo cũng có giềng mối với chuyện này phải
hông anh?"
Tôi cười và trả lời cu
cậu:
"Ái chà, em cũng dùng chữ 'giềng mối'
sao? Đúng vậy, sở dĩ anh đưa ra chuyện đọc sách, phân loại sách và phương pháp
tổng hợp, thâu thập từ sách là vì anh có ý muốn em phải đi qua cái 'what' trước
sau đó mới có thể khai triển đến cái 'why'. Rồi, câu thứ hai?"
"cuti" liếng thoắn:
"Ái chà, chữ 'giềng mối' là chữ em copy anh đó thôi. Chữ này ít
thấy dùng nhưng em thấy hay hay. Chắc mình phải đi sâu vào chi tiết kỹ thuật đọc
sách và rút tỉa từ sách quá anh à, tại vì em vẫn thấy những thứ trong sách muôn
trùng. Điều mình cần tìm hiểu thì ít ỏi, điều mình không cần tìm hiểu thì quá
nhiều. Cái khó là tìm ra được những phần mình cần trong một cuốn sách. Nhưng
thôi, để mình bàn chuyện này sau. Câu thứ hai của em là: anh có thể cho em vài
ví dụ kỹ thuật về cái 'giềng mối' mà anh nói ở đây không?"
"cuti" quả không đơn giản tí nào. Tôi trầm ngâm vài giây rồi
trả lời:
"Được rồi. Cái gọi là 'giềng mối'
chính là những mắc xích từ phần này đến phần kia một cách logic trong một chuỗi
sự việc, hiện tượng, thể trạng. Trên bình diện kỹ thuật và nhất là trong khuôn
khổ những gì mình đang đi qua, 'giềng mối' nói một cách tổng quát, là những bước
dẫn mình đi đến mục đích cuối. Ví dụ:
- em
đọc sách đúng phương pháp để hình thành cái 'what', rồi từ 'what' đi đến 'why,
thiếu 'what' không thể hình thành 'why', thiếu 'why' không thể đi đến đích: đây
là 'giềng mối' sự việc.
- em không thể điều
chỉnh nội dung index.html kia: đây là hiện tượng. Nếu phân tích hiện tượng này
thì em thấy rằng, để có thể thực hiện việc điều chỉnh này em phải có đủ chủ
quyền, để có đủ chủ quyền em phải là 'root', để biến em thành 'root' hoặc mượn
tay 'root' thì em phải hiểu rõ những điểm nào trong hệ thống có thể cho
phép cho em thực hiện: đây là 'giềng mối' hiện tượng.
- em cần phải tham khảo và hiểu rõ ls, umask,
chmod, chown và chgrp là vì ls cho phép em liệt kê
tính chất và thể trạng của các hồ sơ và thư mục, umask ấn định các thể
trạng này cho tình trạng mặc định và chmod, chown và chgrp
thay đổi hoặc ấn định lại thể trạng hiện có sang thể trạng mới: đây là 'giềng
mối' thể trạng.
Em đọc ba ví dụ trên rồi suy
gẫm đi :)"
"cuti" lặng thinh hồi lâu rồi
đáp, có phần gay cấn:
"grừ... anh nói chuyện
độc thiệt, nhưng anh dùng nhiều từ làm em lùng bùng rồi :(. Em chưa hề thấy có
sách giáo khoa nào về IT mà đề cập những điểm: sự việc, hiện tượng và thể trạng
như anh. Một lệnh là một lệnh, một quyển sách là một quyển sách.... em chưa hề
thấy qua lối diễn giải sự việc như anh. Thật tình em hơi bị lùng bùng đây anh ạ.
Em không hiểu tại sao em phải hiểu rõ giềng mối thể trạng của các lệnh. Bộ muốn
trở thành một người rành rẽ về IT thì phải hiểu rõ các 'giềng mối' mà anh đưa ra
sao?"
Tự nhủ là mình nên kiên nhẫn vì
"cuti" đã 'lỡ' ám ảnh với lối suy nghĩ cục bộ, tôi tiếp tục trả lời:
"Những ví dụ về 'giềng mối' trên là đúc kết
logic của những trường hợp anh em mình đang đi qua. Nếu em chỉ hiểu ở mức độ
'một lệnh là một lệnh', em chỉ cần biết gõ lệnh nào đó còn chuyện gì gì xảy ra
đằng sau là chuyện em không muốn biết thì em chỉ dừng lại ở mức độ người dùng
bình thường. Em còn nhớ chi tiết chuyện 'nhấn nút' trước đây không? Người dùng
bình thường chỉ... nhấn nút và chờ kết quả. script kiddie cũng nhấn nút và chờ
kết quả. Tuy nhiên, hacker nhấn nút và biết rõ ngay sau khi nút được nhấn,
chuyện gì đã và đang xảy ra. Bởi vì hacker đã khiến cho cái 'nút' kia thực thi
những điều cụ thể mà anh ta muốn. 'Lệnh' cũng như 'nút' vậy, chúng đều là phương
tiện để tác động đến hệ thống. 'hacker' không những biết những phương tiện tác
động căn bản, hiểu rõ cơ chế và giềng mối làm việc của chúng mà còn phải có khả
năng tạo 'nút' và 'lệnh' để thoả mãn đòi hỏi của mình. Nếu chưa nắm được
'nút' và 'lệnh' làm những gì đến hệ thống thì việc tạo thêm 'nút' và 'lệnh' là
chuyện không thể xảy ra. Đây chính là vấn đề thuộc về giềng mối.
Riêng chuyện ngôn từ anh dùng thì... em
thông cảm hả? anh quen dùng những từ ấy rồi. Vả lại anh không biết em dùng những
từ nào tương đương nên đành phải dùng những từ anh quen thuộc, hì hì."
"cuti" tiếp tục vặn:
"Vậy anh có thể nói rõ hơn cái 'giềng mối' giữa ls,
umask và chmod được không anh? Tại sao anh đơn cử mấy lệnh này? Em
thấy vấn đề 'giềng mối' anh đưa ra ở đây chưa tỏ lắm. Hay là em lù khù quá nên
chưa nắm được ý anh."
Tôi đáp:
"Anh nghĩ anh đã giải thích khá rõ trong e-mail
và trong câu trả lời trên rồi mà? Em nên xem lại. Có lẽ mình đi xuyên qua vấn đề
hơi nhanh nên em chưa có đủ thời gian để suy gẫm đó thôi. Rồi, câu hỏi tiếp theo
là gì?"
"cuti" vẫn kiên trì:
"Đúng là anh đã giải thích về chuyện 'giềng mối'
rồi nhưng em vẫn thắc mắc là làm sao mình biết khi nào mình cần dùng lệnh
ls, khi nào mình cần dùng lệnh chmod chẳng hạn? Em cần được đả
thông khúc mắc này trước khi em có thể hỏi câu tiếp theo."
Tôi trả lời "cuti":
"Chà,
điều em cần đả thông ở đây là sự nhuần nhuyễn một hệ điều hành và những phương
tiện tác động đến nó để thực hiện điều mình muốn. Để đạt được chuyện này, em
phải dùng nó, phải thử nghiệm, phải biến 'lạ' thành 'quen'. Nói một cách khác,
em phải là một 'user' thật sự trên hệ điều hành này trước khi em trở thành một
'hacker'. Nếu em dùng hệ điều hành đến mức nhuần nhuyễn, tự nhiên em biết được
khi nào em cần dùng lệnh nào để thực hiện chuyện gì. Đây là cái 'what' mà em
phải thực hiện."
"cuti" trở nên gàn
bướng:
"Nhưng đợi đến khi em thành thạo hết
những 'lệnh' kia thì biết cho đến bao giờ hở anh? Điều em thắc mắc là có một quy
trình gì đó để thao tác những lệnh đó không anh?"
Tôi hơi thất vọng vì lại phải quay lại giai đoạn này. Tôi
đáp:
"Hèm, anh nghĩ mình đã thống nhất với
nhau là: em phải hiểu rõ hệ thống trước khi có thể 'hack' hệ thống rồi mà? Việc
em dành thời gian cài một cái Linux server và cố gắng làm quen với nó chính là
quá trình hiểu hệ thống đó. Ở đây anh giúp em một điều: giới hạn lại
những điểm cần tìm hiểu cho việc điều chỉnh nội dung index.html kia thì cần tham
khảo những lệnh nào. Anh không khuyến khích học 'lệnh' mà anh chỉ khuyến khích
học 'system'. Tuy nhiên để em đỡ mất thời gian, anh giới thiệu vài 'lệnh' để em
tập trung vào một phần nào đó của system. Còn chuyện quy trình thì anh nghĩ là
không có quy trình gì cả. Các bước thẩm định, dò xét để chọn lựa hướng giải
quyết của mỗi người đều khác nhau.
Đến một
mức nào đó, quá trình hình thành hướng giải quyết và cách giải quyết cụ thể chỉ
thuần tuý phụ thuộc vào khả năng sáng tạo của mỗi cá nhân mà thôi. Những lệnh
căn bản như ls, umask là những lệnh không thể thiếu để thẩm định.
Thẩm định còn có thể mở rộng ra bằng cách phối hợp một số 'lệnh' để mang lại kết
quả nhanh chóng và trung thực hơn. Anh cho rằng không có một công thức hay quy
trình nào cả. Cùng lắm là mọi người đều chọn chung một hướng giải quyết là đi từ dễ đến khó, từ đơn giản đến phức tạp."
"cuti" reo lên:
"Vậy thế nào là đơn giản, thế nào là phức tạp? thế nào là dễ và
thế nào là khó hở anh?"
Tôi cười,
đáp:
"Em không đùa đấy chứ? Em không biết
thế nào là đơn giản, phức tạp, dễ và khó hay sao? Hay ý em muốn nói trong khuôn
khổ điều chỉnh nội dung index.html ở đây mà thôi?"
"cuti" đáp một cách thoả mãn:
"Đúng rồi anh, có vậy mới được chớ? hì hì. Em chỉ muốn biết cách
nào là cách đơn giản, dễ để điều chỉnh nội dung index.html kia. Cách nào là cách
khó và phức tạp. Anh nói qua chuyện này đi?"
Tôi đáp:
"Hì hì, em vẫn
chưa thoát khỏi con ma 'thiếu kiên nhẫn', nó cứ đi theo em và 'ám' em mãi vậy?
;-). Em chỉ muốn thấy kết quả liền liền thôi. Anh có thể nói đến các thao tác để
em nghe nhưng làm như vậy bị hỏng hết kế hoạch của anh em mình. Làm như vậy em
không còn có chuyện để tìm hiểu và thâu thập nữa."
"cuti" chống chế:
"Hì hì,
dạ đúng rồi. Em đúng là muốn thấy ngay kết quả. Nhưng anh thông cảm cho em tí
đi. Dù gì em cũng còn nhỏ dại, thiếu kiên nhẫn mà. Nếu em mà điềm đạm, kiên nhẫn
thì em đã thành một ông... già khó tánh như anh rồi ;-). Nếu anh nghĩ rằng mình
không nên đốt giai đoạn thì em không tò mò thêm nữa đâu."
Tôi mỉm cười, nghĩ ngợi vài giây rồi trả lời "cuti":
"Hèm.... 'nhỏ dại' thì phải làm gì đó mới 'lớn
lên' được chớ em? Không nên viện lý do 'nhỏ dại' để làm sai hướng mình đi. Hơn
nữa, nếu lúc nào cũng chống chế bằng sự 'nhỏ dại' thì khó mà 'lớn lên' được.
Thật ra anh có thể tổng hợp lối giải quyết vấn đề một cách chung chung cho em
xem. Tuy nhiên, em nên nhớ đây không phải là một quy trình hay công thức gì cả,
đây chỉ là những thẩm định và thực thi mang tính thói quen và kinh nghiệm mà
thôi. Giả sử em đánh cuộc với anh là làm sao anh có thể đổi nội dung index.html
thì anh sẽ làm như sau, không nhất thiết phải theo đúng thứ tự:
- trước tiên, dùng ls để xem chủ quyền ấn định đến hồ sơ
này. Nếu nó cho phép mọi người 'viết' và 'đọc' --> game's over.
- nếu nó cho người tạo ra hồ sơ này và một nhóm
người dùng nào đó (group) được phép 'viết' và 'đọc', anh xem thử umask ấn
định chế độ chủ quyền theo mặc định ra sao để đánh giá mức cẩn thận của người
làm chủ server này --> anh tìm cách đưa tài khoản của anh vào group này
--> nếu được, game's over.
- nếu nó chỉ cho
người tạo ra hồ sơ này muốn làm gì thì làm, ngoài ra mọi người chỉ được phép
'đọc' --> cái này dẫn đến nhiều chọn lựa.
a. anh xem thử sudo được ấn định thế nào. Nếu sudo
ấn định lỏng lẻo và cho phép anh thay đổi một script nào đó hoặc mượn tay root
để làm gì đó --> game's over
b. nếu
sudo quá chặt chẽ, em mới dò tìm xem trên system này có 'world-writeable'
script nào không. script cần cho root thực thi thì càng tốt. Nếu có -->
game's over
c. nếu không tìm ra được gì hết,
anh mới chuyển qua tìm xem có binary nào trên system có SUID và bị lỗi. Nếu có
--> game's over.
d. nếu tìm không ra SUID
có lỗi, anh mới nghĩ đến chuyện tìm những chương trình hay dịch vụ nào chạy với
chủ quyền super user và cần tạo hồ sơ tạm thời ở /tmp. Nếu các chương trình này
thiếu sanity check trước khi tạo temp file thì anh dùng symlink để mượn tay 'su'
đổi chủ quyền một file nào đó anh chọn trước để khai thác password hoặc những
thứ tương tự --> game's over
e. nếu
system này... chiến quá, không có chương trình nào hoặc dịch vụ nào thiếu sót
trong phần sanity check trước khi tạo temp file thì anh mới nghĩ đến
shellcoding. Tìm cách dò ra một vị trí nào đó trên memory đang được 'su' dùng và
bắt nó thực thi một chuyện gì đó tiện lợi cho anh để biến anh thành 'root'
--> game's over.
Nếu đi xuyên qua các
dạng thẩm định trên (cộng với các phối hợp) mà vẫn không tìm ra kẻ hở --> bó
tay.
Nếu xét về mặt khó hay dễ, đơn giản hay
phức tạp thì a -> e tạm xem là thứ tự. Tuy vậy, mỗi dạng thăm dò và quyết
định phương hướng có thể mở ra nhiều khả năng khác nhau, mức đơn giản và phức
tạp sẽ thay đổi. Bởi vậy, trình tự cụ thể và rõ ràng là chuyện không thể có
được."
"cuti" khoái chí đáp:
"Thấy chưa? em 'moi' một chặp cũng ra thôi. Anh
đưa ra a -> e không đơn giản và dễ hiểu hơn sao?"
Tôi đáp:
"Tất nhiên là
'đơn giản và dễ hiểu' nếu như em vẫn còn đeo cứng lối khai triển và thực hiện
theo kiểu 'step-by-step'. Nếu em hiểu rõ việc ứng dụng các cơ chế làm việc trên
máy chủ, tự nhiên em hiểu rõ vấn đề và hiểu rất sâu về nó. Nếu em không hiểu rõ
việc ứng dụng các cơ chế mà chỉ làm theo các 'steps' thì sự thất bại chiếm trên
90% vì khi gặp trở ngại, em không biết cách đổi hướng hay vận dụng thêm các chọn
lựa khác để thay đổi tình hình. Nên nhớ, anh không 'chỉ vẽ' chuyện 'khai thác' ở
đây. Anh chỉ đưa ra ví dụ và phân tích cái gọi là 'giềng mối' cho em thấy rõ
'giềng mối' là thế nào mà thôi. Nếu em hỏi anh SUID là gì, làm sao khai thác
nó thì anh sẽ không trả lời vì anh không biết phải trả lời thế nào. Cho đến
khi em tìm ra SUID là gì, nó có tác dụng gì, tại sao có nó thì tự nhiên em sẽ có
câu trả lời 'làm sao để khai thác nó' mà thôi :)."
"cuti" bức xúc thấy rõ:
"Trời, anh lúc nào cũng úp úp, mở mở :(. Anh đúng là làm khó em."
Tôi cười phá lên vì "cuti" bị lạc đề và
đi đến việc ngộ nhận vấn đề một cách trầm trọng. Tôi nói tiếp:
"Này ông thần nước mặn, anh em mình đang nói
chuyện 'giềng mối' hay anh em mình đang bàn chuyện 'exploit' ở đây vậy? Em đừng
nóng nảy như thế. Liệu trước giờ em đã 'chat' với ai ở cấp độ anh em mình đang
'chat' chưa? Nếu chưa thì em không nên cho là anh 'úp úp, mở mở' :)."
"cuti" chống chế và phụng phịu:
"Hông phải, hông phải. Ý em trách móc gì anh
hết. Em thấy 'giềng mối' được thể hiện qua quy trình exploit là dễ thấy và dễ
hiểu nhất. Anh dùng ví dụ a -> e tự nhiên em thấy thông hẳn ra. Thế nhưng anh
lại quay về chuyện khái niệm. Để em tiêu hoá được mớ khái niệm này chắc chết
mất."
Tôi quyết định trở nên cứng rắn với
"cuti" không thì hỏng bét. Tôi đáp:
"Nếu em
không tiêu hoá nổi mớ 'khái niệm' kia thì em sẽ không bao giờ có thể 'hack'
được. Anh phải nhấn mạnh điều này bởi vì có ba điểm quan trọng như sau:
- những cái em gọi là 'khái niệm' kia chính là
kỹ năng lập luận và định hướng. Không có nó, em không làm gì được (và chỉ có thể
ngồi đó chờ được mách nước). Kỹ năng này giúp cho em không chỉ mở một 'ổ khoá'
mà nhiều 'ổ khoá'. Em chọn lựa lối tiếp thu 'step-by-step' thì chắc chắn em chỉ
có thể mở được một 'ổ khoá' mà thôi.
- từ những
thứ gọi là 'khái niệm' kia, nó tạo điều kiện cho em tìm hiểu và hiểu
những kiến thức cần thiết để hình thành những 'giềng mối' của cả một hệ thống
làm việc.
- nếu em chỉ 'nhắm mắt' mà thực thi
các 'lệnh', em vướng vào một thế giới cực kỳ mơ hồ và nguy hiểm."
"cuti" cố chống chọi:
"Trời, có gì mà nguy hiểm anh? Cùng lắm là làm
không được thôi mà :)."
Tôi cười,
đáp:
"Nếu anh cho em một đoạn script hoặc
một đoạn mã nguồn và anh nói rằng: 'chạy nó đi, nó sẽ thực hiện điều em muốn'
nhưng bên trong đoạn script hoặc đoạn mã nguồn này tàng chứa những 'thứ' nguy
hiểm khác mà em không biết. Liệu em có chạy nó không?"
"cuti" cười giã lã:
"Chẳng
lẽ anh mà lại 'chơi' em sao? Tất nhiên là em chạy nó liền mà chẳng ngần ngại."
Tôi đáp:
"Đó chính là điểm nguy hiểm mà em không nhận ra. Cứ cho là anh
không làm chuyện đó nhưng làm sao em dám chắc là một chương trình nào đó em
download từ Internet về hoàn toàn đáng tin cậy nếu em không soi xét nó kỹ lưỡng?
Và để soi xét kỹ lưỡng nhất định em phải có đủ kiến thức cần thiết. Em dùng một
thứ công cụ, một đoạn script, một đoạn mã nguồn với mục đích 'exploit' mà bị
'exploit' bởi chính công cụ mình dùng thì... hack hiếc cái nỗi gì?"
"cuti" đáp:
"Trời, em chưa bao giờ nghĩ đến điểm này. Có lẽ em chưa có đủ
kinh nghiệm 'chiến trường' mà thôi."
Tôi
trả lời:
"Ừa, chưa đủ kinh nghiệm 'chiến
trường' thì quá rõ nhưng vấn đề mình đang bàn ở đây là mình phải có đủ kiến thức
để xem thử mình đang 'chơi' với cái gì và chắc chắn lối khai triển
'step-by-step' sẽ không giúp được em. Hơn nữa, nếu hiểu rõ, mình có thể dùng nó
để 'cải thiện' cho mục đích cụ thể của mình. Nhưng thôi, anh nghĩ mình đi hơi xa
chủ đề rồi đó. Em nên lưu lại trọn bộ nội dung cuộc nói chuyện của anh em mình
hôm nay và về đọc kỹ lại đi. Nếu được, lần sau em làm một bản 'tổng kết' những
gì mình bàn cãi cho đến lúc này. Được không 'cuti'?"
"cuti" nhanh nhảu:
"Dạ
được chớ anh, chuyện nhỏ như con thỏ thôi mà. Anh phải đi à?"
Tôi đáp:
"Ừa, anh phải đi. Anh dính chặt vào cái máy cả tiếng đồng hồ rồi.
Anh phải đi có công chuyện. Cần gì cứ YIM cho anh nha. Chào cuti."
"cuti" vẫn hóm hỉnh:
"Chào anh già... dễ tánh".
Và
tôi logoff.
12/7/2005
<còn tiếp>
|