blob: 9482efe9e7a41ef1808c6bfc8cc8f8bd296bb7cb [file] [log] [blame]
Ben Lindstromb100ec92001-01-19 05:37:32 +00001#!/bin/sh
2#
Darren Tucker798ca842003-11-13 11:28:49 +11003# ssh-user-config, Copyright 2000, 2001, 2002, 2003, Red Hat Inc.
Ben Lindstromb100ec92001-01-19 05:37:32 +00004#
5# This file is part of the Cygwin port of OpenSSH.
6
Darren Tucker798ca842003-11-13 11:28:49 +11007# Directory where the config files are stored
8SYSCONFDIR=/etc
9
Ben Lindstromb100ec92001-01-19 05:37:32 +000010progname=$0
11auto_answer=""
12auto_passphrase="no"
13passphrase=""
14
15request()
16{
17 if [ "${auto_answer}" = "yes" ]
18 then
19 return 0
20 elif [ "${auto_answer}" = "no" ]
21 then
22 return 1
23 fi
24
25 answer=""
26 while [ "X${answer}" != "Xyes" -a "X${answer}" != "Xno" ]
27 do
28 echo -n "$1 (yes/no) "
29 read answer
30 done
31 if [ "X${answer}" = "Xyes" ]
32 then
33 return 0
34 else
35 return 1
36 fi
37}
38
Darren Tucker798ca842003-11-13 11:28:49 +110039# Check if running on NT
40_sys="`uname -a`"
41_nt=`expr "$_sys" : "CYGWIN_NT"`
42# If running on NT, check if running under 2003 Server or later
43if [ $_nt -gt 0 ]
44then
45 _nt2003=`uname | awk -F- '{print ( $2 >= 5.2 ) ? 1 : 0;}'`
46fi
47
Ben Lindstromb100ec92001-01-19 05:37:32 +000048# Check options
49
50while :
51do
52 case $# in
53 0)
54 break
55 ;;
56 esac
57
58 option=$1
59 shift
60
61 case "$option" in
62 -d | --debug )
63 set -x
64 ;;
65
66 -y | --yes )
67 auto_answer=yes
68 ;;
69
70 -n | --no )
71 auto_answer=no
72 ;;
73
74 -p | --passphrase )
75 with_passphrase="yes"
76 passphrase=$1
77 shift
78 ;;
79
80 *)
81 echo "usage: ${progname} [OPTION]..."
82 echo
83 echo "This script creates an OpenSSH user configuration."
84 echo
85 echo "Options:"
86 echo " --debug -d Enable shell's debug output."
87 echo " --yes -y Answer all questions with \"yes\" automatically."
88 echo " --no -n Answer all questions with \"no\" automatically."
89 echo " --passphrase -p word Use \"word\" as passphrase automatically."
90 echo
91 exit 1
92 ;;
93
94 esac
95done
96
97# Ask user if user identity should be generated
98
Darren Tucker798ca842003-11-13 11:28:49 +110099if [ ! -f ${SYSCONFDIR}/passwd ]
Ben Lindstromb100ec92001-01-19 05:37:32 +0000100then
Darren Tucker798ca842003-11-13 11:28:49 +1100101 echo "${SYSCONFDIR}/passwd is nonexistant. Please generate an ${SYSCONFDIR}/passwd file"
Ben Lindstromb100ec92001-01-19 05:37:32 +0000102 echo 'first using mkpasswd. Check if it contains an entry for you and'
103 echo 'please care for the home directory in your entry as well.'
104 exit 1
105fi
106
107uid=`id -u`
Darren Tucker798ca842003-11-13 11:28:49 +1100108pwdhome=`awk -F: '{ if ( $3 == '${uid}' ) print $6; }' < ${SYSCONFDIR}/passwd`
Ben Lindstromb100ec92001-01-19 05:37:32 +0000109
110if [ "X${pwdhome}" = "X" ]
111then
Darren Tucker798ca842003-11-13 11:28:49 +1100112 echo "There is no home directory set for you in ${SYSCONFDIR}/passwd."
Ben Lindstromb100ec92001-01-19 05:37:32 +0000113 echo 'Setting $HOME is not sufficient!'
114 exit 1
115fi
116
117if [ ! -d "${pwdhome}" ]
118then
Darren Tucker798ca842003-11-13 11:28:49 +1100119 echo "${pwdhome} is set in ${SYSCONFDIR}/passwd as your home directory"
Ben Lindstromb100ec92001-01-19 05:37:32 +0000120 echo 'but it is not a valid directory. Cannot create user identity files.'
121 exit 1
122fi
123
124# If home is the root dir, set home to empty string to avoid error messages
125# in subsequent parts of that script.
126if [ "X${pwdhome}" = "X/" ]
127then
128 # But first raise a warning!
Darren Tucker798ca842003-11-13 11:28:49 +1100129 echo "Your home directory in ${SYSCONFDIR}/passwd is set to root (/). This is not recommended!"
Ben Lindstromb100ec92001-01-19 05:37:32 +0000130 if request "Would you like to proceed anyway?"
131 then
132 pwdhome=''
133 else
134 exit 1
135 fi
136fi
137
Darren Tucker798ca842003-11-13 11:28:49 +1100138if [ -d "${pwdhome}" -a $_nt -gt 0 -a -n "`chmod -c g-w,o-w "${pwdhome}"`" ]
139then
140 echo
141 echo 'WARNING: group and other have been revoked write permission to your home'
142 echo " directory ${pwdhome}."
143 echo ' This is required by OpenSSH to allow public key authentication using'
144 echo ' the key files stored in your .ssh subdirectory.'
145 echo ' Revert this change ONLY if you know what you are doing!'
146 echo
147fi
148
Ben Lindstromb100ec92001-01-19 05:37:32 +0000149if [ -e "${pwdhome}/.ssh" -a ! -d "${pwdhome}/.ssh" ]
150then
151 echo "${pwdhome}/.ssh is existant but not a directory. Cannot create user identity files."
152 exit 1
153fi
154
155if [ ! -e "${pwdhome}/.ssh" ]
156then
157 mkdir "${pwdhome}/.ssh"
158 if [ ! -e "${pwdhome}/.ssh" ]
159 then
160 echo "Creating users ${pwdhome}/.ssh directory failed"
161 exit 1
162 fi
163fi
164
Darren Tucker798ca842003-11-13 11:28:49 +1100165if [ $_nt -gt 0 ]
166then
167 _user="system"
168 if [ $_nt2003 -gt 0 ]
169 then
170 grep -q '^sshd_server:' ${SYSCONFDIR}/passwd && _user="sshd_server"
171 fi
172 if ! setfacl -m "u::rwx,u:${_user}:r--,g::---,o::---" "${pwdhome}/.ssh"
173 then
174 echo "${pwdhome}/.ssh couldn't be given the correct permissions."
175 echo "Please try to solve this problem first."
176 exit 1
177 fi
178fi
179
Ben Lindstromb100ec92001-01-19 05:37:32 +0000180if [ ! -f "${pwdhome}/.ssh/identity" ]
181then
182 if request "Shall I create an SSH1 RSA identity file for you?"
183 then
184 echo "Generating ${pwdhome}/.ssh/identity"
185 if [ "${with_passphrase}" = "yes" ]
186 then
187 ssh-keygen -t rsa1 -N "${passphrase}" -f "${pwdhome}/.ssh/identity" > /dev/null
188 else
189 ssh-keygen -t rsa1 -f "${pwdhome}/.ssh/identity" > /dev/null
190 fi
191 if request "Do you want to use this identity to login to this machine?"
192 then
193 echo "Adding to ${pwdhome}/.ssh/authorized_keys"
194 cat "${pwdhome}/.ssh/identity.pub" >> "${pwdhome}/.ssh/authorized_keys"
195 fi
196 fi
197fi
198
199if [ ! -f "${pwdhome}/.ssh/id_rsa" ]
200then
Darren Tuckera841dce2005-10-25 18:55:00 +1000201 if request "Shall I create an SSH2 RSA identity file for you?"
Ben Lindstromb100ec92001-01-19 05:37:32 +0000202 then
203 echo "Generating ${pwdhome}/.ssh/id_rsa"
204 if [ "${with_passphrase}" = "yes" ]
205 then
206 ssh-keygen -t rsa -N "${passphrase}" -f "${pwdhome}/.ssh/id_rsa" > /dev/null
207 else
208 ssh-keygen -t rsa -f "${pwdhome}/.ssh/id_rsa" > /dev/null
209 fi
210 if request "Do you want to use this identity to login to this machine?"
211 then
Darren Tucker49d32562003-08-22 18:43:48 +1000212 echo "Adding to ${pwdhome}/.ssh/authorized_keys"
213 cat "${pwdhome}/.ssh/id_rsa.pub" >> "${pwdhome}/.ssh/authorized_keys"
Ben Lindstromb100ec92001-01-19 05:37:32 +0000214 fi
215 fi
216fi
217
218if [ ! -f "${pwdhome}/.ssh/id_dsa" ]
219then
Darren Tuckera841dce2005-10-25 18:55:00 +1000220 if request "Shall I create an SSH2 DSA identity file for you?"
Ben Lindstromb100ec92001-01-19 05:37:32 +0000221 then
222 echo "Generating ${pwdhome}/.ssh/id_dsa"
223 if [ "${with_passphrase}" = "yes" ]
224 then
225 ssh-keygen -t dsa -N "${passphrase}" -f "${pwdhome}/.ssh/id_dsa" > /dev/null
226 else
227 ssh-keygen -t dsa -f "${pwdhome}/.ssh/id_dsa" > /dev/null
228 fi
229 if request "Do you want to use this identity to login to this machine?"
230 then
Darren Tucker49d32562003-08-22 18:43:48 +1000231 echo "Adding to ${pwdhome}/.ssh/authorized_keys"
232 cat "${pwdhome}/.ssh/id_dsa.pub" >> "${pwdhome}/.ssh/authorized_keys"
Ben Lindstromb100ec92001-01-19 05:37:32 +0000233 fi
234 fi
235fi
236
Darren Tucker798ca842003-11-13 11:28:49 +1100237if [ $_nt -gt 0 -a -e "${pwdhome}/.ssh/authorized_keys" ]
238then
239 if ! setfacl -m "u::rw-,u:${_user}:r--,g::---,o::---" "${pwdhome}/.ssh/authorized_keys"
240 then
241 echo
242 echo "WARNING: Setting correct permissions to ${pwdhome}/.ssh/authorized_keys"
243 echo "failed. Please care for the correct permissions. The minimum requirement"
244 echo "is, the owner and ${_user} both need read permissions."
245 echo
246 fi
247fi
248
Ben Lindstromb100ec92001-01-19 05:37:32 +0000249echo
250echo "Configuration finished. Have fun!"