banner

[Rule] Rules  [Home] Main Forum  [Portal] Portal  
[Members] Member Listing  [Statistics] Statistics  [Search] Search  [Reading Room] Reading Room 
[Register] Register  
[Login] Loginhttp  | https  ]
 
Forum Index Thảo luận hệ điều hành *nix Hạn chế tài khoản SSH thực hiện được duy nhất lệnh mà mình gán cho nó,  XML
  [Question]   Hạn chế tài khoản SSH thực hiện được duy nhất lệnh mà mình gán cho nó, 06/10/2010 16:10:17 (+0700) | #1 | 222243
khanga6tm
Member

[Minus]    0    [Plus]
Joined: 28/04/2007 17:38:37
Messages: 34
Offline
[Profile] [PM]
Chào các bác,

Em cần tạo ra 1 User được phép SSH vào máy chủ của em nhưng bị hạn chế quyền triệt để. Chỉ thực hiện nhưng lệnh mà em cho phép nó thực hiện, không được thực hiện bất kỳ lệnh gì khác.

Ai làm cái này rồi chỉ em với,

Xin cảm ơn anh em đọc bài!
[Up] [Print Copy]
  [Question]   Hạn chế tài khoản SSH thực hiện được duy nhất lệnh mà mình gán cho nó, 06/10/2010 17:20:23 (+0700) | #2 | 222245
[Avatar]
quanta
Moderator

Joined: 28/07/2006 14:44:21
Messages: 7265
Location: $ locate `whoami`
Offline
[Profile] [PM]
- Nhét những lệnh bạn cho phép chạy vào một script ($HOME/yourscript.sh)
- Cho phép xác thực bằng public key
- Sửa dòng chứa public key của client trong file authorized_keys trên server thành:
Code:
command="/home/<username>/yourscript.sh" ssh-rsa ...


Chi tiết: http://www.linuxjournal.com/magazine/paranoid-penguin-managing-ssh-scripts-and-cron-jobs?page=0,0
Let's build on a great foundation!
[Up] [Print Copy]
  [Question]   Hạn chế tài khoản SSH thực hiện được duy nhất lệnh mà mình gán cho nó, 07/10/2010 14:11:29 (+0700) | #3 | 222303
khanga6tm
Member

[Minus]    0    [Plus]
Joined: 28/04/2007 17:38:37
Messages: 34
Offline
[Profile] [PM]

quanta wrote:
- Nhét những lệnh bạn cho phép chạy vào một script ($HOME/yourscript.sh)
- Cho phép xác thực bằng public key
- Sửa dòng chứa public key của client trong file authorized_keys trên server thành:
Code:
command="/home/<username>/yourscript.sh" ssh-rsa ...


Chi tiết: http://www.linuxjournal.com/magazine/paranoid-penguin-managing-ssh-scripts-and-cron-jobs?page=0,0 


Cảm ơn anh đã trả lời bài viết, cái này là run một nhóm lệnh khi bạn pass qua key. Không phải là login thực sự vào máy chủ.

Cái em cần là một người đã ssh vào trong máy chủ cho phép forward port và thực hiện một số lệnh mình chỉ định.

Ví dụ em sẽ chặn hết tất cả các port trên máy, muốn dùng các dịch vụ phải SSH Tunnel qua SSH User mà em cung cấp. User này cấp cho nhiều người nên em cần chặn quyền của nó để bảo mật.
[Up] [Print Copy]
  [Question]   Hạn chế tài khoản SSH thực hiện được duy nhất lệnh mà mình gán cho nó, 07/10/2010 14:18:44 (+0700) | #4 | 222305
hmtaccess
Member

[Minus]    0    [Plus]
Joined: 12/06/2008 02:26:45
Messages: 197
Location: ™œžŸ¤¢£§¨©
Offline
[Profile] [PM]
Bạn nghiên cứ sudo thử, có lẽ đáp ứng yêu cầu cảu bạn.
[Up] [Print Copy]
  [Question]   Hạn chế tài khoản SSH thực hiện được duy nhất lệnh mà mình gán cho nó, 07/10/2010 14:40:50 (+0700) | #5 | 222308
