Tôi đã tìm kiếm một cách để thiết lập OpenSSH của umask để 0027
theo 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/profile
thô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/profile
bây giờ bao gồm umask 0027
.
Đi từng điểm:
- sftp - Thiết
-u 0027
trongsshd_config
như đã đề 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 0027
trên sshd_config
cá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/profile
theo mặc định có nghĩa làumask 0027
trong 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 sftp
thay đổi kết quả nhưng không như mong muốn, ssh hostname
hoạt động như đọc dự kiến /etc/profile
và cả hai scp
và ssh hostname program
dường như đã được umask 0022
mã 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 openssh
cá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/profile
hay 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 yes
trong sshd_config không?
/etc/profile
. Một cái gì đó giống nhưalias umask=/bin/true