7.1. Users and Groups
Mỗi Linux user được gán một số duy nhất được gọi
là user ID hay UID.
Username mà người sử dụng đăng nhập được HĐH
chuyển đổi thành UID tương ứng.
Các username tương ứng với cùng UID có quyền
như nhau.
Có thể kiểm soát truy nhập file hoặc các tài nguyên
khác bằng cách gán nó cho một UID riêng.
Khi muốn chia sẻ 1 tài nguyên giữa nhiều người sử
dụng, ko thể gán tài nguyên đó cho tất cả các UID
tạo group
Mỗi group được gán một số duy nhất, được gọi là
group ID hoặc GID.
Group chỉ chứa được các user, không chứa các
group khác.
Một user có thể là thành viên của nhiều group.
Chỉ có thể gán một group với một tài nguyên. Ví dụ:
không thể xác định cách các user truy nhập 1 file chỉ
nếu họ thuộc group 7 hoặc group 42.
12 trang |
Chia sẻ: candy98 | Lượt xem: 636 | Lượt tải: 0
Bạn đang xem nội dung tài liệu Bài giảng Nguyên lý Hệ điều hành - Chương 7: Security - Phạm Quang Dũng, để tải tài liệu về máy bạn click vào nút DOWNLOAD ở trên
Chương 7. Security
Phạm Quang Dũng
2Mở đầu
Các HĐH ngày nay đều hỗ trợ đa người dùng
và mạng. Điều này cũng làm tăng nguy cơ
các user đọc, sửa đổi, xóa file của nhau,
hoặc bởi các hacker.
Linux kernel cung cấp nhiều chức năng để
đảm bảo rằng những sự mất an toàn trên
không diễn ra.
37.1. Users and Groups
Mỗi Linux user được gán một số duy nhất được gọi
là user ID hay UID.
Username mà người sử dụng đăng nhập được HĐH
chuyển đổi thành UID tương ứng.
Các username tương ứng với cùng UID có quyền
như nhau.
Có thể kiểm soát truy nhập file hoặc các tài nguyên
khác bằng cách gán nó cho một UID riêng.
4Users and Groups (tiếp)
Khi muốn chia sẻ 1 tài nguyên giữa nhiều người sử
dụng, ko thể gán tài nguyên đó cho tất cả các UID
tạo group
Mỗi group được gán một số duy nhất, được gọi là
group ID hoặc GID.
Group chỉ chứa được các user, không chứa các
group khác.
Một user có thể là thành viên của nhiều group.
Chỉ có thể gán một group với một tài nguyên. Ví dụ:
không thể xác định cách các user truy nhập 1 file chỉ
nếu họ thuộc group 7 hoặc group 42.
5Superuser
Là user đặc biệt, có thể thực hiện bất kỳ việc gì: đọc
tất cả các file, xóa chúng, thêm user, tắt kết nối
mạng
Có UID 0 và thường có username root.
67.2. UID và GID của tiến trình
Tất cả tiến trình được gán vào một UID và GID.
Khi bạn gọi 1 lệnh, nó thường chạy trong 1 tiến trình
có UID và GID giống như UID và GID của bạn.
Khi cần sử dụng UID và GID trong chương trình:
sử dụng kiểu uid_t và gid_t xác định trong
dùng hàm geteuid() và getegid() được khai báo trong
Listing 10.1 (simpleid.c): lấy UID và GID của tiến
trình hiện tại.
77.3. File System Permissions
Mỗi file có chính xác một user và một group sở hữu. Khi bạn tạo
1 file mới, file được sở hữu bởi user và group của tiến trình tạo
file.
Các thao tác cơ bản với các file: đọc từ file, ghi lên file, và thực
hiện chúng (read, write, execute).
Lệnh xem quyền:
% ls –l tên_file hoặc ls –o tên_file
Lệnh thiết lập quyền:
% chmod o+x tên_file // thêm quyền thực thi cho other
% chmod g-w tên_file // bớt quyền ghi của group
8File System Permissions (tiếp)
Trong lập trình, để lấy thông tin quyền đối với 1 file, sử
dụng system call:
stat(filename, biến kiểu struct stat)
chmod(“tên_file”, danh sách quyền)
để thiết lập quyền đối với file:
S_IWUSR: quyền write đối với owner
S_IRGRP: quyền read đối với group
S_IXOTH: quyền execute đối với other
Vd: chmod(“hello”, S_IRUSR | S_IXUSR)
Muốn lưu quyền vào 1 biến, sử dụng biến kiểu mode_t
Listing 10.2 (stat-perm.c): xác định quyền ghi file của owner.
9Sticky bit
Là một “magic bit” chỉ áp dụng cho thư mục.
Thư mục có thiết lập sticky bit chỉ cho phép bạn xóa
file nếu bạn là chủ sở hữu của file đó, nhưng vẫn cho
phép truy nhập ghi lên file.
Một số ít thư mục của hệ thống GNU/Linux có thiết lập
sticky bit, ví dụ như /tmp. Thư mục này được thiết kế
cho tất cả các user, vì vậy mọi người đều có thể ghi,
nhưng không được xóa file của nhau.
10
Sticky bit (tiếp)
Xem thiết lập sticky bit (chữ t ở cuối các bit chỉ quyền):
% ls –ld /tmp (hãy thử dòng lệnh này)
Lệnh thiết lập sticky bit:
% chmod o+t thư_mục
Trong lập trình:
chmod(dir_path, S_IRWXU | S_IRWXG |
S_IRWXO | S_ISVTX)
(thiết lập quyền read, write, execute cho cả owner,
group, others và thiết lập sticky bit đối với thư mục).
11
7.4. Xác thực người sử dụng
Khi quản trị một hệ thống an ninh cao, chống đăng
nhập chỉ bằng password là không đủ.
GNU/Linux cung cấp thư viện Pluggable
Authentication Modules (PAM), giúp người lập trình
thực hiện việc xác thực người sử dụng.
Listing 10.4 (pam.c): xác thực password của user
hiện tại
Biên dịch: phải liên kết chương trình với 2 thư viện như sau:
% gcc –o pam pam.c –lpam –lpam_misc
12
Ví dụ chạy chương trình
Giả sử password của user hiện tại là 123456
Khi gõ đúng mật khẩu:
% ./pam
Password: 123456
Authentication OK.
Khi gõ sai:
% ./pam
Password: 654321
Authentication failed!