Tôi đã tìm kiếm một cách để thiết lập OpenSSH của umask để 0027theo một cách nhất quán trên tất cả các loại kết nối.
Theo loại kết nối tôi đang đề cập đến:
- sftp
- scp
- tên máy chủ ssh
- chương trình tên máy chủ ssh
Sự khác biệt giữa 3. và 4. là cái trước bắt đầu một shell thường đọc /etc/profilethông tin trong khi cái sau không.
Ngoài ra, bằng cách đọc bài đăng này, tôi đã biết đến tùy chọn -u có trong các phiên bản OpenSSH mới hơn. Tuy nhiên điều này không hoạt động.
Tôi cũng phải thêm rằng /etc/profilebây giờ bao gồm umask 0027.
Đi từng điểm:
- sftp - Thiết
-u 0027trongsshd_confignhư đã đề cập ở đây , là không đủ.
Nếu tôi không đặt tham số này, sftp sẽ sử dụng theo mặc định umask 0022. Điều này có nghĩa là nếu tôi có hai tệp:
-rwxrwxrwx 1 user user 0 2011-01-29 02:04 execute
-rw-rw-rw- 1 user user 0 2011-01-29 02:04 read-write
Khi tôi sử dụng sftp để đặt chúng vào máy đích, tôi thực sự nhận được:
-rwxr-xr-x 1 user user 0 2011-01-29 02:04 execute
-rw-r--r-- 1 user user 0 2011-01-29 02:04 read-write
Tuy nhiên khi tôi đặt -u 0027trên sshd_configcác máy tính đích tôi thực sự nhận được:
-rwxr--r-- 1 user user 0 2011-01-29 02:04 execute
-rw-r--r-- 1 user user 0 2011-01-29 02:04 read-write
điều không được mong đợi, vì nó thực sự nên là:
-rwxr-x--- 1 user user 0 2011-01-29 02:04 execute
-rw-r----- 1 user user 0 2011-01-29 02:04 read-write
Bất cứ ai cũng hiểu tại sao điều này xảy ra?
scp - Độc lập với những gì được thiết lập cho sftp , luôn có quyền
umask 0022. Tôi hiện không có ý tưởng làm thế nào để thay đổi điều này.Tên máy chủ ssh - không có vấn đề gì ở đây vì shell đọc
/etc/profiletheo mặc định có nghĩa làumask 0027trong thiết lập hiện tại.chương trình tên máy chủ ssh - tình huống tương tự như scp .
Tóm lại, cài đặt các ô trên sftpthay đổi kết quả nhưng không như mong muốn, ssh hostnamehoạt động như đọc dự kiến /etc/profilevà cả hai scpvà ssh hostname programdường như đã được umask 0022mã hóa ở đâu đó.
Bất kỳ cái nhìn sâu sắc về bất kỳ điểm nào ở trên đều được chào đón.
EDIT: Tôi muốn tránh các bản vá yêu cầu biên dịch thủ công. Hệ thống đang chạy Ubuntu Server 10.04.01 (sáng suốt) LTS với opensshcác gói từ maverick.
Trả lời: Như được chỉ định bởi poige, sử dụng pam_umask đã thực hiện thủ thuật.
Những thay đổi chính xác là:
Dòng được thêm vào /etc/pam.d/sshd:
# Setting UMASK for all ssh based connections (ssh, sftp, scp)
session optional pam_umask.so umask=0027
Ngoài ra, để ảnh hưởng đến tất cả các shell đăng nhập bất kể chúng có nguồn /etc/profilehay không, các dòng tương tự cũng được thêm vào /etc/pam.d/login.
EDIT : Sau một số ý kiến tôi đã kiểm tra lại vấn đề này.
Ít nhất là trong Ubuntu (nơi tôi đã thử nghiệm), dường như nếu người dùng có một ô khác nhau được đặt trong các tệp init của shell của họ (.bashrc, .zshrc, ...), thì ô dù PAM sẽ bị bỏ qua và thay vào đó người dùng đã xác định sử dụng ô. Thay đổi trong không /etc/profileảnh hưởng đến kết quả trừ khi người dùng rõ ràng nguồn những thay đổi đó trong tệp init.
Không rõ tại thời điểm này nếu hành vi này xảy ra trong tất cả các bản phát hành.
UsePAM yestrong sshd_config không?
/etc/profile. Một cái gì đó giống nhưalias umask=/bin/true