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


75

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?


Đối với các nhân viên khác: một số người dùng có thể bị vô hiệu hóa khả năng này. Bạn có thể chạy sudo cat /etc/passwd | grep user-abc. Nếu bạn thấy một cái gì đó như thế này: user-abc:x:994:994::/home/user-abc:/bin/falsethì nó sẽ không hoạt động. Đó là bởi vì phần cuối " /bin/false" có nghĩa là không có vỏ cho người dùng đó.
Alexander Bird

Câu trả lời:


78

Đú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 sudovì tôi không biết mật khẩu cho nobodytài khoản)

$ 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) mà không trích dẫn lệnh đầy đủ:

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

Nó chỉ được đọc mkdirlàm giá trị cho -ccờ và nó đang cố sử dụng /home/oli/javalà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: -

52

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 đã thiết lập bit setuid, 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. suchủ yếu để chuyển đổi người dùng, trong khi sudođể thực hiện các lệnh như những người dùng khác. Các -ulá cờ cho phép bạn xác định những người sử dụng để thực hiện lệnh như sau:

sudo -u hudson command

1
Nhiều lần tôi đã phải đối mặt (trên các hệ thống mà sudoers được quản lý tốt) rằng cố gắng sử dụng sudobạn có thể nhận được điều này : root is not in the sudoers file. Mà làm cho su - <username> -c "command to run"lựa chọn duy nhất.
RAM237

Báo giá không cần thiết khi thực hiện một lệnh không tầm thường. (Ví dụ sudo -u kilgore mv this that:)
toraritte
Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.