it-swarm-vi.tech

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

Cách tốt để chạy tập lệnh Shell là một người dùng khác. Tôi đang sử dụng Debian etch và tôi biết người dùng nào tôi muốn mạo danh.

Nếu tôi đang làm bằng tay, tôi sẽ làm:

su postgres
./backup_db.sh /tmp/test
exit

Vì tôi muốn tự động hóa quy trình, tôi cần một cách để chạy backup_db.sh dưới dạng postgres (kế thừa môi trường, v.v.)

Cảm ơn!

44
Wadih M.

Để chạy tập lệnh của bạn dưới dạng một người dùng khác dưới dạng một lệnh, hãy chạy:

/bin/su -c "/path/to/backup_db.sh /tmp/test" - postgres

Breaking it down:
 /bin/su : switch user
 -c "/path/to..." : command to run
 - : option to su, make it a login session (source profile for the user)
 postgres : user to become

Tôi khuyên bạn luôn luôn sử dụng các đường dẫn đầy đủ trong các tập lệnh như thế này - bạn không thể luôn đảm bảo rằng bạn sẽ ở đúng thư mục khi bạn su (có thể ai đó đã thay đổi homedir trên bạn, ai biết được). Tôi cũng luôn sử dụng đường dẫn đầy đủ đến su (/ bin/su) vì tôi bị hoang tưởng. Có thể ai đó có thể chỉnh sửa đường dẫn của bạn và khiến bạn sử dụng phiên bản su bị xâm phạm.

69
baumgart

Nếu người dùng đích chạy có nologin shelll được xác định, thì bạn có thể sử dụng tùy chọn -s để chỉ định Shell:

/bin/su -s /bin/bash -c '/path/to/your/script' testuser

Xem câu hỏi sau: chạy tập lệnh với tư cách người dùng có nologin Shell

23
Basil A

Để tự động hóa việc này theo lịch trình, bạn có thể đặt nó vào crontab của người dùng. Mặc dù vậy, các công việc cron sẽ không có được môi trường đầy đủ, nhưng tốt hơn hết là đặt tất cả các biến env bạn cần trong chính kịch bản.

Để chỉnh sửa crontab của người dùng:

Sudo crontab -u postgres -e
9
Kyle Brandt

Đây phải là một thông tin đọc - setuid trên tập lệnh Shell

Nếu bạn chạy su với dấu "- username" trình tự đối số, nó sẽ tạo một Shell đăng nhập cho người dùng để cung cấp môi trường giống như người dùng. Thông thường, được sử dụng để nhanh chóng thực thi tập lệnh của bạn với môi trường gia đình của bạn từ một lần đăng nhập khác.

3
nik

Hãy thử trang web su:

su -c script_run_as_postgres.sh - postgres

Nói chung, bạn có thể sử dụng Sudo để cho phép bạn chạy comman đó dưới dạng postgres mà không cần mật khẩu. Mặc dù vậy, nó cần một số thiết lập trong/etc/sudoers của bạn.

2
pjz

Phương pháp "su -c ..." được đăng bởi những người khác là một phương pháp tốt. Để tự động hóa, bạn có thể thêm tập lệnh vào crontab của người dùng mà bạn cần để thực thi.

2
Geoff Fritz

Nếu người dùng đã có một mục nhập vào Sudo và bạn không biết mật khẩu của siêu nhân thì bạn có thể thử như sau: Cái này khởi động lại các postgres được khởi tạo tại /data/my-db/pgsql/9.6/data

Sudo su - postgres -c "/usr/pgsql-9.6/bin/pg_ctl -D /data/my-db/pgsql/9.6/data -l /var/log/pgsql.log restart"
1
smishra

Bạn cũng có thể dùng:

Sudo -u postgres script_run_as_postgres.sh

0
Xandersoft