[Avatar]
quanta
Moderator

Joined: 28/07/2006 14:44:21
Messages: 7265
Location: $ locate `whoami`
Offline
[Profile] [PM]

khanga6tm wrote:

Cái em cần là một người đã ssh vào trong máy chủ cho phép forward port và thực hiện một số lệnh mình chỉ định.

Ví dụ em sẽ chặn hết tất cả các port trên máy, muốn dùng các dịch vụ phải SSH Tunnel qua SSH User mà em cung cấp. User này cấp cho nhiều người nên em cần chặn quyền của nó để bảo mật. 

Nếu mình hiểu đúng thì thế này:
Code:
A     -----     B      -----        C
(client)      (SSH server)      (another server)

Sau khi A ssh vào B, bạn muốn tất cả các traffic từ B phải đi qua tunnel do bạn tạo trước từ B sang C.
Let's build on a great foundation!
[Up] [Print Copy]
  [Question]   Hạn chế tài khoản SSH thực hiện được duy nhất lệnh mà mình gán cho nó, 07/10/2010 15:05:04 (+0700) | #6 | 222312
khanga6tm
Member

[Minus]    0    [Plus]
Joined: 28/04/2007 17:38:37
Messages: 34
Offline
[Profile] [PM]

quanta wrote:

khanga6tm wrote:

Cái em cần là một người đã ssh vào trong máy chủ cho phép forward port và thực hiện một số lệnh mình chỉ định.

Ví dụ em sẽ chặn hết tất cả các port trên máy, muốn dùng các dịch vụ phải SSH Tunnel qua SSH User mà em cung cấp. User này cấp cho nhiều người nên em cần chặn quyền của nó để bảo mật. 

Nếu mình hiểu đúng thì thế này:
Code:
A     -----     B      -----        C
(client)      (SSH server)      (another server)

Sau khi A ssh vào B, bạn muốn tất cả các traffic từ B phải đi qua tunnel do bạn tạo trước từ B sang C. 


Dạ, nó đơn giản hơn là thế này.

Code:
A     -----    B
Client       Server


Ví dụ đơn giản như sau:
Tại máy B em tạo ra 1 User là ssh_user đi được phép SSH từ máy A.

User này sẽ cho phép em forward những port em muốn qua cổng của dịch vụ ssh. Khi ấy em không phải mở bất kỳ port nào khác ngoài port 22 của dịch vụ ssh.

Trước mắt em không cho phép nó run lệnh đã, em public cái User này cho anh em dùng để truy cập vào máy B.

@htmaccess: Em vừa đọc qua man sudo, bản thân User ssh vào máy chủ đã được run một số lệnh mặc định rồi mà. Vấn đề này sudo không giúp được gì, xin cảm ơn bác!

[Up] [Print Copy]
  [Question]   Hạn chế tài khoản SSH thực hiện được duy nhất lệnh mà mình gán cho nó, 07/10/2010 15:37:08 (+0700) | #7 | 222315
[Avatar]
quanta
Moderator

Joined: 28/07/2006 14:44:21
Messages: 7265
Location: $ locate `whoami`
Offline
[Profile] [PM]

khanga6tm wrote:

Dạ, nó đơn giản hơn là thế này.

Code:
A     -----    B
Client       Server


Ví dụ đơn giản như sau:
Tại máy B em tạo ra 1 User là ssh_user đi được phép SSH từ máy A.
 

OK.

khanga6tm wrote:

User này sẽ cho phép em forward những port em muốn qua cổng của dịch vụ ssh. Khi ấy em không phải mở bất kỳ port nào khác ngoài port 22 của dịch vụ ssh.
 

forward từ đâu đi đâu?

khanga6tm wrote:

Trước mắt em không cho phép nó run lệnh đã, em public cái User này cho anh em dùng để truy cập vào máy B.
 

