Thay đổi shell mặc định khi người dùng không ở / etc / passwd


8

Bất kỳ ý tưởng về làm thế nào tôi có thể thay đổi vỏ để cá?

$ sudo usermod -s /usr/bin/fish jaan
usermod: user 'jaan' does not exist in /etc/passwd
$ getent passwd $USER
jaan:x:15466:94:Jaan Altosaar:/home/jaan:/bin/zsh

Câu hỏi liên quan: người dùng không tồn tại trong / etc / passwd khi cố gắng thay đổi shell mặc định Có vẻ như nó sử dụng ldap.

$ cat /etc/nsswitch.conf
passwd:         compat ldap
group:          compat ldap
shadow:         compat ldap

# Having the NOTFOUND=return bit was breaking dns resolution on web1 and web2. But we probably
# don't want any of the mdns stuff so let's get rid of it all.
#hosts:          files mdns4_minimal [NOTFOUND=return] dns mdns4
hosts:          files dns

networks:       files

protocols:      db files
services:       db files
ethers:         db files
rpc:            db files

netgroup:       ldap
automount:      ldap

Vì vậy, tôi đã cài đặt gói ldap có liên quan.

$ chsh.ldap
LDAP password for jaan:
Enter the new value, or press ENTER for the default
  Login Shell [/bin/zsh]: /usr/bin/fish
Traceback (most recent call last):
  File "/usr/bin/chsh.ldap", line 69, in <module>
    constants.NSLCD_USERMOD_SHELL: shell,
  File "/usr/share/nslcd-utils/nslcd.py", line 128, in usermod
    assert con.get_response() == constants.NSLCD_RESULT_BEGIN
  File "/usr/share/nslcd-utils/nslcd.py", line 103, in get_response
    return self.read_int32()
  File "/usr/share/nslcd-utils/nslcd.py", line 71, in read_int32
    return _int32.unpack(self.read(_int32.size))[0]
struct.error: unpack requires a string argument of length 4
$ which fish
/usr/bin/fish
$ chsh.ldap
LDAP password for jaan:
Enter the new value, or press ENTER for the default
  Login Shell [/bin/zsh]: "/usr/bin/fish"
/usr/bin/chsh.ldap: "/usr/bin/fish" is an invalid shell
$ /usr/bin/fish
(standard_in) 1: syntax error
Welcome to fish, the friendly interactive shell

Điều đó thậm chí có thể?
George Udosen

@George vui lòng kiểm tra chỉnh sửa.
Abhishek Bhatia


@George điều này không hoạt động.
Abhishek Bhatia

Đường dẫn shell phải nằm trong /etc/shellscác chshcông cụ tương tự để chấp nhận nó.
muru

Câu trả lời:


1

Đây là một gợi ý : /usr/bin/chsh.ldap: "/usr/bin/fish" is an invalid shell. Có vẻ như bạn nên thêm /usr/bin/fishvào /etc/shells.


Haha đáng yêu, chsh.ldap -s /usr/bin/zsh myusernamecho tôi a Segmentation fault.
jchook

Sau đó, nó sẽ được báo cáo ở đây: launchpad.net/ubfox/+source/nss-pam-ldapd/+bugs
pim

1

Xin chờ, đó là người dùng LDAP, có một cài đặt trong LDAP cho phép bạn thay đổi lớp vỏ mặc định cho người dùng trong đó.

Bạn có thể cài đặt ldap-account-manager cung cấp cho bạn một webfrontent cho cấu hình ldap.

apt install ldap-account-manager

nhập mô tả hình ảnh ở đây

Điều này có thể được thực hiện trên bất kỳ máy chủ nào bạn muốn xử lý cấu hình trên. Vì bạn sẽ cần phải cấu hình máy chủ trong các tệp cấu hình nào. Nhưng tôi khuyên bạn nên cài đặt nó trên máy chủ có ldap thực sự đang chạy, để bạn có thể nhớ nó dễ dàng hơn.


-1

Để trích dẫn ajmitch ở đây ,

Bạn có thể đặt cá làm vỏ mặc định của mình bằng cách chạy chsh -s which fish Sau đó đăng xuất và quay lại. (Để đặt lại thành bash, tất nhiên bạn cần sử dụng cú pháp Fish, như chsh -s này (bash))

Chỉ cần sử dụng chsh -s which fishVà đảm bảo đăng xuất và đăng nhập lại hoặc khởi động lại máy tính của bạn.

Nhân tiện, đây có thể là một bản sao có thể có ở đây: Làm cách nào để đặt cá làm vỏ mặc định?


Hmm..chsh chỉ hoạt động nếu người dùng trong / etc / passwd. $ chsh -s `which fish` Password: chsh: user 'jaan' does not exist in /etc/passwd
Abhishek Bhatia

À ... vâng ... Tôi không thấy phần đó của nó ...
Tối đa

1
Điều đó không hoạt động khi tài khoản được quản lý bởi LDAP. -1
David Foerster
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.