Cách chạy lệnh với tư cách người dùng khác trong tập lệnh Linux

[ad_1]

Đương nhiên, khi bạn chạy một lệnh hoặc tập lệnh, hệ thống sẽ thực thi nó như một quá trình do bạn khởi chạy. Nhưng bạn có thể chạy các lệnh và tập lệnh với tư cách là một người dùng khác.

Sửa mạng internet tại nhà quận Tân Phú

Sửa mạng internet tại nhà bè

Sửa mạng internet tại nhà quận Thủ đức

Sửa mạng internet tại nhà quận tân bình

Lắp đặt mạng Lan Wifi văn phòng

Quy trình có chủ sở hữu

Khi một chương trình hoặc tập lệnh được thực thi, Linux sẽ tạo ra một quy trình. Quá trình đó có một chủ sở hữu. Chủ sở hữu là một quy trình khác hoặc tên của tài khoản người dùng nếu một người đã khởi chạy nó.

Quyền sở hữu của một quy trình xác định một số khả năng và môi trường của quy trình. Tùy thuộc vào cách quy trình được khởi chạy, nó kế thừa các thuộc tính nhất định của quy trình mẹ hoặc người dùng. Hoặc, nghiêm ngặt hơn, quá trình mà người dùng sử dụng để khởi chạy chương trình thường là một trình bao.

Chạy lệnh hoặc tập lệnh với tư cách người dùng khác có thể hữu ích vì quyền sở hữu của bất kỳ tệp nào được tạo bởi quy trình sẽ thuộc về người dùng thích hợp.

Mỗi khi chúng tôi sử dụng sudo chúng tôi đang chạy một lệnh với tư cách là một người dùng khác. Tài khoản người dùng mặc định được sử dụng bởi sudo là người dùng gốc hoặc ‘siêu’. Vì lý do đó, sudo thường bị nhầm tưởng là đại diện cho siêu người dùng làm. Nhưng đó chỉ là biệt ngữ thiếu hiểu biết. Nó thực sự là viết tắt của người dùng thay thế làm.

Với sudo , bạn có thể chạy các lệnh với tư cách là bất kỳ người dùng nào khác, không chỉ với quyền root. Trớ trêu thay, bạn cần có đặc quyền root để làm như vậy. Nhưng khởi chạy chương trình hoặc tập lệnh do người dùng khác sở hữu không giống như chạy quy trình đó như người dùng khác. Bạn sẽ vẫn chạy nó dưới dạng root.

Đây là cách thực sự chạy một quy trình với tư cách là người dùng khác và cách chạy các lệnh từ bên trong một tập lệnh như thể chúng đã được thực thi bởi một người dùng khác.

Chạy Tập lệnh với tư cách người dùng khác

Chúng tôi đang sử dụng một máy tính có nhiều người dùng được định cấu hình. Một là Mary, người có tên người dùng là maryq, và người kia là Dave với tên người dùng là dave.

Mary có một tập lệnh được gọi là “other-user.sh” trong thư mục chính của cô ấy. Đây là văn bản của kịch bản.

#!/bin/bash

echo "Script name:" $0
echo "Working directory:" $(pwd)
echo "Script running as user:" $(whoami)

Nó in ra tên tập lệnh, được giữ trong $0 biến môi trường. Sau đó nó sử dụng pwd để in thư mục làm việc. Cuối cùng, nó sử dụng whoami lệnh để in tên của người dùng đã khởi chạy tập lệnh. Hay nó là ai suy nghĩ đưa ra kịch bản.

Sao chép văn bản từ tập lệnh vào một trình soạn thảo và lưu nó dưới dạng “other-user.sh” trong thư mục chính của một tài khoản người dùng khác.

Chúng tôi sẽ cần làm cho tập lệnh có thể thực thi được. Chúng tôi sẽ sử dụng chmod ra lệnh và sử dụng +x (thực thi) và tùy chọn -u (người dùng) tùy chọn để đặt cờ thực thi chỉ cho chủ sở hữu. Điều đó có nghĩa là chỉ Mary mới có thể chạy tập lệnh. Chúng tôi sẽ kiểm tra quyền đối với tệp với ls .

chmod u+x other-user.sh
ls

Đặt quyền thực thi cho tập lệnh để chỉ người dùng Mary mới có thể chạy nó

Từ trái sang phải, các quyền đọc:

  • Chủ sở hữu có thể đọc, ghi và thực thi tệp.
  • Các thành viên trong nhóm có thể đọc và ghi tệp.
  • Những người khác chỉ có thể đọc tệp.

Vì vậy, những người dùng duy nhất có khả năng chạy script là Mary và root. Đây là những gì sẽ xảy ra khi Mary chạy tập lệnh:

./other-user.sh

Đầu ra khi Mary chạy tập lệnh

Chúng tôi được biết thư mục làm việc hiện tại của script là thư mục chính của Mary và chủ sở hữu của script là tài khoản người dùng maryq.

Đúng như dự đoán, Dave không thể chạy tập lệnh.

/home/maryq/other-user.sh

Người dùng Dave không thể chạy tập lệnh, quyền bị từ chối

