Có thể bỏ qua trình bao người dùng trong lệnh của su su?


9

Nếu tôi làm

su - -c 'mkdir bin' user1

sau đó tôi nhận được

su: /usr/bin/ksh: No such file or directory

bởi vì vỏ người dùng được đặt thành kshtrong /etc/passwdkshkhông được cài đặt.

Câu hỏi

Làm thế nào để tôi thực hiện các lệnh như người dùng trong trường hợp như vậy?


Tại sao vỏ của người dùng được đặt thành thứ không tồn tại?
MDMarra

1
/etc/passwdđến từ NIS.
Sandra

1
Vâng, điều đó giải thích rằng.
MDMarra

Câu trả lời:


18

Nếu bạn không đặt -sau suđó thì nó sẽ không tải môi trường của người dùng đó, nhưng các lệnh vẫn sẽ được chạy như người dùng đó.


Có vẻ như tôi đã hiểu nhầm vấn đề thực tế của bạn. Như những gì khác đã nói -slà tùy chọn bạn có thể thực sự muốn.


Điều đó vẫn sẽ cố gắng sử dụng shell trong / etc / passwd, dường như là vấn đề lớn hơn.
freiheit

Shell đặt danh tính riêng của nó vào biến môi trường $ SHELL, nhưng / etc / passwd là nơi su đang tìm kiếm shell nào để chạy. `-` được truyền vào lệnh gọi shell bảo nó hoạt động như một vỏ "đăng nhập" (bash chạy tệp hồ sơ thay vì tệp bashrc, thay đổi thư mục làm việc, v.v.)
freiheit

8

Bạn có thể dùng:

su -s /bin/sh -c 'mkdir bin' user1

Các -stùy chọn để su xác định vỏ để sử dụng, trọng bất cứ thứ gì trong / etc / passwd.

Tôi đã loại bỏ -lệnh của bạn bởi vì, ngoài việc tải hồ sơ, nó có thể sẽ thay đổi thư mục làm việc thành thư mục chính của người dùng cho lệnh, vì vậy bạn sẽ tạo 'bin' trong thư mục chính của user1, chứ không phải hiện tại của bạn danh mục.


5

Tôi tin rằng tùy chọn -s / - shell cho su cho phép bạn chọn shell để sử dụng trong khi vẫn giữ các phần khác của môi trường người dùng, / bin / sh được chỉ định bởi posix nên có sẵn ở mọi nơi.

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.