Разработка алгоритма и критика безопасности: синхронизация учетных записей веб-сайта с системными учетными записями - PullRequest
0 голосов
/ 12 июля 2010

Я пишу некоторое программное обеспечение на Ruby on Rails для простого управления пользователями для входа на наш сервер. Я работаю над методом для контроллера пользователя, который позволит пользователю изменять свой пароль на сервере (логин FTP / веб-сайта). Я хотел бы, чтобы администрирование паролей сервера осуществлялось через веб-сайт, и для этого я разработал следующий алгоритм.

- User logs into website, and indicates a change of password is desired using
  current login password, and enters new password (with confirmation)
- Rails user.rb model file has algorithm which establishes read/write with a 
  program tty (via 'PTY.spawn' and 'expect').  This happens as user www-data.
- First command issued to the PTY is `su <username>`, enter current system password. 
- Next, send `passwd`, wait for password prompt and pass current password.
- Wait for 'new password' and send desired password.
- again for confirmation of password.
- As long as none of the 'expect' statements fail (including 'password updated
  successfully'), salt and hash the password and store it in the database as normal.

Я достаточно уверен, что это безопасный метод синхронизации паролей системной учетной записи. Но опять же .... Я не хакер или эксперт по безопасности. Это не публично открытая система, но есть множество пользователей, которые будут иметь доступ к системе.

Первый вопрос: есть ли более разумный способ сделать это? Может быть, через PAM? Я лично использовал Linux много лет, но мой опыт администрирования ограничен. На сервере работает Debian или Ubuntu Server, nginx и несколько экземпляров rails.

Второй вопрос: как мне работать с функцией «сброса» пароля в системе? Это, очевидно, требует root-доступа и будет выглядеть примерно так:

- Verify user by other means (email, administrator, whatev)
- su root or sudo -s (uhhhmmm....?!)
- passwd <username>
- set to generated value
- force user to change password @ next login

На первый взгляд, это кажется менее безопасным. Рут доступ и такое. Но я не могу найти способ обойти это без личного администратора sudo passwd <username> каждый раз, когда пользователь забывает свой пароль ... более того, я не хочу, чтобы мое приложение rails имело root-доступ к системе. .... он работает от имени другого пользователя по причине. Поэтому я предполагаю, что это означает, что мне нужно настроить корневой cron, который запускает задачу rake для поиска паролей, которые необходимо сбросить ....

В моей пользовательской модели я также занимаюсь другими вещами, такими как мониторинг дискового пространства:

def update_disk_usage
  home_dir =~ /\A((\w|[._0-9-])*)(.*)\Z/
  #runs as www-data
  home_dir_size = `/usr/bin/du -cs /home/#{$1} | grep total | awk '{print $1}'`
  self.quota = home_dir_size.to_i
  self.quota_checked = Time.now
  self.quota
end

1 Ответ

0 голосов
/ 12 июля 2010

В примере кода в конце поста вы неправильно экранировали ввод.Это очень чувствительная операция, и некорректный ввод пользователя может привести к удаленному выполнению кода.Вы должны использовать функцию Escape.shell_command () .

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...