it-swarm-vi.com

tùy chọn su - lệnh chạy như một người dùng khác

Tôi đã tự hỏi làm thế nào để chạy một lệnh như một người dùng khác từ một kịch bản.

Tôi có chủ sở hữu của tập lệnh là root. Tôi cũng có lệnh sau đang được chạy trong tập lệnh để chạy lệnh với tư cách là người dùng hudson:

su -c command hudson

Đây có phải là cú pháp đúng?

86
garbagecollector

Đúng. Đây là --help:

$ su --help
Usage: su [options] [LOGIN]

Options:
  -c, --command COMMAND         pass COMMAND to the invoked Shell
  -h, --help                    display this help message and exit
  -, -l, --login                make the Shell a login Shell
  -m, -p,
  --preserve-environment        do not reset environment variables, and
                                keep the same Shell
  -s, --Shell SHELL             use Shell instead of the default in passwd

Và một số thử nghiệm (Tôi đã sử dụng Sudo vì tôi không biết mật khẩu cho tài khoản nobody)

$ Sudo su -c whoami nobody
[Sudo] password for oli: 
nobody

Khi lệnh của bạn có đối số, bạn cần trích dẫn nó. Nếu bạn không, những điều kỳ lạ sẽ xảy ra. Ở đây tôi là người gốc rễ, cố gắng tạo một thư mục trong/home/oli (dưới dạng oli) không có trích dẫn toàn bộ lệnh:

# su -c mkdir /home/oli/Java oli
No passwd entry for user '/home/oli/Java'

Nó chỉ đọc mkdir làm giá trị cho -c cờ và nó đang cố sử dụng /home/oli/Java làm tên người dùng. Nếu chúng tôi trích dẫn nó, nó chỉ hoạt động:

# su -c "mkdir /home/oli/Java" oli
# stat /home/oli/Java
  File: ‘/home/oli/Java’
  Size: 4096        Blocks: 8          IO Block: 4096   directory
Device: 811h/2065d  Inode: 5817025     Links: 2
Access: (0775/drwxrwxr-x)  Uid: ( 1000/     oli)   Gid: ( 1000/     oli)
Access: 2016-02-16 10:49:15.467375905 +0000
Modify: 2016-02-16 10:49:15.467375905 +0000
Change: 2016-02-16 10:49:15.467375905 +0000
 Birth: -
89
Oli

Lưu ý: "Tôi có chủ sở hữu tập lệnh là root" không làm gì cả; ngay cả khi bạn có bit setuid, hãy đặt nó vẫn không hoạt động


Tuy nhiên, giả sử bạn đang chạy tập lệnh với quyền root, bạn có thể sử dụng Sudo. su chủ yếu để chuyển đổi người dùng, trong khi Sudo là để thực thi các lệnh như những người dùng khác. Các -u cờ cho phép bạn chỉ định người dùng nào thực thi lệnh như:

Sudo -u hudson command
58
Michael Mrozek