Life would be so much simple if we don't care so much

Posts tagged ‘su’

Linux Switch user với su command

Tại cùng 1 thời điểm, có thể switch sang 1 user khác bằng cách sử dụng su command
Khi dùng lệnh su thì từ general user có thể chuyển đổi sang quyền của user khác.
Nói như vậy, nhưng thực tế không hẳn là cùng 1 lúc trở thành user khác mà chỉ là khởi động shell script của user mới.

Có thể dùng trong 1 số trường hợp như đang ở general user và muốn thực thi tác vụ cần quyền của root, hay thực thi tác vụ của user của 1 môi trường khác, hoặc là sử dụng 1 số command hạn chế bởi quyền của 1 số user được nhất định

1. Format

Format của command su
su [-lmp] [-c command] [-s shell] [–login]
[–fast] [–preserve-environment] [–command=command]
[–shell=shell] [-] [–help] [–version] [user [arg…]]
Option
-c COMMAND Thực thi COMMAND(1line)
–help Hiển thị căn bản info cách sử dụng lệnh
-, -l, –login Clear tất cả các biến môi trường của shell hiện tại, sau đó sẽ khởi động shell đối với user được chỉ định, và set directory hiện tại trở thành user home directory
-m, -p, –preserve-environment Thực thi shell mà không thay đổi các biến môi trường như ‘HOME’,’USER’,’LOGNAME’,’SHELL’
-s, –shell shell Khởi động shell được chỉ định
–version Hiển thị thông tin version

Cụ thể cách sử dụng thì xem bên dưới

2. Đổi sang user khác trên linux

Ở đây, từ user1 sẽ đổi thành test_user

[user1@localhost ~]$ id
uid=500(user1) gid=500(user1) 所属グループ=500(user1)

[user1@localhost ~]$ su – test_user ← Chỉ định user sẽ thay đổi sang
パスワード: ← Password của test_user

[test_user@localhost user1]$ id
uid=501(test_user) gid=501(test_user) 所属グループ=501(test_user)

***Note

Bởi vì shell thực thi thì sẽ chọn từ password entry của user (shell của /etc/pasword), nên những shell mà không thể login được, nằm ở /sbin/nologin thì không thể được chỉ định khi đổi user được. Ngoài ra, trường hợp không chỉ định shell nào sẽ được sử dụng thì /bin/sh sẽ được thực thi

3. Chuyển đổi thành root user

Trường hợp nếu không chỉ định user cho lệnh su thì tương ứng là root user sẽ được chỉ định để chuyển đổi thành.

[user1@localhost ~]$ id
uid=500(user1) gid=500(user1) 所属グループ=500(user1)

[user1@localhost ~]$ su – ← không chỉ định option
パスワード:

[root@localhost user1]# id
uid=0(root) gid=0(root) 所属グループ=0(root),1(bin),・・・

4. Phân biệt lệnh su – và su(Dùng và không dùng ký hiệu「-」)

Về lệnh su và user đi cùng với 「-」thì khi có và không có ký hiệu này cách hoạt động của su sẽ khác nhau.

Trường hợp gắn thêm「-」, tất cả các biến môi trường của shell hiện tại sẽ bị xoá, sau đó là start shell khởi động của user được chỉ định. Tiếp đó, thư mục hiện tại sẽ trở thành thư mục home của user.
Có thể xem như là đang login với 1 user mới.
Trường hợp không gắn 「-」thì các biến môi trường hiện tại sẽ được kế thừa lại (ngoại trừ USER, HOME, LOGNAME)

Vd
[user1@localhost ~]$ export TESTENV=foobaa ← Tạo 1 biến môi trường là「TESTENV」
[user1@localhost ~]$ env | grep TESTENV
TESTENV=foobaa

[user1@localhost ~]$ su test_user ← không sử dụng「-」với su
パスワード:
[test_user@localhost user1]$ env | grep TESTENV
TESTENV=foobaa ← kế thừa lại các biến môi trường

[test_user@localhost user1]$ exit

[user1@localhost ~]$ su – test_user ← sử dụng「-」với su
パスワード:
[test_user@localhost ~]$ env | grep TESTENV
↑ Vì không kế thừa lại biến môi trường nên biến môi trường 「TESTENV」được tạo trước đó không hiển thị.

5. Thực thi command bị giới hạn bởi quyền của account khác

Format
su -c ‘[Lệnh muốn thực thi]’ [Thưc thi dưới user là gì?]
Vd
[user1@localhost ~]$ su -c ‘touch /tmp/test.txt’ –
パスワード:
[user1@localhost ~]$ ls -l /tmp/test.txt
-rw-r–r– 1 root root 0 6月 7 23:17 /tmp/test.txt ← File được tạo ra bởi root

Trích nguồn

http://kazmax.zpp.jp/linux_beginner/su.html