Tinhoc1088's Blog

Icon

Tư Vấn Tin Học

Cấp quyền thực thi với SUDO trên Ubuntu

Lần đầu tiếp xúc với Ubuntu Linux, người sử dụng gặp không ít ngỡ ngàng với một cách bảo mật mới, đó là khi thực hiện những lệnh can thiệp đến hệ thống thì phải gõ thêm “sudo”.

Đây chính là cơ chế bảo mật bằng SUDO. Cơ chế này được kích hoạt mặc định trong Ubuntu và mang lại nhiều ưu điểm hơn cơ chế chuyển sang người dùng khác bằng su truyền thống.

Trong đó ưu điểm lớn nhất là cho phép nhà quản trị kiểm soát được các thao tác của người dùng có can thiệp đến hệ thống, giao quyền thực thi “đúng người đúng việc”.

Ngoài ra khi thực thi lệnh từ xa thông qua telnet/SSH thì sudo thực sự thể hiện ưu thế. Nắm vững cơ chế sudo sẽ giúp ích rất nhiều cho những ai đang sử dụng Ubuntu, cả người sử dụng desktop và nhà quản trị hệ thống.

SUDO là gì

Sudo được dùng khi ta muốn thực thi lệnh trên Linux với quyền của một user khác. Nếu được cho phép, ta sẽ thực thi lệnh đó như là người quản trị hay một user xác định. Các khai báo “ai được làm gì” đặc tả trong file “/etc/sudoers”. SUDO còn có ưu điểm là ghi nhận lại những khi sudo được sử dụng nhằm theo dõi, phát hiện những hành vi trái phép trong hệ thống. Mặc định các ghi nhận (log) nằm trong file /var/log/secure (các bản Red Hat/Fedora / CentOS Linux) hoặc /var/log/auth.log (các bản Ubuntu / Debian Linux).

Nếu người triệu gọi sudo là root hoặc khi người triệu gọi và người được “mượn” quyền là một thì sẽ không có xác nhận mật khẩu. Còn ngoài ra, sudo yêu cầu người dùng phải tự xác nhận bằng mật khẩu. Lưu ý ở đây là trong cấu hình mặc định thì mật khẩu để xác nhận này là mật khẩu của người triệu gọi, chứ không phải mật khẩu của root. Khi người dùng đã được xác nhận xong, hệ thống sẽ thiết lập một khoảng thời gian (timestamp) cho phép người triệu gọi tiếp tục dùng sudo mà không cần phải xác nhận mật khẩu lại (mặc định là 15 phút).

Cách sử dụng thông dụng nhất của sudo là cú pháp

sudo

Ví dụ:

Mở Terminal bằng cách truy cập vào menu Application > Accessories > Terminal:



Trong cửa sổ Terminal, gõ dòng lệnh “apt-get update”, kết quả như sau:



Dòng lệnh ta vừa gõ yêu cầu hệ thống cập nhật danh mục phần mềm của Ubuntu trên hệ thống. Lệnh này đòi hỏi phải có quyền root mới được thực thi do đó ta bị báo là “Permission denied”. Bây giờ bạn gõ lại với chữ sudo ở đầu “sudo apt-get update”.

Hệ thống hiện ra dòng yêu cầu nhập mật khẩu. Hãy gõ mật khẩu của bạn lúc đăng nhập và nhấn Enter, lệnh sẽ được thực thi ngay lập tức. Lưu ý là Linux không hiển thị bất cứ ký tự nào khi bạn gõ mật khẩu.



Cũng giống như su, nếu không có khai báo định danh của user đích rõ ràng, mặc định sudo sẽ xem như ta đang mượn quyền root để thực thi. Nếu ta muốn “mượn” một người dùng nào khác thì khai báo định danh rõ ràng của người đó, chẳng hạn

sudo -u training rm -rf /home/training/.recently-used

Bây giờ ta sẽ xem làm cách nào để thiết lập cho sudo biết “ai được làm gì”.

Cú pháp của file /etc/sudoers

Như đã nói ở trên, đây là file chứa tất cả những thiết lập cho sudo. Nội dung trong file này thường được đặc tả bằng cú pháp sau:

USER HOSTNAME=(TARGET-USERS) COMMAND

Trong đó:

– USER: Tên của người sử dụng được áp dụng luật.

– HOSTNAME: Tên máy mà luật được áp dụng lên. Tham số này cần thiết vì sudo được thiết kế để bạn có thể dùng một file sudoers cho các máy khác. Lúc này sudo sẽ xem máy đang chạy được dùng các luật nào. Nói cách khác, bạn có thể thiết kế các luật cho từng máy trong hệ thống.

