Câu lệnh thiết lập sticky bit trong linux

Chmod hay sticky bits là những chế độ permission đặc biệt đáng chú ý trong VPS Linux, trong đó SUID và GUID thường được disable trong một vài hệ điều hành vì lý do bảo mật.

Mode Mô tả
Sticky bit Được sử dụng cho các thư mục chia sẻ, mục đích là ngăn chặn việc người dùng này xóa file của người dùng kia. Chỉ duy nhất owner file (và root) mới có quyền rename hay xóa các file, thư mục khi nó đã được set sticky bit. sticky bit được môt tả bằng chữ cái “t” ở dòng cuối cùng của hiển thị permission.
SUID SUID hay Set user ID, được sử dụng trên các file thực thi (executable files) để cho phép việc thực thi được thực hiện dưới owner của file thay vì thực hiện như user đang loggin trong hệ thống. .
SUID cũng có thể được sử dụng để thay đổi ownership của files được tạo hoặc di chuyển nó đến một thư mục mà owner của nó sẽ là owner của thư mục chuyển đến thay vì là owner nó được tạo ra.
SGID SGID hay Set group ID, cũng tương tự như SUID, được sử dụng trên các file thực thi (executable files) để cho phép việc thực thi được thực hiện dưới owner group của file thay vì thực hiện như group đang loggin trong hệ thống. .
SGID cũng có thể được sử dụng để thay đổi ownership group của files được tạo hoặc di chuyển nó đến một thư mục mà owner group của nó sẽ là owner group của thư mục chuyển đến thay vì là group nó được tạo ra.

Ví dụ sau sẽ cho thấy SUID permission được set trên lệnh passwd với chữ cái s. Để thay đổi password, và do passwd được owner bới root nên lệnh passwd phải được thưc thi bởi root, ngoài ra không một user nào có quyền thực thi với lệnh passwd này.

$ which passwd
/usr/bin/passwd
$ ls -l /usr/bin/passwd
-r-s–x–x 1 root root 17700 Jun 25 2004 /usr/bin/passwd

Sticky bit có sử dụng tùy chọn “t” cùng với lệnh chmod để thiết lập. Ngoài ra còn có một cách khác như sau:

Cách 1:
$ chmod 777 public
$ chmod +t public
$ ls -l
total 4
drwxrwxrwt 2 tclark authors 4096 May 15 10:45 public

Cách 2:

$ chmod 1777 public
$ ls -l
total 4
drwxrwxrwt 2 tclark authors 4096 May 15 10:45 public

Now let’s say we instead want to make a directory which other users can copy files but which we want the files to instantly become owned by our username and group. This is where the SUID and SGID options come in.

$ mkdir drop_box
$ chmod 777 drop_box
$ chmod u+s,g+s drop_box
$ ls -l
total 4
drwsrwsrwx 2 tclark authors 4096 Sep 14 10:55 drop_box

Now anyone can move files to this directory but upon creation in drop_box they will become owned by tclark and the group authors. This example also illustrates how you can change multiple levels of permissions with a single command by separating them with a comma. Just like with the other permissions this could have been simplified into one command using the SUID and SGID numeric values (4 and 2 respectively.) Since we are changing both in this case we use 6 as the first value for the chmod command.

$ chmod 6777 drop_box/
$ ls -l
total 4
drwsrwsrwx 2 oracle users 4096 Sep 14 10:55 drop_box

SUID, SGID và Sticky Bit là những quyền đặc biệt mạnh mẽ mà bạn có thể đặt cho các tệp thực thi và thư mục trên Linux. Chúng tôi sẽ chia sẻ những lợi ích — và những cạm bẫy tiềm ẩn — khi sử dụng chúng.

  • Chúng đã được sử dụng
  • Nâng cao trạng thái của bạn
  • Bạn đang nâng cao trạng thái của chương trình
  • Các lệnh Linux sử dụng SUID
  • Đặt Bit SUID
  • Bit SGID
  • Bit dính
  • Nhắc nhở
    • Share this post!

