Làm thế nào tôi có thể sudo su và thay đổi thư mục ngay sau đó?


13

Tôi muốn tạo một bí danh làm một cái gì đó như thế này:

alias userYYY='sudo su userYYY; cd /a/path/that/only/userYYY/has/access'

Vì vậy, từ dòng lệnh của tôi, tôi đã đăng nhập bằng một người dùng sudo và tôi muốn nhập bí danh userYYYđể trình bao của tôi được đăng nhập userYYYpwdđược /a/path/that/only/userYYY/has/access.

Làm thế nào tôi có thể làm điều đó? Điều này userYYYlà để chạy một số quy trình, và phải có bất cứ điều gì trong nhà của nó. Do đó, tôi đã thử thay đổi $ HOME bằng cách sử dụng:

sudo usermod -m -d /a/path/that/only/userYYY/has/access userYYY 

Và sau đó từ shell của tôi với tập tin sudoer của tôi, tôi đã làm sudo su userYYY. Nhưng điều đó đã không làm việc. Điều duy nhất có hiệu quả là sudo su -l userYYYYnhưng điều đó đã mở ra một bash mới bên trong lớp vỏ ban đầu của tôi ( -bash-4.1$ ....).

Tóm lại, điều tôi muốn chỉ đơn giản là tránh phải viết 2 dòng trong shell của mình:

sudo su userYYY
cd /a/path/that/only/userYYY/has/access

Có ý kiến ​​gì không?

Câu trả lời:


10
alias userYYY='sudo su userYYY -c "cd /a/path/that/only/userYYY/has/access; /bin/bash"'

có vẻ hoạt động tốt, nhưng không chắc chắn làm thế nào để loại bỏ lỗi này, hoặc nếu đó là một vấn đề. sử dụng Ubuntu 14.04LTS, nhận thấy có vấn đề với debian ...bash: cannot set terminal process group (13964): Inappropriate ioctl for device\nbash: no job control in this shell
sonjz 24/2/2015

1
Trên thực tế, sau khi sử dụng một thời gian, tôi nhận thấy rằng thiết bị đầu cuối bị giết khá thường xuyên bằng phương pháp này (ngắt kết nối khoảng 15-30 phút, thường xuyên, thiết bị đầu cuối của tôi tồn tại khoảng 6 giờ trước khi ngắt kết nối)
sonjz

Chỉ cần đào lên, hành vi này là do sửa lỗi bảo mật: unix.stackexchange.com/questions/65843/ chủ
sonjz

điều này đã giúp tôi chỉnh sửa .bashrctập tin của mình để sudosau đó cdcó 2 dòng riêng biệt không hoạt động.
RozzA

2

Một tùy chọn sẽ là chỉnh sửa ~/.bashrcngười dùng mục tiêu và thêm vào cdđó:

cd /a/path/that/only/userYYY/has/access

0

Câu trả lời ngắn - bạn không thể. Các sudo subắt đầu một vỏ mới mà phải thoát ra trước khi nó được cho là cdlệnh.


0

Đối với tôi một sự kết hợp sudoscreenlàm việc ra:

sudo -iu vagrant screen -mS npm_install bash -c 'cd /vagrant && npm install'

Lệnh này trước tiên chuyển sang vagrantngười dùng. Sau đó, khi vagrantthay đổi thư mục /vagrantvà thực thi npm install.


0

Tôi biết điều này hơi khác so với câu hỏi ban đầu, nhưng ý tưởng là chạy lệnh như một người dùng khác mà không cần nhập mật khẩu khi chính sách cấm sudo su <user> -c.

sudo -u userYYY -- sh -c "cd /a/path/that/only/userYYY/has/access; /bin/bash"
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.