– TARGET-USERS: Tên người dùng đích cho “mượn” quyền thực thi.

– COMMAND: Tên “lệnh” (thực ra là các chương trình thực thi) mà người dùng được quyền thực thi với bất kỳ tham số nào mà họ muốn. Tuy nhiên bạn cũng có thể đặc tả các tham số của lệnh (bao gồm các dấu thay thế wildcards). Ngược lại, có thể dùng kí hiệu “” để ám chỉ là lệnh chỉ được thực thi mà không có tham số nào cả.

– Nếu là cấp quyền cho group, ta thay tham số USER bằng %GROUP.

Để biết thêm về cú pháp của file này, hãy gõ “man sudoers” vào cửa sổ Terminal và đọc hướng dẫn được trình bày trên màn hình.

Thiết lập cho sudo

Sau khi biết cú pháp của file sudoers, ta sẽ tiến hành thiết lập cho sudo bằng cách soạn thảo file này. Để mở file sudoer lên và soạn thảo, dùng lệnh sau:

sudo visudo

Người thiết lập cho sudo bắt buộc phải có quyền root nên ta thêm “sudo” đằng trước lệnh “visudo”. Lúc này nội dung của file sudoers sẽ được trình bày trên cửa sổ Terminal. Trong Ubuntu, các giá trị mặc định trong file sudoers như trong hình minh hoạ:



Bỏ qua các dòng chú thích bắt đầu bằng ký hiệu #, ta chú ý các dòng sau:

Defaults !lecture,!tty_tickets,!fqdn
root ALL=(ALL) ALL
%admin ALL=(ALL) ALL

Những khai báo trên có ý nghĩa:

– Chỉ thị Default cho biết những tham số được khai báo mặc định cho hoạt động của sudo (sudo hoạt động với rất nhiều tham số, xem man sudoers để biết ý nghĩa của chúng), trong đó:

– lecture là cờ điều khiển chế độ xuất một đoạn văn bản giống như “welcome” khi sudo được sử dụng. Với khai báo !lecture nghĩa là cờ này bị off, không được sử dụng. Khi sử dụng, cờ này có ba giá trị: “never” (chẳng bao giờ xuất văn bản), “once” (xuất văn bản ở lần sử dụng sudo đầu tiên), “always” (xuất văn bản bất cứ khi nào dùng sudo) trong đó “once” là giá trị mặc định. Chẳng hạn khi bật lên ở chế độ thường trực (always) thì khai báo: lecture=”always”, và mỗi lần bạn dùng sudo sẽ thấy thông báo như sau trước khi nhập mật khẩu:



– tty_tickets là cờ cho biết sudo sẽ xác thực user theo từng “tty”. Điều này có nghĩa là nếu bật cờ này lên, mỗi khi bạn mở một console hay terminal khác và sử dụng sudo thì phải gõ mật khẩu lại, cho dù bạn có nằm trong timestamp 15 phút hay không. Nếu tắt cờ này đi, trong thời gian 15 phút bạn có thể dùng sudo mà không phải gõ mật khẩu, cho dù ở tty nào. Cờ này có giá trị boolean, “true” hoặc “false”.

– fqdn là cờ báo hiệu có cần phải khai báo tên máy đầy đủ trong file sudoers hay không. Nghĩa là nếu bật cờ này lên thì trong phần hostname, thay vì ghi một tên máy “kythuatmaytinh”, bạn phải ghi đầy đủ “kythuatmaytinh.wordpress.com” với wordpress.com là domain mà máy đó thuộc vào.

Cờ này cũng có giá trị boolean.

Như vậy ta có thể thấy Ubuntu thiết lập mặc định cho cơ chế sudo của mình là: không xuất văn bản khi dùng sudo, không xác nhận theo tty và không cần phải khai báo tên domain đầy đủ trong file sudoers.

– Chỉ thị ” root ALL=(ALL) ALL” tuân theo đúng cú pháp thường gặp, có nghĩa là người dùng root, trên tất cả các máy, có thể mượn quyền tất cả các người dùng, để thực thi tất cả các lệnh.

– Chỉ thị “%admin ALL=(ALL) ALL” cũng tuân theo cú pháp đó, có nghĩa là nhóm người dùng admin, trên tất cả các máy, có thể mượn quyền tất cả các người dùng, để thực thi tất cả các lệnh.

Giả sử tôi muốn cho người dùng abel được phép tắt máy của anh ta, tôi sẽ thêm vào dòng:

abel localhost=/sbin/shutdown

