Bài Lab số 3 Thực hiện công việc với quyền của người khác Unix là hệ điều hành đa người dùng, cho nên mỗi người dùng được sở hữu một tập các file nào đó cho riêng mình.Ta gọi đó là các file riêng tư (private). Nếu như các file này hạn chế các quyền truy cập đối với những người khác thì khi muốn làm việc với các file riêng tư ta cần phải đăng nhập dưới tài khoản của người dùng sở hữu nó. Tuy nhiên việc đăng nhập bằng tài khoản của người khác là điều không khả thi, vì nó vi phạm tính bảo mật của hệ thống. Do đó cần có 1 cơ chế hỗ trợ người dùng này có thể thực hiện một số công việc như người dùng khác. Trong Unix chúng ta sẽ làm quen với lệnh SUDO. Tình huống ví dụ: giả sử bạn là người dùng khmt. Khi đăng nhập vào hệ thống,thì các thông tin được lưu trong file /var/log/messages. Thực hiện 1 số việc như sau: 1. $ cd /var/log 2. $ tail messages tail : cannot open `messages` for reading: Permission denied ……..Lý do? 3. $ ls –l messages - rw- --- --- 1 root root 646 Feb 26 18:01 messages Như vậy file messages chỉ cho phép người dùng quản trị (ROOT) được quyền đọc và ghi. Trong Unix có 1 lệnh SUDO – “superuser do” tức là cho phép người dùng sử dụng lệnh này để lấy quyền của người quản trị ROOT. Tiếp tục công việc? 4. $ sudo tail messages Password: xxxxxx Sorry, user khmt is not allowed to execute `messages` as root. Hoặc: khmt is not in the sudoers file. This incident will be reported. Điều đó có nghĩa là người dùng KHMT không được khai báo trong SUDOERS file, nên không thực hiện được quyền của ROOT. Vậy làm thế nào để thực hiện được? Như vậy để người dùng KHMT được sử dụng quyền của ROOT thì trong file SUDOERS phải có khai báo gì đó liên quan đến công việc này. File SUDOERS thực chất là file: /etc/sudoers. Chúng ta có 1 số chú ý như sau: • File /etc/sudoers chỉ được quyền đọc bởi người dùng quản trị (ROOT) và nhóm người dùng quản trị (ROOT). • Để thay đổi nội dung cho file thì cần 1 tool đặc biệt có tên: VISUDO : /usr/sbin/visudo. Và để thực hiện được thì cần phải đăng nhập dưới quyền của ROOT. Khi đó ta sẽ thay đổi nội dung bằng cú pháp: $ visudo –f /etc/sudoers . Xem: man visudo để thêm thông tin cần thiết khi sử dụng: VISUDO. • Cấu trúc của file SUDOERS có 3 phần, chúng ta cần phải tuân thủ các cú pháp khi khai báo trong file. Các phần như sau: o Aliases. o Defaults. o User specification. • Trong cấu trúc ALIASES cho phép chúng ta định nghĩa danh sách tên các người dùng (users), tên máy (hosts) hay các câu lệnh (commands).Ý nghĩa các kiểu Alias như sau: o User_Alias : định nghĩa danh sách các người dùng có thể thực hiện các câu lệnh với quyền của người dùng khác. o Runas_Alias : định nghĩa danh sách các người dùng mà câu lệnh khi thực hiện với quyền của các người dùng này. o Host_Alias : định nghĩa danh sách các máy mà trên đó chạy các câu lệnh.
o Cmnd_Alias : định nghĩa danh sách các câu lệnh cho phép người dùng thực hiện. Cú pháp định nghĩa các danh sách như sau: Alias_Type NAME = Item1, Item2,…ItemN • Trong cấu trúc DEFAULTS có rất nhiều tham số. Ví dụ như tham số TIMESTAMP_TIMEOUT dùng để xác định khoảng thời gian lưu giá trị PASSWORD mà không cần nhập lại. mặc định giá trị bằng 5 phút. Xem: man sudoers để hiểu rõ hơn. • Trường USER_SPECIFICATION : dùng để xác định một cách cụ thể các câu lệnh nào sẽ được thực hiện bởi các người dùng nào. Cú pháp của nó như sau: ID HOST = (USER) COMMANDS Tức là với người dùng cụ thể (ID) thì trên các máy (HOST) được quyền thực hiện các câu lệnh (COMMANDS) với quyền thực hiện như là người dùng (USER) • Dưới đây là 1 ví dụ về file /etc/sudoers User_Alias ADMINS = jeff, mike, chad, steve, jen, george, jay User_Alias WEBMASTERS = dave, kevin User_Alias DBAS = jason, hans Runas_Alias ADMIN_ACCOUNTS = root, operator Runas_Alias DBA_ACCOUNTS = oracle Host_Alias WEBSERVERS = apple, orange, pear Host_Alias DATABASES = banana, peach, kiwi Cmnd_Alias BACKUP = /usr/lib/ufs/ufsdump, /usr/lib/ufs/ufsrestore, \ /usr/bin/tar Cmnd_Alias MAINTENANCE = /sbin/init, /usr/sbin/shutdown, /usr/sbin/reboot Cmnd_Alias WEBPROGS = /usr/local/apache/bin/ Defaults logfile=/var/log/sudo.log # Allow users in the Unix wheel group to run anything as any user %wheel ALL = (ALL) ALL # Allow admins to perform backup and maintenance tasks on all machines ADMINS ALL = (ADMIN_ACCOUNTS) BACKUP, MAINTENANCE # Allow DBA's to perform maintenance tasks on the database servers and # run Oracle scripts as the oracle user. We can assign multiple permissions # to a single user alias by separating them with a colon. DBAS DATABASES = (ADMIN_ACCOUNTS) MAINTENANCE : \ DATABASES = (DBA_ACCOUNTS) /u01/app/oracle/product/8.1.7/bin/ # Allow webmasters to run Apache maintenance scripts in /usr/local/apache/bin WEBMASTERS WEBSERVERS = (ADMIN_ACCOUNTS) /usr/local/apache/bin/
Các công việc cần làm 1. Tạo ra trong hệ thống 3 người dùng: khmt, svk49, mylinux có thể nằm trong các nhóm khác nhau. Ví dụ: Tạo 1 người dùng mới qua các bước như sau (bạn đang là root): • Tạo 1 nhóm làm việc có tên: sv thông qua lệnh : groupadd. • Tạo 1 thư mục có tên là: k49 trong thư mục home: /home/k49 • Thông qua lệnh : man , tìm hiểu lệnh : useradd, để thêm 1 người dùng có tên: k49, làm việc trong nhóm: sv, có thư mục gốc là : /home/k49, và có password là 123456. 2. Truy cập với quyền của: root, rồi dùng visudo để biên tập lại file /etc/sudoers. Nội dung biên tập như sau: a. Định nghĩa nhóm ADMINS bao gồm người dùng: khmt
b. c. d. e.
Định nghĩa nhóm FRIEND bao gồm : svk49 và mylinux. Định nghĩa nhóm ADMIN_ACC với quyền thực thi là : root Định nghĩa nhóm FRIEND_ACC với quyền thực thi là : khmt Định nghĩa nhóm câu lệnh ADMIN_CMD bao gồm các lệnh trong thư mục /usr/sbin/, /usr/bin/ f. Định nghĩa nhóm câu lệnh FRIEND_CMD bao gồm các lệnh trong thư mục /usr/bin/ g. Khai báo quyền thực hiện các câu lệnh ADMIN_CMD đối với nhóm ADMINS như là nhóm ADMIN_ACC và không cần nhập mật khẩu khi thực hiện. h. Khai báo quyền thực hiện các câu lệnh FRIEND_CMD đối với nhóm FRIENDS như là nhóm FRIEND_ACC và yêu cầu mật khẩu khi thực hiện. i. Sau khi biên tập xong,kiểm tra cú pháp bằng visudo –c. 3. Mở 1 cứa sổ SHELL khác và đăng nhập với người dùng : khmt. Thực hiện 1 số lệnh sau: a. Đọc dữ liệu file /var/log/messages bằng lệnh: tail b. Chuyển sang người dùng: svk49 thông qua lệnh: su svk49 c. Xác định User ID thông qua lệnh : id d. Làm tương tự nhưng dùng lệnh: sudo –u khmt id và giải thích kết quả. 4. Khi các file ghi nhận sự kiện quá dài, chúng ta có thể xóa nội dung của nó.Hãy thực hiện việc xóa nội dung file /var/log/message và /var/log/wtmp bằng cách sử dụng: /dev/null.