Cụ thể là bạn muốn không cho chạy lệnh nào?
Let's build on a great foundation!
[Up] [Print Copy]
  [Question]   Hạn chế tài khoản SSH thực hiện được duy nhất lệnh mà mình gán cho nó, 07/10/2010 16:38:16 (+0700) | #8 | 222318
khanga6tm
Member

[Minus]    0    [Plus]
Joined: 28/04/2007 17:38:37
Messages: 34
Offline
[Profile] [PM]

quanta wrote:

khanga6tm wrote:

Dạ, nó đơn giản hơn là thế này.

Code:
A     -----    B
Client       Server


Ví dụ đơn giản như sau:
Tại máy B em tạo ra 1 User là ssh_user đi được phép SSH từ máy A.
 

OK.

khanga6tm wrote:

User này sẽ cho phép em forward những port em muốn qua cổng của dịch vụ ssh. Khi ấy em không phải mở bất kỳ port nào khác ngoài port 22 của dịch vụ ssh.
 

forward từ đâu đi đâu?

khanga6tm wrote:

Trước mắt em không cho phép nó run lệnh đã, em public cái User này cho anh em dùng để truy cập vào máy B.
 

Cụ thể là bạn muốn không cho chạy lệnh nào? 


Dạ,
1. Em dùng firewall chặn tất các port trừ port 22 trên máy B khi truy cập bằng eth0 . Giả sử em muốn từ máy A truy cập vào dịch vụ MySQL-Server trên máy B thì e sẽ dùng phần mềm Tunnel để tạo ra một "hầm" xuyên qua từ máy A tới máy B thông qua cổng 22. Khi đã tạo xong thì em truy cập vào port 3306 của máy A sẽ connect tới port 3306 của máy B.
2. Em muốn không cho nó chạy lệnh gì cả, nghĩa là kể cả nó ssh vào thì cũng chỉ ngồi nhìn màn hình thôi.
[Up] [Print Copy]
  [Question]   Hạn chế tài khoản SSH thực hiện được duy nhất lệnh mà mình gán cho nó, 07/10/2010 17:50:25 (+0700) | #9 | 222326
[Avatar]
quanta
Moderator

Joined: 28/07/2006 14:44:21
Messages: 7265
Location: $ locate `whoami`
Offline
[Profile] [PM]
1. thì tìm hiểu SSH port forwarding. Còn 2. thì mình không biết bạn cho SSH vào làm gì để rồi chỉ cho ngồi nhìn màn hình.
Let's build on a great foundation!
[Up] [Print Copy]
  [Question]   Hạn chế tài khoản SSH thực hiện được duy nhất lệnh mà mình gán cho nó, 07/10/2010 19:23:07 (+0700) | #10 | 222335
khanga6tm
Member

[Minus]    0    [Plus]
Joined: 28/04/2007 17:38:37
Messages: 34
Offline
[Profile] [PM]

quanta wrote:
1. thì tìm hiểu SSH port forwarding. Còn 2. thì mình không biết bạn cho SSH vào làm gì để rồi chỉ cho ngồi nhìn màn hình. 


Cảm ơn bác,

1. Em sẽ tìm hiểu lại SSH port forwarding.
2. Muốn ssh forward port thì phải có Account để SSH chứ, cái em muốn là hiện tại người ta dùng account đó để forward port thôi, sau này mới tính thêm việc cho nó.
[Up] [Print Copy]
  [Question]   Hạn chế tài khoản SSH thực hiện được duy nhất lệnh mà mình gán cho nó, 07/10/2010 21:32:46 (+0700) | #11 | 222344
mR.Bi
Member

[Minus]    0    [Plus]
Joined: 22/03/2006 13:17:49
Messages: 812
Offline
[Profile] [PM] [WWW]
Hoặc bạn thử tìm hiểu chroot jail, cũng đáp ứng được nhu cầu ban đầu smilie .
All of my life I have lived by a code and the code is simple: "honour your parent, love your woman and defend your children"
[Up] [Print Copy]
  [Question]   Hạn chế tài khoản SSH thực hiện được duy nhất lệnh mà mình gán cho nó, 08/10/2010 08:46:14 (+0700) | #12 | 222356