Xây dựng bảo mật thành một hệ điều hành đa người dùng đưa ra một số vấn đề. Lấy ví dụ về khái niệm cơ bản (dường như) về mật khẩu. Tất cả chúng đều phải được lưu trữ để mỗi khi ai đó đăng nhập, hệ thống có thể so sánh mật khẩu người đó nhập với bản sao đã lưu trữ. Rõ ràng, vì mật khẩu là chìa khóa của vương quốc nên chúng phải được bảo vệ an toàn.

Trên Linux, mật khẩu được lưu trữ được bảo vệ theo hai cách: chúng được mã hóa và chỉ ai đó có đặc quyền root mới có thể truy cập tệp chứa mật khẩu. Điều đó nghe có vẻ ổn, nhưng nó đưa ra một vấn đề nan giải: Nếu chỉ những người có đặc quyền root mới có thể truy cập mật khẩu được lưu trữ, thì những người không có quyền truy cập đó sẽ thay đổi mật khẩu của họ như thế nào?

Nâng cao trạng thái của bạn

Thông thường, các lệnh và chương trình Linux chạy với cùng một bộ quyền như người khởi chạy chương trình. Khi root chạy lệnh passwd để thay đổi mật khẩu, nó chạy với quyền của root. Điều đó có nghĩa là lệnh passwd có thể tự do truy cập các mật khẩu được lưu trữ trong tệp / etc / shadow.

Điều lý tưởng sẽ là một sơ đồ trong đó bất kỳ ai trong hệ thống đều có thể khởi chạy chương trình mật khẩu, nhưng chương trình mật mã vẫn giữ lại các đặc quyền nâng cao của người chủ. Điều này sẽ cho phép bất kỳ ai thay đổi mật khẩu của chính cô ấy.

Tình huống trên chính xác là những gì mà bit Set User ID (SUID) thực hiện. Nó chạy các chương trình và lệnh với quyền của chủ sở hữu tệp, thay vì quyền của người khởi chạy chương trình.

Bạn đang nâng cao trạng thái của chương trình

Tuy nhiên, có một vấn đề khó khăn khác. Người đó phải được ngăn chặn việc can thiệp vào mật khẩu của bất kỳ ai khác. Linux kết hợp lược đồ SUID cho phép nó chạy các ứng dụng với một tập hợp các quyền được mượn tạm thời — nhưng đó mới chỉ là một nửa của câu chuyện bảo mật.

Cơ chế kiểm soát ngăn ai đó làm việc với mật khẩu của người khác được chứa trong chương trình mật khẩu, không phải hệ điều hành và lược đồ SUID.

Các chương trình chạy với các đặc quyền nâng cao có thể gây ra rủi ro bảo mật nếu chúng không được tạo với tư duy “bảo mật theo thiết kế”. Điều đó có nghĩa là bảo mật là điều đầu tiên bạn xem xét và sau đó bạn xây dựng dựa trên điều đó. Đừng viết chương trình của bạn, và sau đó cố gắng tạo cho nó một lớp bảo mật sau đó.

Ưu điểm lớn nhất của phần mềm nguồn mở là bạn có thể tự xem mã nguồn hoặc tham khảo các đánh giá đồng cấp đáng tin cậy về nó. Trong mã nguồn của chương trình passwd, có các kiểm tra, vì vậy bạn có thể xem liệu người đang chạy chương trình có phải là root hay không. Các khả năng khác nhau được phép nếu ai đó là root (hoặc ai đó sử dụng sudo).

Điều này là mã phát hiện ai đó có phải là root hay không.

Sau đây là một ví dụ được tính đến. Bởi vì root có thể thay đổi bất kỳ mật khẩu nào, chương trình không phải bận tâm đến các kiểm tra mà nó thường thực hiện để xem mật khẩu nào mà người đó có quyền thay đổi. Vì vậy, đối với root, nó bỏ qua các kiểm tra đó và thoát khỏi chức năng kiểm tra.

Câu lệnh thiết lập sticky bit trong linux

