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 Restart một dịch vụ trên Linux với php code  XML
  [Question]   Restart một dịch vụ trên Linux với php code 24/01/2013 12:18:48 (+0700) | #1 | 272989
[Avatar]
quanta
Moderator

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

emdinoiay wrote:

Em có thử một số hàm như sau nhưng không được :
shell_exec("service mysqld stop"smilie;
exec("service mysqld stop"smilie;
system("service mysqld stop"smilie;

 

Bạn thiếu `sudo` rồi. PHP chạy trên một web server nào đó. Web server này chạy dưới quyền của user apache, nginx, ... Đoạn code trên của bạn sẽ tương đương với:
Code:
su - apache -s /bin/bash -c '/sbin/service mysqld stop'

Thử chạy từ command line xem, nó sẽ ý kiến ngay.

Cách đơn giản là thêm `sudo` vào và nhớ sửa lại `/etc/sudoers` để cho phép apache user restart những dịch vụ đó:
Code:
apache  ALL=(ALL:ALL) NOPASSWD:/etc/init.d/mysqld

emdinoiay wrote:
Theo em được biết các Web control cho linux chủ yếu dựa trên php, ví dụ như Kloxo, plesk, Webuzo (mới)...
Thế nên em muốn hỏi làm sao họ viết được control restart (php-fpm, nginx, apache...) bằng php và việc này hoàn toàn thao tác trên web mà không dùng quyền root trong terminal (php code.php).
 

Thú thật là mình chưa dùng mấy cái đó bao giờ. Hôm qua rảnh ngồi vọc Vagrant rồi cài Kloxo lên xem thử.

OK. Cài xong, chỉnh sang bridged network, start lên, ssh vào.

Đầu tiên, kiểm tra xem process đang listen trên port 7778 chạy dưới quyền của user nào:
Code:
# fuser -v 7778/tcp
                     USER        PID ACCESS COMMAND
7778/tcp:            lxlabs    14188 F.... kloxo.httpd

`lxlabs` user có trong `/etc/sudoers` hay thuộc `wheel` group không nhỉ:
Code:
# grep lxlabs /etc/sudoers 
# groups lxlabs
lxlabs : lxlabs

Giờ `strace` thử theo PID này xem nó làm gì khi mình thao tác một lệnh trên web interface:
Code:
# strace -e trace=open,stat -p 14188

Sau đó, trên giao diện web, vào Server --> Command Center, gõ `id` rồi Execute bạn được Output là:
uid=0(root) gid=0(root) 

Quay lại Terminal:
Code:
Process 14188 attached - interrupt to quit
stat("/usr/local/lxlabs/kloxo/httpdocs/display.php", {st_mode=S_IFREG|0644, st_size=464, ...}) = 0
open("/usr/local/lxlabs/kloxo/httpdocs/display.php", O_RDONLY) = 9
stat("/usr/local/lxlabs/kloxo/file/phpsuexec.sh", {st_mode=S_IFREG|0755, st_size=156, ...}) = 0
stat("/etc/localtime", {st_mode=S_IFREG|0644, st_size=118, ...}) = 0
--- SIGCHLD (Child exited) @ 0 (0) ---
stat("/etc/localtime", {st_mode=S_IFREG|0644, st_size=118, ...}) = 0
Process 14188 detached


À, nó gọi đến `/usr/local/lxlabs/kloxo/file/phpsuexec.sh`. Mở file này ra xem có gì:
Code:
#!/bin/sh
export MUID=0
export GID=0
export TARGET=/usr/local/lxlabs/ext/php/bin/php_cgi
export NON_RESIDENT=1
exec /usr/local/lxlabs/kloxo/cexe/lxphpsu $*


Kiểm tra permission của `/usr/local/lxlabs/kloxo/cexe/lxphpsu` xem nào:
Code:
# ls -l /usr/local/lxlabs/kloxo/cexe/lxphpsu
-rwsr-sr-x 1 root root 8068 Mar  4  2012 /usr/local/lxlabs/kloxo/cexe/lxphpsu

2 chữ "s" ở đây có nghĩa gì nhỉ smilie?

emdinoiay wrote:
Anh nào giải thích hộ em hoặc có tài liệu nào liên quan thì gúp em nhé. 

Google: Kloxo security model.

PS: không hiểu tại sao topic kia biến mất: /hvaonline/posts/list/44177.html
Let's build on a great foundation!
[Up] [Print Copy]
  [Question]   Restart một dịch vụ trên Linux với php code 01/02/2013 09:49:07 (+0700) | #2 | 273251
emdinoiay
Member

[Minus]    0    [Plus]
Joined: 20/11/2012 19:50:22
Messages: 17
Offline
[Profile] [PM]
Lâu rồi mới vào lại topic này. Cám ơn anh quanta nhiềusmilie về những command cũng như hướng dẫn chi tiết.

[root@new ~]# su - apache -s /bin/bash -c '/sbin/service mysqld stop'
Stopping mysqld: [ OK ]
2 chữ "s" ở đây có nghĩa gì nhỉ
anh quanta ám chỉ đến special permissions thì phải smilie
[Up] [Print Copy]
  [Question]   Restart một dịch vụ trên Linux với php code 01/02/2013 13:24:01 (+0700) | #3 | 273256
Nguyen Canh Toan
Member

[Minus]    0    [Plus]
Joined: 28/06/2011 11:05:39
Messages: 105
Offline
[Profile] [PM]
-s ở đây là "shell" mà bạn smilie
[Up] [Print Copy]
  [Question]   Restart một dịch vụ trên Linux với php code 01/02/2013 16:35:06 (+0700) | #4 | 273259
phuongnvt
Member

[Minus]    0    [Plus]
Joined: 09/02/2011 03:35:39
Messages: 332
Offline
[Profile] [PM]
setuid và setgid
Nhiều người nhận được lời khuyên, song chỉ có những người khôn mới sử dụng lời khuyên đó


[Up] [Print Copy]
  [Question]   Restart một dịch vụ trên Linux với php code 02/02/2013 22:45:48 (+0700) | #5 | 273280
[Avatar]
Ikut3
Elite Member

[Minus]    0    [Plus]
Joined: 24/09/2007 23:47:03
Messages: 1429
Location: Nhà hát lớn
Offline
[Profile] [PM] [Yahoo!]
ANh quân ơi, hôm nào viết 1 bài về cách sử dụng strace & trace cho hiệu quả đi anh.
Nhìn cách anh dùng strace mà thèm ghê :-D
[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|