Thay đổi shell (sử dụng chsh) thông qua dòng lệnh trong tập lệnh


11

Trong một kịch bản khởi động thiết lập một máy, tôi muốn chạy

chsh -s /bin/zsh

Tuy nhiên, điều này yêu cầu mật khẩu của người dùng. Làm thế nào để tôi chuyển mật khẩu làm tham số? Hoặc nếu tôi có sức mạnh sudo, bằng cách nào đó tôi có thể bỏ qua bước đó? Hoặc cách khác, có một cách khác để thay đổi shell khởi động mặc định?

Câu trả lời:


21

Điều sau đây ngăn các tài khoản bị khóa thay đổi vỏ của chúng và chọn lọc cho phép mọi người sử dụng chshbản thân mà KHÔNG cần sudo hoặc su:

Thiết lập đơn giản mà vẫn an toàn:

  1. Thêm phần trên cùng của /etc/pam.d/chsh:

    # This allows users of group chsh to change their shells without a password.
    #
    # Per: http://serverfault.com/questions/202468/changing-the-shell-using-chsh-via-the-command-line-in-a-script
    #
    auth       sufficient   pam_wheel.so trust group=chsh
    
  2. Tạo nhóm chsh:

    groupadd chsh
    

Đối với bất kỳ người dùng nào được phép thay đổi vỏ của họ:

    usermod -a -G chsh username

Bắn tiền:

user@host:~$ getent passwd $USER
user:x:1000:1001::/home/user:/bin/bash
user@host:~$ chsh -s `which zsh`
user@host:~$ getent passwd $USER
user:x:1000:1001::/home/user:/usr/bin/zsh
user@host:~$ 

Giải pháp làm việc, tự hỏi rằng điều này vẫn không được chấp nhận.
dimpiax

Cảm ơn. Đây có vẻ là cách sạch nhất để cho phép người dùng sử dụng shell auth chỉ thay đổi khóa mà không cần sudo. Công cụ pam.d này rất thú vị!
François Drolet

4

chsh thực sự thay đổi dòng liên quan đến người dùng trong / etc / passwd, mặc dù người dùng chỉ có thể thay đổi 'dòng' của chính họ trong / etc / passwd. Do đó, nếu bạn muốn thay đổi shell cho người dùng khác, bạn cần mật khẩu của anh ấy / cô ấy.

Nếu bạn thực sự muốn làm điều đó (đưa ra những lo ngại trong bài của Lorenzo và những lo ngại về bảo mật có thể xảy ra) thì đây là cách người ta có thể làm điều này:

#visudo

Điều này đòi hỏi quyền root.

Giả sử bạn hiện đang chạy dưới dạng "alice" và muốn thay đổi trình bao "bob's" mà không cần mật khẩu;

Thêm vào tập tin:

Cmnd_Alias     SHELL = /usr/bin/chsh
Runas_Alias    SH    = Bob
alice          ALL   = (SH) NOPASSWD: SHELL

Điều này đảm bảo 'alice' có thể chạy trên tất cả các máy chủ với tư cách là người dùng trong nhóm SH mà không cần mật khẩu nhóm các lệnh trong SHELL.

Có lẽ hơi xa để làm theo cách này, nhưng nó có thể.

Hãy chắc chắn đọc "man sudoers" trước khi thay đổi tệp sudores bằng 'visudo', đặc biệt là các tin nhắn liên quan đến bảo mật!


Vấn đề sudolà nó cực kỳ dễ phá vỡ và root một hệ thống. Tốt hơn hết là không bao giờ thay đổi sudoerstrừ khi có một nhu cầu cụ thể không thể được đáp ứng theo bất kỳ cách nào khác (setuid / setgid thực thi, quyền nhóm, v.v.).

2

Bạn cần phải vượt qua tên người dùng; thực hiện việc này thông qua sudo(hoặc bằng root) sẽ cho phép bạn đặt mật khẩu / shell của người dùng mà không bị hỏi mật khẩu cũ. Vui lòng kiểm tra man chshđể biết thêm thông tin.

Bây giờ câu hỏi của tôi là: tại sao bạn muốn làm điều đó? Nếu đó là tập lệnh thiết lập, bạn không nên thay đổi trình bao của người dùng tại thời điểm tạo (tức là khi khởi chạy adduser)? Nếu bạn đang nhân bản một hệ thống từ xa, bạn có nên thay đổi nó /etc/passwdtrước không? Tôi thấy không có lý do nào để thực hiện nó thông qua một tập lệnh, trừ khi bạn tự động hóa toàn bộ quá trình cài đặt và lựa chọn shell sẽ được cài đặt sau khi tạo người dùng đầu tiên.


Đó là cho máy ec2 (tập lệnh tôi chạy ngay sau khi máy khởi động). Tôi muốn thay đổi vỏ bắt đầu mặc định. Làm "sudo chsh -s / bin / zsh user_name" cũng không hoạt động (vẫn hỏi mật khẩu của người dùng)

hãy thử sử dụng tập lệnh và sử dụng #!/usr/bin/sudo -s(dòng shebang). Ngoài ra, bạn có chắc chắn zsh nằm trong / bin và không, có lẽ, trong / usr / bin? (chỉ cần kiểm tra, tôi không quen thuộc với ec2)
lorenzog

Câu trả lời này không đầy đủ vì nó cho sudophép. Xem của tôi cho một cách tiếp cận khác mà không yêu cầu sudocho người dùng trung bình.


0

Hãy thử sudo chsh -s /bin/zsh, sau đó:

  1. thoát cho máy chủ
  2. khởi động lại thiết bị đầu cuối
  3. đăng nhập vào máy chủ và kiểm tra bằng echo $SHELL- trong trường hợp thành công, nó đã thay đổi :)

Điều này thực sự sẽ đặt zsh làm thiết bị đầu cuối mặc định cho người dùng root.
lcguida

@lcguida đúng.
dimpiax
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.