myquartz
Member

[Minus]    0    [Plus]
Joined: 04/01/2005 04:58:30
Messages: 563
Offline
[Profile] [PM]
Hi Khang!
Cái mẹo của tớ để giải quyết vấn đề này là chạy ngay 1 ứng dụng khi user vừa đăng nhập SSH, và ứng dụng này ghìm session ở trạng thái đó.

Thế này nhé, tớ sửa file /home/user/.bashrc, thêm vào dòng cuối cùng nội dung sau:
Code:
exec sleep 3600


(nghĩa là chạy sleep trong vòng 1h thì thoát).
Sau đó, cho phép user login = mật khẩu hoặc key.
Khi đăng nhập, nó sẽ thế này:
Code:
$ ssh 10.36.14.205 -l user -L 8080:10.36.10.100:80
Last login: Fri Oct  8 09:31:53 2010 from 10.36.12.10
sdf
^B
^G
^Y
^G
^A
Connection to 10.36.14.205 closed.


Như thế này, khi đăng nhập xong, sẽ chả có thể gõ lệnh nào được cả. Gõ thoải mái những chả có tác dụng, kể cả ^Z. Sleep nó không phải là bộ phân tích lệnh và exec đã thay thế sh khi login bằng nó. Port vẫn được forward (tức là truy cập localhost:8080 vẫn vào máy được 10.100:80), nhưng user không có cách nào thoát khỏi lệnh sleep đang chạy về sh. Nếu ấn Ctrl+C (như tớ ấn ở ví dụ trên), thì ngay lập tức sleep sẽ bị kết thúc, và session cũng kết thúc theo. Hoặc khi hết hạn 3600 giây thì sleep tự thoát, đồng thời cũng kết thúc session.
Việc ngăn chặn port forward có thể dùng iptables trên máy SSH server, chỉ cho phép cmd sshd kết nối tới IP/port nào.

Đây là cách để tớ tạo 1 "Application VPN over SSH", giúp user truy cập 1 số ứng dụng hạn chế trong mạng qua lớp application layer. Vừa an toàn nhờ SSH mã hoá, compression, xác thực qua key, lại hạn chế được thời gian cho mỗi session (tránh session chết), vừa chống được dùng lệnh bậy bạ, vừa ngăn ngừa các traffic không mong muốn (ko ping, ko scan port, chỉ có mỗi TCP với 1 số port cố định). Thời gian sleep có thể dài hay ngắn tuỳ.

PS: dĩ nhiên, với yêu cầu gốc là gõ 1 số lệnh, thì cách duy nhất là tự viết lấy 1 cái bộ phân tích lệnh hạn chế như là bash, hoặc là chroot vào thư muc với /bin có những lệnh cho phép xài. Nhưng cách làm shell riêng mất công, cách chroot nói chung khó chặn được user copy file binary lên và chạy.
[Up] [Print Copy]
  [Question]   Hạn chế tài khoản SSH thực hiện được duy nhất lệnh mà mình gán cho nó, 08/10/2010 08:53:24 (+0700) | #13 | 222357
[Avatar]
cadoi
Member

[Minus]    0    [Plus]
Joined: 17/07/2008 12:42:40
Messages: 35
Offline
[Profile] [PM]
Em cần tạo ra 1 User được phép SSH vào máy chủ của em nhưng bị hạn chế quyền triệt để. Chỉ thực hiện nhưng lệnh mà em cho phép nó thực hiện, không được thực hiện bất kỳ lệnh gì khác.  


Mình nghĩ cái này giúp được bạn

http://www.server-world.info/en/note?os=CentOS_5&p=rbash
[Up] [Print Copy]
  [Question]   Hạn chế tài khoản SSH thực hiện được duy nhất lệnh mà mình gán cho nó, 08/10/2010 08:57:10 (+0700) | #14 | 222360