Nếu không khai báo rõ target-users, sudo sẽ tự gán cho người triệu gọi sudo quyền owner của lệnh đó. Tiếp theo, tôi cho phép người dùng dongthao được phép khởi động lại apache server trên máy linux01 như sau:

dongthao linux01= /etc/init.d/apache2 restart

Bây giờ nếu muốn tôi có thể copy file sudoer này lên máy linux01 để áp dụng luật cho user monitor. Lưu lại những gì đã thiết lập bằng tổ hợp phím Ctrl-O và thoát ra chương trình thiết lập sudo bằng tổ hợp phím Ctrl-X, lúc này các rule đã bắt đầu có tác dụng.

Một số ví dụ thực tế khác

a) Cho phép user abel được thực thi nhiều lệnh với quyền root, các lệnh cách nhau bằng dấu phẩy
abel ALL=(root) /sbin/shutdown, /bin/kill, /etc/init.d/httpd
b) Cho phép user subadmin được tắt máy mà không cần phải xác nhận bằng mật khẩu
abel localhost= NOPASSWD: /sbin/shutdown
c) Cho phép user subadmin được thực hiện bất kỳ lệnh nào trong /usr/bin ở máy linux01
abel linux01 = /usr/bin/*

Kết luận

Sudo là một công cụ mạnh để thi hành chính sách bảo mật trên trạm làm việc (host-based) cho các hệ thống Ubuntu nói riêng và Linux nói chung. Với sudo, nhà quản trị có thể dễ dàng thực hiện việc giao quyền “đúng người đúng việc” và theo dõi các hành vi của người sử dụng trong hệ thống để kịp thời phát hiện các dấu hiệu xấu. Đây là nguyên tắc cơ bản cần được triển khai đầu tiên cho các hệ thống an toàn thông tin.

Bài viết cung cấp những kiến thức cơ bản nhất giúp người đọc có thể áp dụng ngay cho hệ thống Linux của mình. Sudo là công cụ rất mạnh và nhiều tùy biến nên bạn đọc nên dùng lệnh “man” với các tham số “sudo”, “visudo”, “sudoers” để tìm hiểu và sử dụng thành thạo hơn.

Lê Đình Đông Thao

Filed under: Linux-Ubuntu

Gửi phản hồi

Mời bạn điền thông tin vào ô dưới đây hoặc kích vào một biểu tượng để đăng nhập:

WordPress.com Logo

Bạn đang bình luận bằng tài khoản WordPress.com Log Out / Thay đổi )

Twitter picture

Bạn đang bình luận bằng tài khoản Twitter Log Out / Thay đổi )

Facebook photo

Bạn đang bình luận bằng tài khoản Facebook Log Out / Thay đổi )

Google+ photo

Bạn đang bình luận bằng tài khoản Google+ Log Out / Thay đổi )

Connecting to %s

Top 10 Best Hosting

HostGator Review HostGator Review
Hostgator $3.96/mo. 25% Off code: Best25PercentOff
iPage Review iPage Review
Cheapest Hosting - only $1.99/month Visit iPage
BlueHost Review BlueHost Review
Best Personal Hosting - $4.95/mo Visit BlueHost
A2Hosting Review A2Hosting Review
Best SSD Hosting - $4.97/mo Visit A2Hosting
GoDaddy Review GoDaddy Review
Best Budget Hosting - $1.99/mo Visit GoDaddy
Stablehost Review Stablehost Review
Stablehost Coupons 40% Off code: Best40PercentOff
Arvixe Review Arvixe Review
Arvixe hosting - $4/mo Visit Arvixe
InMotion Hosting Review InMotion Hosting Review
Best Business Hosting - $5.99/mo Visit InMotion
Dreamhost Review Dreamhost Review
Dreamhost $75 off code: BEST75USDOFF
IXWebHosting Review IXWebHosting Review
IXWebHosting - $3.95/mo Visit IXWebHosting
View All Web Hosting Coupons

RSS Tư vấn tin học

  • Lỗi: có thể dòng không tin đang không hoạt động. Hãy thử lại sau.

RSS USB 3G

  • Lỗi: có thể dòng không tin đang không hoạt động. Hãy thử lại sau.

RSS Di động

  • Lỗi: có thể dòng không tin đang không hoạt động. Hãy thử lại sau.

RSS Chat SMS

  • Lỗi: có thể dòng không tin đang không hoạt động. Hãy thử lại sau.

RSS Phục hồi dữ liệu

  • Lỗi: có thể dòng không tin đang không hoạt động. Hãy thử lại sau.
%d bloggers like this: