LINUX.ORG.RU
ФорумAdmin

chrooted sftp (Debian Lenny)


0

0

Для операций с файлами сайта хочу предоставить пользователю sftp. Но шелл ему я давать не хочу, как и возможность смотреть, что лежит вне его домашней дериктории.

Пишу в конфиге sshd так:

AllowUsers www-data

Match User www-data
        ChrootDirectory /var/www
        ForceCommand /usr/lib/openssh/sftp-server

Даю пользователю www-data пароль, меняю ему в /etc/passwd шелл с nologin на bash. Перезапускаю sshd.

Пытаюсь залогиниться с удалённой машины:

obey@damntux ~ % sftp www-data@somedomain.ru
Connecting to somedomain.ru...
www-data@somedomain.ru's password:
subsystem request failed on channel 0
Couldn't read packet: Connection reset by peer

В логах openssh на сервере:

Oct 12 21:02:03 somedomain sshd[529]: error writing /proc/self/oom_adj: Operation not permitted
Oct 12 21:02:04 somedomain sshd[529]: Accepted password for www-data from 78.123.123.123 port 54537 ssh2

Если убрать ChrootDirectory, то всё работает.

Как быть?

★★★★★

Конфиг целиком:

# Package generated configuration file    
# See the sshd(8) manpage for details     

# What ports, IPs and protocols we listen for
Port 22                                      
# Use these options to restrict which interfaces/protocols sshd will bind to
#ListenAddress ::                                                           
#ListenAddress 0.0.0.0                                                      
Protocol 2                                                                  
# HostKeys for protocol version 2                                           
HostKey /etc/ssh/ssh_host_rsa_key                                           
HostKey /etc/ssh/ssh_host_dsa_key                                           
#Privilege Separation is turned on for security                             
UsePrivilegeSeparation yes                                                  

# Lifetime and size of ephemeral version 1 server key
KeyRegenerationInterval 3600                         
ServerKeyBits 768                                    

# Logging
SyslogFacility AUTH
LogLevel INFO      

# Authentication:
LoginGraceTime 120
PermitRootLogin no
StrictModes yes   

RSAAuthentication yes
PubkeyAuthentication yes
#AuthorizedKeysFile     %h/.ssh/authorized_keys

# Don't read the user's ~/.rhosts and ~/.shosts files
IgnoreRhosts yes                                     
# For this to work you will also need host keys in /etc/ssh_known_hosts
RhostsRSAAuthentication no                                             
# similar for protocol version 2                                       
HostbasedAuthentication no                                             
# Uncomment if you don't trust ~/.ssh/known_hosts for RhostsRSAAuthentication
#IgnoreUserKnownHosts yes                                                    

# To enable empty passwords, change to yes (NOT RECOMMENDED)
PermitEmptyPasswords no                                     

# Change to yes to enable challenge-response passwords (beware issues with
# some PAM modules and threads)                                           
ChallengeResponseAuthentication no                                        

# Change to no to disable tunnelled clear text passwords
#PasswordAuthentication yes                             

# Kerberos options
#KerberosAuthentication no
#KerberosGetAFSToken no   
#KerberosOrLocalPasswd yes
#KerberosTicketCleanup yes

# GSSAPI options
#GSSAPIAuthentication no
#GSSAPICleanupCredentials yes

X11Forwarding no
X11DisplayOffset 10
PrintMotd no
PrintLastLog yes
TCPKeepAlive yes
#UseLogin no

#MaxStartups 10:30:60
#Banner /etc/issue.net

# Allow client to pass locale environment variables
AcceptEnv LANG LC_*

Subsystem sftp /usr/lib/openssh/sftp-server

UsePAM yes

AllowUsers www-data

Match User www-data
        ChrootDirectory /var/www
        ForceCommand /usr/lib/openssh/sftp-server

Obey-Kun ★★★★★
() автор топика
Ответ на: комментарий от SANTA_CLAUS

>Ну а в чрутной директории все подкаталоги созданы
конечно же только необходимые :)

SANTA_CLAUS ★★
()
Ответ на: комментарий от SANTA_CLAUS

Как мне казалось, chroot'у по sftp этого не нужно.

Но раз оно действительно нужно, тогда лучше vsftpd прикручу. У него jail не такой требовательный. Тогда sshd можно будет удалить вообще с виртуалки.

Obey-Kun ★★★★★
() автор топика
Ответ на: комментарий от Obey-Kun

>Как мне казалось, chroot'у по sftp этого не нужно.
я так понимаю, если прога подгружает все нужные файлы и библиотеки, а потом чрутится, то ей не нужно потом что-то дополнительное

dimon555 ★★★★★
()

Я процитирую man sshd_config:

ChrootDirectory Specifies a path to chroot(2) to after authentication. This path, and all its components, must be root-owned directories that are not writable by any other user or group.

The path may contain the following tokens that are expanded at runtime once the connecting user has been authenticated: %% is replaced by a literal '%', %h is replaced by the home directory of the user being authenticated, and %u is replaced by the username of that user.

The ChrootDirectory must contain the necessary files and directories to support the users' session. For an interactive session this requires at least a shell, typically sh(1), and basic /dev nodes such as null(4), zero(4), stdin(4), stdout(4), stderr(4), arandom(4) and tty(4) devices. For file trans‐ fer sessions using “sftp”, no additional configuration of the environment is necessary if the in- process sftp server is used (see Subsystem for details).

The default is not to chroot(2).

Обращаем внимание на предпоследний абзац и включаем «in-process sftp server»

Вот как выглядит мой конфиг для sftp:

Port 22
Protocol 2
PermitRootLogin no
PubkeyAuthentication yes
AuthorizedKeysFile	.ssh/authorized_keys
HostbasedAuthentication no
PasswordAuthentication no
PermitEmptyPasswords no
UsePAM yes
GatewayPorts yes
Subsystem sftp internal-sftp
Match User someuser
    X11Forwarding no
    AllowTcpForwarding no
    ChrootDirectory %h
    ForceCommand internal-sftp
$ ls -ld /home/someuser/
drwxr-x--- 9 root someusergroup 4096 2009-09-25 03:17 /home/someuser/
Nao ★★★★★
()
Ответ на: комментарий от Obey-Kun

>Как мне казалось, chroot'у по sftp этого не нужно.

>Но раз оно действительно нужно, тогда лучше vsftpd прикручу. У него jail не такой требовательный. Тогда sshd можно будет удалить вообще с виртуалки.


Если используется internal-sftp то не нужно. Подробности выше и в man sshd_config

Nao ★★★★★
()

Обратите внимание, что /var и /var/www должны быть доступны на запись только руту. Паранойя такая паранойя (:

anarquista ★★★★★
()
Ответ на: комментарий от Nao

Так вот оно что!

Заменил sftp-server на internal-sftp и всё запахало.

#Subsystem sftp /usr/lib/openssh/sftp-server
Subsystem sftp internal-sftp

Match User www-data
        ChrootDirectory %h
#       ForceCommand /usr/lib/openssh/sftp-server
        ForceCommand internal-sftp

Obey-Kun ★★★★★
() автор топика
Ответ на: комментарий от anarquista

а /var -то почему? Хотя это нормально, вообще сказать :).

Obey-Kun ★★★★★
() автор топика
Ответ на: комментарий от Nao

Ё-моё. А нафига пользователю директория, если он в ней новые файлы создавать не сможет? Тут 2 варианта — или переместить директорию с сайтов на 1 уровень ниже, или таки не париться и заюзать ftpd. Вот мне интересно, что секьюрнее — ftp+chroot (и полное отсутствие SSH-сервера) или sftp+chroot...

Obey-Kun ★★★★★
() автор топика
Ответ на: комментарий от Obey-Kun

В принципе ведь логин и пароль и там и там передаются в зашифрованном виде, а вот сами данные в случае FTP не шифруются... Но чхать на данные, это ж сайт — даже если и утечёт что-нибудь (например, пароль к базе мускля, который прописан в открытом виде в настройках сайта), то никак это использовать нельзя будет.

Вот что бы вы выбрали? :)

Obey-Kun ★★★★★
() автор топика
Ответ на: комментарий от Obey-Kun

> В принципе ведь логин и пароль и там и там передаются в зашифрованном виде

С чего это вдруг FTP будет передавать пароль в зашифрованном виде? Разве что FTP керберизован...

bigbit ★★★★★
()
Ответ на: комментарий от Obey-Kun

Пользователи должны пользоваться домашней директорией.

anonymous
()
Вы не можете добавлять комментарии в эту тему. Тема перемещена в архив.