Với các lệnh và tiện ích cốt lõi của Linux, bạn có thể tin tưởng rằng chúng đã được bảo mật và mã đã được xem xét nhiều lần. Tất nhiên, luôn có mối đe dọa của các vụ khai thác chưa được biết đến. Tuy nhiên, các bản vá hoặc bản cập nhật nhanh chóng xuất hiện để chống lại mọi lỗ hổng mới được xác định.

Đó là phần mềm của bên thứ ba — đặc biệt là bất kỳ phần mềm nào không phải là mã nguồn mở — bạn cần phải cực kỳ cẩn thận khi sử dụng SUID với. Chúng tôi không nói rằng đừng làm điều đó, nhưng nếu bạn làm vậy, bạn muốn đảm bảo rằng nó sẽ không khiến hệ thống của bạn gặp rủi ro. Bạn không muốn nâng cao các đặc quyền của một chương trình sẽ không tự quản lý chính nó và người điều hành nó.

Các lệnh Linux sử dụng SUID

Sau đây là một số lệnh Linux sử dụng bit SUID để cung cấp các đặc quyền nâng cao cho lệnh khi được chạy bởi người dùng thông thường:

ls -l /bin/su
ls -l /bin/ping
ls -l /bin/mount
ls -l /bin/umount
ls -l /usr/bin/passwd

Câu lệnh thiết lập sticky bit trong linux

Lưu ý rằng các tên tệp được đánh dấu màu đỏ, điều này cho biết bit SUID đã được đặt.

Các quyền trên một tệp hoặc thư mục thường được biểu thị bằng ba nhóm ba ký tự: rwx. Đây là viết tắt của đọc, ghi và thực thi. Nếu các chữ cái hiện diện, quyền đó đã được cấp. Tuy nhiên, nếu có dấu gạch ngang (-) thay cho chữ cái, thì quyền đó chưa được cấp.

Có ba nhóm quyền này (từ trái sang phải): những quyền dành cho chủ sở hữu tệp, cho các thành viên của nhóm tệp và cho những người khác. Khi bit SUID được đặt trên một tệp, “s” đại diện cho quyền thực thi của chủ sở hữu.

Nếu bit SUID được đặt trên tệp không có khả năng thực thi, thì chữ hoa “S” biểu thị điều này.

Chúng ta sẽ xem xét một ví dụ. Người dùng thông thường dave gõ lệnh passwd:

passwd

Câu lệnh thiết lập sticky bit trong linux

Lệnh passwd sẽ nhắc nhập mật khẩu mới của anh ấy. Chúng ta có thể sử dụng lệnh ps để xem chi tiết về các quy trình đang chạy.

Chúng tôi sẽ sử dụng ps với grep trong một cửa sổ đầu cuối khác và tìm kiếm quá trình passwd. Chúng tôi cũng sẽ sử dụng các tùy chọn -e (mọi quy trình) và -f (định dạng đầy đủ) với ps.

Chúng tôi gõ lệnh sau:

ps -e -f | grep passwd

Câu lệnh thiết lập sticky bit trong linux

Hai dòng được báo cáo, dòng thứ hai là quá trình grep tìm kiếm các lệnh có chuỗi “passwd” trong đó. Tuy nhiên, đó là dòng đầu tiên khiến chúng tôi quan tâm, bởi vì đó là dòng cho dave quá trình thụ động được khởi chạy.

Chúng ta có thể thấy quá trình passwd chạy giống như khi root đã khởi chạy nó.

Đặt Bit SUID

Thật dễ dàng để thay đổi bit SUID bằng chmod. Chế độ biểu tượng u + s đặt bit SUID và chế độ biểu tượng chúng tôi xóa bit SUID.

Để minh họa một số khái niệm về bit SUID, chúng tôi đã tạo một chương trình nhỏ gọi là htg. Nó nằm trong thư mục gốc của người dùng dave và nó không có bộ bit SUID. Khi được thực thi, nó sẽ hiển thị các ID người dùng thực và hiệu quả (UID).

Sự thật UID thuộc về người phát động chương trình. ID có hiệu lực là tài khoản mà chương trình đang hoạt động như thể nó đã được khởi chạy bởi.

Chúng tôi gõ như sau:

ls -lh htg
./htg

Câu lệnh thiết lập sticky bit trong linux

Khi chúng tôi chạy bản sao cục bộ của chương trình, chúng tôi thấy ID thực và hiệu quả đều được đặt thành dave. Vì vậy, nó hoạt động giống như một chương trình bình thường.

Hãy sao chép nó vào thư mục / usr / local / bin để những người khác có thể sử dụng nó.

Chúng tôi nhập như sau, sử dụng chmod để đặt bit SUID, sau đó kiểm tra xem nó đã được đặt chưa:

sudo cp htg /usr/local/bin
sudo chmod u+s /usr/local/bin/htg
ls -hl /usr/local/bin/htg

Câu lệnh thiết lập sticky bit trong linux

Vì vậy, chương trình được sao chép và bit SUID được đặt. Chúng tôi sẽ chạy lại, nhưng lần này chúng tôi sẽ chạy bản sao trong thư mục / usr / local / bin:

htg

Câu lệnh thiết lập sticky bit trong linux

Ngay cả khi dave đã khởi chạy chương trình, ID hiệu quả vẫn được đặt cho người dùng root. Vì vậy, nếu mary khởi chạy chương trình, điều tương tự sẽ xảy ra, như hình dưới đây:

htg

Câu lệnh thiết lập sticky bit trong linux

ID thực là mary và ID hiệu quả là root. Chương trình chạy với quyền của người dùng root.

Bit SGID

Bit Set Group ID (SGID) rất giống với bit SUID. Khi bit SGID được đặt trên tệp thực thi, nhóm hiệu quả được đặt thành nhóm của tệp. Quá trình chạy với quyền của các thành viên trong nhóm của tệp, thay vì quyền của người đã khởi chạy tệp đó.

Chúng tôi đã điều chỉnh chương trình htg của mình để nó cũng hiển thị nhóm hiệu quả. Chúng tôi sẽ thay đổi nhóm của chương trình htg thành nhóm mặc định của người dùng mary, mary. Chúng tôi cũng sẽ sử dụng các chế độ biểu tượng us và g + s với chown để loại bỏ bit SUID và đặt SGID.

Để làm như vậy, chúng tôi nhập như sau:

sudo chown root:mary /usr/local/bin/htg
sudo chmod u-s,g+s /usr/local/bin/htg
ls -lh /usr/local/bin/htg

Câu lệnh thiết lập sticky bit trong linux

Bạn có thể thấy bit SGID được biểu thị bằng chữ “s” trong quyền nhóm. Ngoài ra, hãy lưu ý rằng nhóm được đặt thành mary và tên tệp hiện được đánh dấu bằng màu vàng.

Trước khi chạy chương trình, chúng ta hãy xác định dave và mary thuộc về nhóm nào. Chúng tôi sẽ sử dụng lệnh id với tùy chọn -G (nhóm), để in tất cả các ID nhóm. Sau đó, chúng tôi sẽ chạy chương trình htg dưới dạng dave.

Chúng tôi gõ các lệnh sau:

id -G dave
id -G mary
htg

Câu lệnh thiết lập sticky bit trong linux

ID của nhóm mặc định cho mary là 1001 và nhóm hiệu quả của chương trình htg là 1001. Vì vậy, mặc dù được khởi chạy bởi dave, nhưng nó đang chạy với quyền của các thành viên trong nhóm mary. Nó giống như thể dave đã tham gia nhóm mary.

Hãy áp dụng bit SGID cho một thư mục. Đầu tiên, chúng tôi sẽ tạo một thư mục có tên là “công việc”, sau đó thay đổi nhóm của nó thành “geek”. Sau đó, chúng tôi sẽ đặt bit SGID trên thư mục.

Khi chúng tôi sử dụng ls để kiểm tra cài đặt của thư mục, chúng tôi cũng sẽ sử dụng tùy chọn -d (directory) để chúng tôi xem chi tiết của thư mục chứ không phải nội dung của nó.

Chúng tôi gõ các lệnh sau:

sudo mkdir work
sudo chown dave:geek work
sudo chmod g+s work
ls -lh -d work

Câu lệnh thiết lập sticky bit trong linux

Bit SGID và nhóm “geek” được thiết lập. Những điều này sẽ ảnh hưởng đến bất kỳ mục nào được tạo trong thư mục công việc.

Chúng tôi gõ như sau để vào thư mục công việc, tạo một thư mục có tên là “demo” và kiểm tra các thuộc tính của nó:

cd work
mkdir demo
ls -lh -d demo

Câu lệnh thiết lập sticky bit trong linux

Bit SGID và nhóm “geek” được tự động áp dụng cho thư mục “demo”.

Hãy nhập dòng sau để tạo tệp với chạm vào lệnh và kiểm tra các thuộc tính của nó:

touch useful.sh
ls -lh useful.sh

Câu lệnh thiết lập sticky bit trong linux

Nhóm của tệp mới được tự động đặt thành “geek”.

Bit dính

Bit dính lấy tên từ mục đích lịch sử của nó. Khi được đặt trên một tệp thực thi, nó đã gắn cờ cho hệ điều hành rằng các phần văn bản của tệp thực thi phải được giữ trong sự hoán đổi, giúp việc sử dụng lại chúng nhanh hơn. Trên Linux, bit dính chỉ ảnh hưởng đến một thư mục — việc đặt nó trên một tệp sẽ không có ý nghĩa.

Khi bạn đặt bit dính trên một thư mục, mọi người chỉ có thể xóa các tệp thuộc về họ trong thư mục đó. Họ không thể xóa tệp thuộc về người khác, bất kể tổ hợp quyền tệp nào được đặt trên tệp.

Điều này cho phép bạn tạo một thư mục mà mọi người — và các quy trình mà họ khởi chạy — có thể sử dụng làm nơi lưu trữ tệp được chia sẻ. Các tệp được bảo vệ bởi vì, một lần nữa, không ai có thể xóa tệp của bất kỳ ai khác.

Hãy tạo một thư mục có tên là “shared”. Chúng tôi sẽ sử dụng chế độ biểu tượng o + t với chmod để đặt bit dính trên thư mục đó. Sau đó, chúng tôi sẽ xem xét các quyền trên thư mục đó, cũng như các thư mục / tmp và / var / tmp.

Chúng tôi gõ các lệnh sau:

mkdir shared
sudo chmod o+t shared
ls -lh -d shared
ls -lh -d /tmp
ls -lh -d /var/tmp

Câu lệnh thiết lập sticky bit trong linux

Nếu bit cố định được đặt, thì bit thực thi của tập hợp quyền tệp “khác” được đặt thành “t”. Tên tệp cũng được đánh dấu màu xanh lam.

Các thư mục / tmp và / var / tmp là hai ví dụ về các thư mục có tất cả các quyền đối với tệp được đặt cho chủ sở hữu, nhóm và những người khác (đó là lý do tại sao chúng được đánh dấu bằng màu xanh lục). Chúng được sử dụng làm vị trí được chia sẻ cho các tệp tạm thời.

Với những quyền đó, về mặt lý thuyết, bất kỳ ai cũng có thể làm bất cứ điều gì. Tuy nhiên, phần dính sẽ ghi đè lên chúng và không ai có thể xóa một tệp không thuộc về mình.

Nhắc nhở

Sau đây là danh sách kiểm tra nhanh về những gì chúng tôi đã đề cập ở trên để tham khảo trong tương lai:

SUID chỉ hoạt động trên các tệp.
Bạn có thể áp dụng SGID cho các thư mục và tệp.
Bạn chỉ có thể áp dụng bit dính vào các thư mục.
Nếu các chỉ báo “s”, “g” hoặc “t” xuất hiện ở dạng chữ hoa, thì bit thực thi (x) chưa được đặt.