Chuyển đến nội dung chính

Re-learning Linux - Permission


Có lẽ hầu hết những người sử dụng Linux đều biết quyền hạn của 1 file hay folder được đại diện bởi r (read), w (write), x (execute) như hình dưới đây:
alt text


Và ta có thể biểu diễn 9 kí tự cuối trong hình trên bằng số theo luật
  • Read = 4
  • Write = 2
  • Execute = 1
  • No Permission = 0
Vậy như hình trên, giá trị số sẽ là: 744 (r + w + x = 7, r = 4, r = 4)
Chúng ta cùng thử kiểm tra quyền của file /usr/bin/passwd :
ls -l /usr/bin/passwd
Và đây là kết quả:
-rwsr-xr-x. 1 root root 27832 Jun 10  2014 /usr/bin/passwd
Điều tôi chú ý là phần permission của file rws's' là gì?
Xét thêm một lệnh nữa:
ls -l -d /tmp # option -d là để hin ththông tin quyền hn ca mt thư mc
Kết quả
drwxrwxrwt. 8 root root 4096 Apr 15 04:44 /tmp
Cũng trong phần permission của thư mục tmp, 't' là gì
Vậy 2 kí tự 's' và 't' là gì?

SUID

Ta cùng quay lại với kết quả của đoạn lệnh ls -l /usr/bin/passwd
Kết quả là -rwsr-xr-x. 1 root root 27832 Jun 10 2014 /usr/bin/passwd
Với passwd là lệnh để thay đổi password của người dùng hiện tại. Khi thực thi lệnh passwd sẽ cố gắng để thay đổi nội dung của 2 file dưới đây:
  • /etc/passwd: File chứa thông tin về username, user id, password đã mã hoá hay chưa...
  • /etc/shadow: File chứa thông tin về password của người dùng và thời gian hiệu lực của password
Như vậy, rõ ràng để chạy được lệnh passwd, user thực thi phải chạy passwd dưới quyền của super user bằng cách thêm sudo vào trước.
foo là một người dùng trên linux. Ta dễ dàng tạo người dùng foo bằng lệnh useradd foofoo có quyền hạn rất hạn chế. Dĩ nhiên foo cũng không có quyền ghi vào file /etc/passwd hay /etc/shadow. Tuy nhiên, foo có thể chạy được lệnh passwd để thay đổi password của chính mình mà không cần thiết phải thêm sudo vào phía trước. Điều này thực hiện được là nhờ SUID, được thể hiện bởi chữ 's' ở phần quyền hạn của owner.
SUID = Set owner User ID up on execution. Người thực thi file sẽ được mượn quyền hạn của người sở hữu tại thời điểm thực thi.
Có hai cách để thực hiện SUID cho file
  • Theo kí hiệu (Symbolic way) chmod u+s file1
  • Theo chữ số (Numberic way) chmod 4750 file1
Tuy nhiên, sau khi chạy lệnh trên, đôi khi bạn sẽ thấy xuất hiện kí tự 'S' chứ không phải 's' như hình dưới đây.
-rwSrw-r--. 
Lý do là do bạn chưa cấp quyền thực thi file1 cho người sở hữu. Thêm đoạn lệnh dưới đây, ta sẽ thấy kí tự 'S' thành 's'
sudo chmod u+x file1
*Utils:
  • Xóa SUID cho file đã set chmod u-s file1
  • Tìm tất cả các file có SUID find / -perm +4000

SGID

SGID = Set Group ID up on execution. Nhóm thực thi file sẽ được mượn quyền hạn của nhóm sở hữu tại thời điểm thực thi.
SGID hoàn toàn giống với SUID, chỉ khác cái là ta set quyền thực thi cho một nhóm. Tương tự như SUID, ta có thể thực hiện SGID theo hai cách như dưới đây:
  • Theo kí hiệu (Symbolic way) chmod g+s file1
  • Theo chữ số (Numberic way) chmod 2750 file1
Xóa SGID
chmod g-s file1

Sticky Bit

Linux là một môi trường đa người dùng đồng thời, vì vậy bên cạnh việc giới hạn quyền nhằm đảm bảo tính an toàn cho hệ thống, Linux cần phải có cơ chế để chia sẻ tài nguyên giữa các người dùng với nhau. Sticky Bit được sinh ra như một công cụ giúp giải quyết vấn đề chia sẻ file hay folder giữa các người dùng.
Quay lại ví dụ với folder tmp. Khi thực thi đoạn lệnh ls -l -d /tmp, ta được kết quả drwxrwxrwt. 8 root root 4096 Apr 15 04:44 /tmp. Kí tự 't' trong phẩn permission drwxrwxrw*t* chính là Stickybit.
Sticky bit được áp dụng cho folder. Nội dung trong folder (file, thư mục con) chỉ được xóa (hoặc đổi tên) bởi người tạo ra chúng hoặc root user.
Có hai cách để thực hiện set Sticky bit cho file
  • Theo kí hiệu (Symbolic way) chmod o+t /opt/dump/
  • Theo chữ số (Numberic way) chmod 1750 /opt/dump/