khanga6tm
Member

[Minus]    0    [Plus]
Joined: 28/04/2007 17:38:37
Messages: 34
Offline
[Profile] [PM]

myquartz wrote:
Hi Khang!
Cái mẹo của tớ để giải quyết vấn đề này là chạy ngay 1 ứng dụng khi user vừa đăng nhập SSH, và ứng dụng này ghìm session ở trạng thái đó.

Thế này nhé, tớ sửa file /home/user/.bashrc, thêm vào dòng cuối cùng nội dung sau:
Code:
exec sleep 3600


(nghĩa là chạy sleep trong vòng 1h thì thoát).
Sau đó, cho phép user login = mật khẩu hoặc key.
Khi đăng nhập, nó sẽ thế này:
Code:
$ ssh 10.36.14.205 -l user -L 8080:10.36.10.100:80
Last login: Fri Oct  8 09:31:53 2010 from 10.36.12.10
sdf
^B
^G
^Y
^G
^A
Connection to 10.36.14.205 closed.


Như thế này, khi đăng nhập xong, sẽ chả có thể gõ lệnh nào được cả. Gõ thoải mái những chả có tác dụng, kể cả ^Z. Sleep nó không phải là bộ phân tích lệnh và exec đã thay thế sh khi login bằng nó. Port vẫn được forward (tức là truy cập localhost:8080 vẫn vào máy được 10.100:80), nhưng user không có cách nào thoát khỏi lệnh sleep đang chạy về sh. Nếu ấn Ctrl+C (như tớ ấn ở ví dụ trên), thì ngay lập tức sleep sẽ bị kết thúc, và session cũng kết thúc theo. Hoặc khi hết hạn 3600 giây thì sleep tự thoát, đồng thời cũng kết thúc session.
Việc ngăn chặn port forward có thể dùng iptables trên máy SSH server, chỉ cho phép cmd sshd kết nối tới IP/port nào.

Đây là cách để tớ tạo 1 "Application VPN over SSH", giúp user truy cập 1 số ứng dụng hạn chế trong mạng qua lớp application layer. Vừa an toàn nhờ SSH mã hoá, compression, xác thực qua key, lại hạn chế được thời gian cho mỗi session (tránh session chết), vừa chống được dùng lệnh bậy bạ, vừa ngăn ngừa các traffic không mong muốn (ko ping, ko scan port, chỉ có mỗi TCP với 1 số port cố định). Thời gian sleep có thể dài hay ngắn tuỳ.

PS: dĩ nhiên, với yêu cầu gốc là gõ 1 số lệnh, thì cách duy nhất là tự viết lấy 1 cái bộ phân tích lệnh hạn chế như là bash, hoặc là chroot vào thư muc với /bin có những lệnh cho phép xài. Nhưng cách làm shell riêng mất công, cách chroot nói chung khó chặn được user copy file binary lên và chạy. 



Cảm ơn bác myquartz,

Em sẽ áp dụng cái mẹo này cho riêng mình em. Lúc nãy có cậu làm cùng bảo là khi make User thì để chế độ /bin/false vẫn portward được port.

Nếu để /bin/false thì không ssh được, không forward port được khi dùng trên nix được. Nhưng khi qua winodoze lại dùng được. Dùng được là được rồi, lý do thì tính sau, còn nhiều việc đang chờ.

Thế là vấn đề đã được fix, xin chân thành cảm ơn anh em đã đọc bài đặc biệt là bác myquartz.
[Up] [Print Copy]
[digg] [delicious] [google] [yahoo] [technorati] [reddit] [stumbleupon]
Go to: 
 Users currently in here 
1 Anonymous

Powered by JForum - Extended by HVAOnline
 hvaonline.net  |  hvaforum.net  |  hvazone.net  |  hvanews.net  |  vnhacker.org
1999 - 2013 © v2012|0504|218|