Nếu Dave có đặc quyền của người dùng root, anh ta có thể cố gắng chạy tập lệnh với quyền root, bằng cách sử dụng sudo .

sudo /home/maryq/other-user.sh

Kết quả đầu ra khi tập lệnh được chạy bởi root

Đây là thành công một phần. Tập lệnh chạy, nhưng chủ sở hữu của tập lệnh là root, không phải maryq.

Bí quyết mà chúng tôi cần sử dụng là sudo -u (người dùng) tùy chọn. Điều này cho phép bạn chỉ định người dùng bạn muốn chạy lệnh. Nếu bạn không sử dụng -u quyền mua, sudo mặc định sử dụng root. Nếu chúng ta muốn chạy lệnh với tên Mary, chúng ta cần chuyển tên tài khoản người dùng của họ cho sudo yêu cầu.

sudo -u maryq /home/maryq/other-user.sh

Sử dụng tùy chọn người dùng -u với quyền root để chạy tập lệnh với tư cách người dùng Mary

Lần này tập lệnh báo cáo rằng chủ sở hữu quá trình là maryq.

Hãy thêm một dòng vào tập lệnh “other-user.sh”. Tốt echo một số văn bản và chuyển hướng đầu ra thành một tệp có tên “mary.txt”.

#!/bin/bash

echo "Script name:" $0 
echo "Working directory:" $(pwd) 
echo "Script running as user:" $(whoami)
echo "This is going into a file in /home/maryq/" > /home/maryq/mary.txt

Chúng tôi đang tạo tệp mới trong thư mục chính của Mary. Điều này hoàn toàn ổn vì chúng tôi đang chạy kịch bản với tư cách là Mary.

./other-user.sh

Chạy tập lệnh một lần nữa để tạo tệp văn bản

Nếu chúng tôi kiểm tra trong thư mục chính của Mary, chúng tôi sẽ thấy tệp đã được tạo và quyền sở hữu tệp thuộc về tài khoản người dùng maryq.

ls -hl mary.txt

Kiểm tra quyền sở hữu tệp được tạo bởi tập lệnh

Đây là hành vi tương tự mà chúng ta sẽ thấy nếu Mary thực sự đã tự mình khởi chạy kịch bản.

CÓ LIÊN QUAN: Cách sử dụng lệnh chmod trên Linux


The runuser Command

 

You could use the sudo -u commands we’ve used so far inside a script, but there’s another command, runuser, that’s designed to run processes as a different user from inside scripts. It has better handling of the return code from the launched process, and it has fewer overheads than sudo.

 

The runuser command needs to be run by root, but that is accomplished by running the entire script as root. You don’t need to use sudo inside the script. The runuser command can be used on the command line, too, so isn’t restricted to script use, although it is the preferred method for scripts.

 

Dave can’t list the “mary.txt” file because it is in Mary’s home directory and he doesn’t have access.

 

cat /home/maryq/mary.txt

Người dùng Dave không thể đọc tệp của Mary, quyền bị từ chối

Chúng tôi có thể xem bên trong tệp bằng cách sử dụng runuser, tuy nhiên. Các - (đăng nhập) tùy chọn khởi chạy một trình bao mới với một môi trường rất gần với môi trường trình bao mà Mary sẽ có nếu họ thực sự đăng nhập. -c (lệnh) tùy chọn được theo sau bởi lệnh mà chúng tôi muốn chạy.

sudo runuser - maryq -c 'cat mary.txt'

Đọc tệp của Mary bằng lệnh runuser

Lưu ý rằng lệnh không cần đường dẫn đầy đủ đến tệp. Chúng ta có thể tham chiếu tệp theo cách giống như Mary, liên quan đến thư mục chính của cô ấy.

Với tư cách là người dùng Dave, chúng tôi sẽ tạo một tập lệnh có tên “run-maryq.sh” với văn bản này trong đó:

#!/bin/bash

runuser -l maryq -c 'cat mary.txt'

Chúng tôi sẽ làm cho nó có thể thực thi được:

chmod +x run-maryq.sh

Làm cho tập lệnh có thể thực thi với chmod

Hãy xem điều gì sẽ xảy ra khi chúng ta cố gắng chạy nó.

./run-maryq.sh

Chạy script với runuser bên trong, với tư cách là người dùng thông thường

Các runuser lệnh phàn nàn vì nó đang được thực thi bởi một người dùng thông thường. Hãy chạy lại với sudo.

sudo ./run-maryq.sh

Chạy script với runuser bên trong, dưới dạng root

Điều đó hoạt động như chúng tôi muốn, và giống như Mary đã tự đưa ra kịch bản.

Cái nào để sử dụng?

Trên dòng lệnh, không có nhiều thứ để lựa chọn giữa chúng. Nhưng khi bạn phải sử dụng sudo với runuser Dù sao, bạn cũng có thể sử dụng sudo của riêng nó.

Nhưng trong một kịch bản, runuser là lệnh ưu tiên.

CÓ LIÊN QUAN: 10 lệnh Linux cơ bản cho người mới bắt đầu

[ad_2]

Đánh giá dịch vụ post
Chat Zalo
0903064855