Remove sticky bit cho folder
chmod o-t /opt/dump/

Tổng kết

Linux là một môi trường đa người dùng đồng thời, vì vậy, việc giới hạn quyền và chia sẻ tài nguyên là một việc hết sức cần thiết nhằm đảm bảo tính an toàn nhưng vẫn linh hoạt của hệ thống. SUID, SGID, Sticky bit sẽ giúp đảm bảo những điều nêu trên một cách rõ ràng và chặt chẽ hơn:
  • SUID = Set owner User ID up on execution - Đại diện bởi 4000
  • SGID = Set owner Group ID up on execution - Đại diện bởi 2000
  • Sticky Bit - Đại diện bởi 1000

Hi vọng bài viết này giúp ích cho những bạn muốn tìm hiểu thêm về permission trong Linux.

Nhận xét

Bài đăng phổ biến từ blog này

So sánh giấy phép mã nguồn mở Apache, MIT, GPL

Mã nguồn mở ngày nay đã và đang trở nên phổ biến hơn bao giờ hết, những dự án mã nguồn mở có thể được tìm thấy hầu như ở bất kì đâu trên không gian mạng rộng lớn này. Tuy nhiên dù có “mở” đi chăng nữa thì những phần mềm mã nguồn mở phải tuân theo những giấy phép nhất định. Điển hình là 3 loại giấy phép phổ biến nhất là Apache, MIT và GPL. Vậy, giữa chúng có gì khác nhau. Trước hết, giấy phép mã nguồn mở là một loại giấy phép được sử dụng cho các phần mềm mã nguồn mở. Giấy phép này cho phép bất kì cá nhân hay tổ chức nào cũng có thể nghiên cứu, thay đổi, chỉnh sửa và cải tiến phần mềm, và phân phối ở các dạng khác nhau như thay đổi hoặc chưa thay đổi. Giấy phép Apache Giấy phép Apache ra đời bởi Quỹ Phần mềm Apache (Apache Software Foundation - ASF). Đây là một giấy phép phần mềm tự do, không có copyleft, bắt buộc trong việc thông báo bản quyển và lời phủ nhận. Giấy phép này hoạt động như các giấy phép phần mềm mã nguồn mở khác, trao cho người sử dụng phần mềm quyền tự do trong b

Mã hóa đối xứng và bất đối xứng

Hôm nay mình xin được nói về hai thuật toán cơ bản và quan trong nhất trong bảo mật đó là mã hóa đối xứng và mã hóa bất đối xứng . 1. Mã hóa đối xứng (mã hóa không công khai- symmetric-key algorithms ) - Là lớp thuật toán các mã hóa trong đó việc mã hóa và giải mã đều dùng chung cho 1 khóa (secret key) 1.1 Các loại thuật toán khóa đối xứng Thuật toán đối xứng có thể được chia ra làm hai thể loại, mật mã luồng ( stream ciphers ) và mật mã khối ( block ciphers ). Mật mã luồng mã hóa từng bit của thông điệp trong khi mật mã khối gộp một số bit lại và mật mã hóa chúng như một đơn vị. Cỡ khối được dùng thường là các khối 64 bit. Thuật toán tiêu chuẩn mã hóa tân tiến ( Advanced Encryption Standard ), được NIST công nhận tháng 12 năm 2001, sử dụng các khối gồm 128 bit. Các thuật toán đối xứng thường không được sử dụng độc lập. Trong thiết kế của các hệ thống mật mã hiện đại, cả hai thuật toán bất đối xứng ( asymmetric ) (dùng chìa khóa công khai) và thuật toán đối xứng được sử

Chuyện nghề Kiểm thử an toàn thông tin

Từ hồi đi làm đến giờ, tôi gặp nhiều tình huống không biết nên trả lời thế nào cho đúng, hôm nay ghi lại đây để mai mốt ai có gặp tham khảo. Khi được liên hệ, tôi thấy đa phần các đơn vị làm xong rồi mới nghĩ đến chuyện kiểm thử, thậm chí là bị hack rồi mới nghĩ tới. Việc pentest nên được triển khai ngay từ khi Phân tích thiết kế hệ thống . Các luồng đi của dữ liệu khi phác thảo ý tưởng ở trên giấy cũng cần kiểm tra tính an toàn, nếu để đến khi đã ra sản phẩm rồi thì đi sửa lại mất nhiều thời gian, công sức hơn nhiều, thậm trí sửa lại sinh ra lỗi mới. Nhiều người vẫn đánh giá các sản phẩm cầm nắm được giá trị hơn sản phẩm trí tuệ, hay sáng tạo. Giống thằng em tôi làm graphic designer hay "được nhờ" vẽ hộ logo hai cái này cái kia, có khi mất cả ngày hoặc nhiều hơn, trong khi không được đồng nào, có khi còn bị chê :)). Nếu làm tốt việc gì đó, đừng bao giờ làm miễn phí hoặc lấy giá quá rẻ . Nghe đồn Louis Vutton đốt trụi rũi hàng ế, chứ chưa bao giờ chịu giảm giá. Relax với chuy