Câu hỏi Chạy tập lệnh shell làm người dùng khác không có mật khẩu


Tôi muốn chạy một kịch bản từ vỏ ubuntu chính như một người dùng khác không có mật khẩu.

Tôi có đặc quyền sudo đầy đủ, vì vậy tôi đã thử điều này:

sudo su -c "Your command right here" -s /bin/sh otheruser

Sau đó, tôi phải nhập mật khẩu của mình, nhưng tôi không chắc liệu tập lệnh đó có thực sự chạy dưới người dùng đó hay không.

Làm cách nào tôi có thể xác nhận rằng tập lệnh thực sự đang chạy dưới người dùng đó ngay bây giờ?


206
2018-05-13 10:55


gốc




Các câu trả lời:


Bạn có thể làm điều đó với su hoặc là sudo, không cần cả hai.

sudo -H -u otheruser bash -c 'echo "I am $USER, with uid $UID"' 

Các phần liên quan của man sudo:

-H   The -H (HOME) option requests that the security policy set
     the HOME environment variable to the home directory of the
     target user (root by default) as specified by the password
     database.  Depending on the policy, this may be the default
     behavior.
-u user     The -u (user) option causes sudo to run the specified
      command as a user other than root.  To specify a uid
      instead of a user name, use #uid.  When running commands as
      a uid, many shells require that the '#' be escaped with a
      backslash ('\').  Security policies may restrict uids to
      those listed in the password database.  The sudoers policy
      allows uids that are not in the password database as long
      as the targetpw option is not set.  Other security policies
      may not support this.

su chỉ có thể chuyển người dùng mà không cung cấp mật khẩu nếu bạn là người chủ. Xem câu trả lời của Caleb 

Bạn có thể sửa đổi /etc/pam.d/su tệp để cho phép su không có mật khẩu. Xem này câu trả lời.

Nếu bạn đã sửa đổi tệp auth của mình thành tệp sau, bất kỳ người dùng nào là một phần của nhóm somegroup có thể su đến otheruser không có mật khẩu.

auth       sufficient pam_rootok.so
auth       [success=ignore default=1] pam_succeed_if.so user = otheruser
auth       sufficient   pam_succeed_if.so use_uid user ingroup somegroup

Sau đó kiểm tra từ thiết bị đầu cuối

rubo77@local$ su otheruser -c 'echo "hello from $USER"'
hello from otheruser

287
2018-05-13 11:20



Bạn có thể vui lòng thêm cách thực hiện nó chỉ với su quá? - rubo77
Điều này yêu cầu tôi cho một mật khẩu :-( - IanVaughan
@IanVaughan, Với cấu hình mặc định (của sudo), bạn sẽ được yêu cầu nhập mật khẩu trừ khi bạn chạy nó dưới dạng root. Bạn có thể cấu hình sudo để "cho phép người dùng A chạy cmd C là người dùng B mà không cần mật khẩu". Xem help.ubuntu.com/community/Sudoers - geirha
Tôi được nhắc nhập mật khẩu khi chạy lệnh này dưới dạng root. Bất kỳ đề xuất? - Nate
@Nate, bạn đã thực hiện một số thay đổi đối với tệp sudoers chưa. Cấu hình mặc định cho phép root chạy bất cứ thứ gì như bất kỳ ai, mà không cần mật khẩu. - geirha


Nếu bạn muốn sử dụng su thay vì sudo, tôi tin rằng bạn có thể sử dụng một cái gì đó như thế này:

su - <username> -c "<commands>"
  • -  sẽ mô phỏng thông tin đăng nhập của người dùng được chỉ định
  • -c  nói rằng bạn muốn chạy lệnh

ps. Thật không may là tôi không thể cài đặt ruby ​​bằng rvm bằng phương pháp này, nhưng điều đó có lẽ không liên quan.


87
2018-04-07 00:01



Tôi cần thêm sudo để bắt đầu khác, nó hỏi tôi mật khẩu của tôi. - IanVaughan
Điều này chắc chắn không hoạt động mà không có sudo. với sudo nó hoạt động, ví dụ: sudo su - www-data -c "touch /tmp/test"đã tạo thành công một tệp dưới dạng dữ liệu www - rubo77
Để sử dụng "su" bạn cần mật khẩu gốc, điểm của "sudo" là để tránh điều đó. Nếu bạn có mật khẩu root bằng cách sử dụng "su" như trên thì nên làm việc tốt. - Samuel Åslund


Các câu trả lời ở trên thực sự hữu ích đối với tôi nhưng để trả lời câu hỏi thực tế ...

Làm cách nào tôi có thể khẳng định rằng tập lệnh thực sự đang chạy dưới người dùng đó ngay bây giờ? -

Sử dụng:

ps -ef | grep <command-name>

Đầu ra phải bao gồm tập lệnh của bạn và người dùng thực thi nó. Mọi người trên các hệ thống giống như BSD, ví dụ: MAC có thể tìm thấy thông tin tương tự với:

ps aux | grep <command-name>

6
2018-05-11 18:30





Tôi đã từng gặp vấn đề tương tự. Chỉ cần gõ lệnh screen -dmS testscreen điều này sẽ tạo ra một màn hình tách rời trên tài khoản người dùng không phải sudo của bạn và sau đó bạn có thể đăng nhập và kiểm tra xem màn hình này có ở đó không screen -ls.


2
2018-05-06 08:35