Nur-Ein-Blogger
Anmeldungsdatum: 4. April 2011
Beiträge: 146
|
Hallo, ich schreibe derzeit ein kleines Bash Script, welches einen FTP Server nachinstalliert. Einfach weil es Spaß macht. So, nun bin ich aber an dem Punkt, wo ich nicht weiß ich wie das Ohne Usereingabe machen kann:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26 |
#generate a password
userpass=$(date +%s|sha256sum|base64|head -c 32)
#create user
adduser mywebsite
#edit file for user
#/etc/passwd
#Create group for ftp
groupadd wwwftp
#user into group
usermod -g wwwftp mywebsite
#
chown -R www-data:wwwftp /var/www
#
chmod -R 775 /var/www
#
systemctl -q restart vsftpd
|
Bei adduser wird ja nach einigen Daten gefragt. Dabei auch das Passwort. Das Password würde ich gern generieren lassen. Kann mir da wer den Weg weisen?
|
senden9
Anmeldungsdatum: 8. Februar 2010
Beiträge: 965
Wohnort: Österreich
|
Hi. Auszug aus der Manpage zu adduser.
adduser will copy files from SKEL into the home directory and prompt for finger (gecos) information and a password. The
gecos may also be set with the --gecos option. With the --disabled-login option, the account will be created but will be
disabled until a password is set. The --disabled-password option will not set a password, but login is still possible (for
example with SSH RSA keys). To set up an encrypted home directory for the new user, add the --encrypt-home option. For
more information, refer to the -b option of ecryptfs-setup-private(1).
Hilft das schon weiter oder brauchst du noch ausführlicher schritte oder gar Codeschnipsel? Für das Passwort könntest du dir hier etwas abschauen. Aber bitte verwende keine Methode die auf „date“ basiert. Das wäre aus sicherheitstechnischer Sicht ein Albtraum.
|
misterunknown
Ehemalige
Anmeldungsdatum: 28. Oktober 2009
Beiträge: 4403
Wohnort: Sachsen
|
Nur-Ein-Blogger schrieb: Kann mir da wer den Weg weisen?
useradd:
$ useradd -m <username>
Optionen:
-m Homeverzeichnis anlegen (/home/<username>)
-M kein Homeverzeichnis anlegen (in Verbindung mit -d)
-d <pfad> Homeverzeichnis festlegen
-s <shell> Shell für den User festlegen
Weitere Optionen findest du in der manpage von useradd.
|
Nur-Ein-Blogger
(Themenstarter)
Anmeldungsdatum: 4. April 2011
Beiträge: 146
|
Ah, okay danke für die Seite und den Tipp. Da werde ich bestimmt noch einiges lernen können. Ich denke, so sollte oder könnte es dann aussehen:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17 | #Create group for ftp
groupadd wwwftp
#create user
useradd mywebsite -M -p $userpass -d /etc/nginx/html -U wwwftp
#edit file for user
/etc/passwd
#
chown -R www-data:wwwftp /etc/nginx/htm
#
chmod -R 775 /etc/nginx/htm
#
systemctl -q restart vsftpd
|
|
misterunknown
Ehemalige
Anmeldungsdatum: 28. Oktober 2009
Beiträge: 4403
Wohnort: Sachsen
|
Nur-Ein-Blogger schrieb: | #create user
useradd mywebsite -M -p $userpass -d /etc/nginx/html -U wwwftp
|
Das funktioniert so nicht. -p erwartet ein gecryptetes Passwort. Es ginge so:
| useradd mywebsite -M -p $(echo ${userpass} | mkpasswd -s) -d /etc/nginx/html -U wwwftp
|
Nur-Ein-Blogger schrieb: #edit file for user
/etc/passwd
Was genau soll das bewirken? Das Skript wird hier einen Fehler ausgeben.
|
Nur-Ein-Blogger
(Themenstarter)
Anmeldungsdatum: 4. April 2011
Beiträge: 146
|
Danke für die Antwort und die Hilfe ☺ das hatte ich vergessen aus zu kommentieren. Ich versuche das Tutorial hier nach zu bauen:
https://forum.netcup.de/administration-eines-server-vserver/vserver-server-kvm-server/8127-ftp-server-installieren-ubuntu-14-04 Allgemein, bin ich derzeit so weit:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191 | # version?
VSFTPD_VERSION="3.0.3"
#i check the ip for you
ip=$(hostname -I)
userpass=$(date +%s|sha256sum|base64|head -c 32)
#--------------------------Testing area--------------------------
echo $ip
echo "---------------"
echo $userpass
exit 1
#--------------------------Testing area--------------------------
# Some nice colors
cyan() { echo "$(tput setaf 6)$*$(tput setaf 9)"; }
textb() { echo $(tput bold)${1}$(tput sgr0); }
greenb() { echo $(tput bold)$(tput setaf 2)${1}$(tput sgr0); }
redb() { echo $(tput bold)$(tput setaf 1)${1}$(tput sgr0); }
yellowb() { echo $(tput bold)$(tput setaf 3)${1}$(tput sgr0); }
pinkb() { echo $(tput bold)$(tput setaf 5)${1}$(tput sgr0); }
# Some nice variables
info="$(textb [INFO] -)"
warn="$(yellowb [WARN] -)"
error="$(redb [ERROR] -)"
fyi="$(pinkb [INFO] -)"
ok="$(greenb [OKAY] -)"
# let me, i need it to create backupfolder
date=$(date +%d-%m-%y-%h-%m)
echo
echo "$(yellowb +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+)"
echo " $(textb Perfect) $(textb Rootserver) $(textb VSFTPD) $(textb by)" "$(cyan TakeThisBitch / Shoujii)"
echo "$(yellowb +-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+)"
echo
# ---------------------------------------------------------------------------------------- #
########################### ARE YOU Admin?
# ---------------------------------------------------------------------------------------- #
if [[ $EUID -ne 0 ]]; then
echo "${error} This script must be run as root User" | awk '{ print strftime("[%H:%M:%S] |"), $0 }'
fi
# ---------------------------------------------------------------------------------------- #
########################### ARE YOU sure?
# ---------------------------------------------------------------------------------------- #
read -p "This Script install the VSFTPD, are you sure? <y/N> " prompt
if [[ $prompt == "y" || $prompt == "Y" || $prompt == "yes" || $prompt == "Yes" ]]
then
echo "${ok} Okay, here we go. Please be patient with me." | awk '{ print strftime("[%H:%M:%S] |"), $0 }'
cd
apt-get -y install vsftpd
openssl req -x509 -nodes -days 365 -newkey rsa:1024 -keyout /etc/ssl/private/vsftpd.pem -out /etc/ssl/private/vsftpd.pem
rm -rf /etc/vsftpd.conf
cat > /etc/vsftpd.conf <<END
# Run standalone vs. from an inetd – start daemon from an initscript
listen=YES
#
# Disallow anonymous FTP.
anonymous_enable=NO
#
# Allow local users to log in.
local_enable=YES
#
# Allow per-user configuration for local users.
user_config_dir=/etc/vsftpd_user_conf
#
# Enable FTP write commands – controlled with cmds_allowed list.
write_enable=YES
#
# Don’t allow recursive listing – prevents excessive I/O usage.
ls_recurse_enable=NO
#
# Activate directory messages - messages given to remote users when they
# go into a certain directory.
dirmessage_enable=YES
#
# Display directory listings with the time in your local time zone.
# Default is to display GMT.
use_localtime=YES
#
# Activate logging of uploads/downloads, but not in xferlog format
xferlog_enable=YES
xferlog_std_format=NO
log_ftp_protocol=YES
#
# Make sure PORT transfer connections originate from port 20 (ftp-data).
connect_from_port_20=YES
#
# Uploaded files are owned by the uploader.
chown_uploads=NO
#
# Default log – enable and change for custom location/name
xferlog_file=/var/log/vsftpd.log
#
# You may change the default value for timing out an idle session.
idle_session_timeout=600
#
# You may change the default value for timing out a data connection.
data_connection_timeout=120
#
# Don’t allow ASCII mangling on files when in ASCII mode.
# ASCII mangling is a horrible feature of the protocol.
ascii_upload_enable=NO
ascii_download_enable=NO
#
# Customize the login banner string:
ftpd_banner=Welcome to our FTP service.
#
# Customization
#
# Some of vsftpd's default settings don't fit the filesystem layout.
#
# Empty directory which isn’t writable by the ftp user. This directory is used
# as a secure chroot() jail when vsftpd does not require filesystem access.
secure_chroot_dir=/var/run/vsftpd/empty
#
# This string is the name of the PAM service vsftpd will use.
pam_service_name=vsftpd
#
# Location of the RSA certificate to use for SSL encrypted connections.
rsa_cert_file=/etc/ssl/private/vsftpd.pem
#
# Allow PASV (passive ftp)
pasv_enable=YES
pasv_min_port=12000
pasv_max_port=12500
port_enable=YES
# enter your IP address on the line below – example: 184.37.445.210
pasv_address=$IP
pasv_addr_resolve=NO
#####################################################
listen_ipv6=NO
nopriv_user=www-data
chroot_local_user=YES
allow_writeable_chroot=YES
#rsa_private_key_file=/etc/ssl/private/vsftpd.pem
ssl_enable=NO
utf8_filesystem=YES
######################################################
#
# set chmod correctly for apache, see
# http://en.gentoowiki.com/wiki/Vsftpd
file_open_mode=0666
# Default umask for local users is 077 – replace with 022
local_umask=0022
#
END
#Create group for ftp
groupadd wwwftp
#create user
useradd mywebsite -M -p $userpass -d /etc/nginx/html -U wwwftp
#edit file for user
/etc/passwd
#
chown -R www-data:wwwftp /etc/nginx/htm
#
chmod -R 775 /etc/nginx/htm
#
systemctl -q restart vsftpd
else
echo "${error} Okay, i calnced the installation. Nothing was to do." | awk '{ print strftime("[%H:%M:%S] |"), $0 }'
exit 1
fi
echo "${ok} Okay, all is done." | awk '{ print strftime("[%H:%M:%S] |"), $0 }'
|
|
senden9
Anmeldungsdatum: 8. Februar 2010
Beiträge: 965
Wohnort: Österreich
|
OK. Schauen wir nochmal was ich ein paar Zentimeter weiter oben geschrieben habe: senden9 schrieb: […] Für das Passwort könntest du dir hier etwas abschauen. Aber bitte verwende keine Methode die auf „date“ basiert. Das wäre aus sicherheitstechnischer Sicht ein Albtraum.
Und was du gemacht hast: Nur-Ein-Blogger schrieb: […]
userpass=$(date +%s|sha256sum|base64|head -c 32)
[…]
Damit baust du dir eine gigantische Sicherheitslücke ein. Wenn du dieses Skript verwendest kann dein Passwort innerhalb von wenigen Minuten gebrochen werden da es über einen kleinen eindimensionalen Raum deterministisch berechenbar ist. Das Passwort das du da heraus bekommst hat zwar 32 Stellen aber die Sicherheit eines alphanumerischen Passworts der Länge ~4.17 . Wenn überhaupt. Du nutzt nur ca 1.353410920747142e-48 Prozent von der 32 Zeichen aus. Also 0.000000000000000000000000000000000000000000000001353% des verfügbaren Zeichenraumes. Ich hoffe mit der kleinen Rechnung habe ich dir die Schwere deines Fehler deutlich machen können. (Angenommen ich habe mich nicht grob verrechnet. Was natürlich passieren kann.)
|
track
Anmeldungsdatum: 26. Juni 2008
Beiträge: 7174
Wohnort: Wolfen (S-A)
|
... oooch, die Geschichte mit date ist evtl. sogar noch heißer. 👿 - nämlich w_e_n_n auf irgend einem Wege bekannt ist:
das Skript, mit dem Du den User anlegst (und sei es, dass jemand es hier auf dem Forum oder auf Deinem Server lesen kann) _und_ die Uhrzeit, zu der Du das Skript hast laufen lassen (sei es anhand des Zeitstempels der Mail, oder von irgendeiner Datei die dabei angelegt wird)
d_a_n_n braucht man Deinen pw- Generator nur noch mit der betreffenden Zeit, ggf. variiert um einige Sekunden, durchlaufen zu lassen und bekommt die 2..10 Passworte, die dann noch in Frage kommen ! ... ist also eine echte Schein-Sicherheit. Das Mindeste, was Du machen solltest, ist: die Nanosekunden von date als Seed verwenden. (soferne die Dein System sie liefert: date +%N ) Dann hast Du theoretisch 109 Möglichkeiten. - und das reicht wahrscheinlich für den Moment. LG, track
|
senden9
Anmeldungsdatum: 8. Februar 2010
Beiträge: 965
Wohnort: Österreich
|
Da hat track recht. Wenn ich weiter eingrenzen kann wann der Benutzer anlegt wurde wird das ganze noch viel schlimmer. Ich bin jetzt nur mal von dem Fall ausgegangen das ich weiß das der Benutzer irgendwann im letzten Jahr angelegt wurde. Von der Erzeugung her sollte diese Variante relativ sicher sein:
| password=$(dd if=/dev/urandom bs=25 count=1 | base64)
|
|
Nur-Ein-Blogger
(Themenstarter)
Anmeldungsdatum: 4. April 2011
Beiträge: 146
|
| password==$(openssl rand -base64 30 | tr -d / | cut -c -24 | grep -P '(?=^.{8,255}$)(?=^[^\s]*$)(?=.*\d)(?=.*[A-Z])(?=.*[a-z])')
|
das ginge dann oder? ☺
|
track
Anmeldungsdatum: 26. Juni 2008
Beiträge: 7174
Wohnort: Wolfen (S-A)
|
Alles was auf $RANDOM und Kollegen basiert ist sowieso ok. Wenn Du sowieso schon openssl als Generator nimmst, dann sollte ein einfaches openssl rand -base64 24 | sed 's|/|_|' (das den "/" durch "_" ersetzt) reichen. - Was der ganze Zauber mit grep usw. soll, ist mir schleierhaft. Oder Du liest /dev/urandom direkt aus: head -c18 /dev/urandom | base64 | sed 's|/|_|' Aber wie gesagt, ein simples date +%N | md5sum würde auch schon völlig reichen, mit seiner 1 Mrd. ziemlich zufälliger Variationen. LG, track
|
Benno-007
Anmeldungsdatum: 28. August 2007
Beiträge: 29240
Wohnort: Germany
|
Was der ganze Zauber mit grep usw. soll, ist mir schleierhaft.
Halt "nett" vom Herren zusammenkopiert statt verstanden. 😈
|
Nur-Ein-Blogger
(Themenstarter)
Anmeldungsdatum: 4. April 2011
Beiträge: 146
|
Okay, ja. Hab es kapiert. Ist wirklich trixky, aber der Moment indem man versteht ist klasse 😀 ^^ | head /dev/urandom | tr -dc A-Za-z0-9 | head -c 50
|
damit würde ich z.B. ein passwort generieren,w elches aus A-Z,a-z und 0-9 besteht und 50 Zeichen lang ist. Generieren würde ich es so über /dev/urandom statt z.B. mit open ssl
|
Nur-Ein-Blogger
(Themenstarter)
Anmeldungsdatum: 4. April 2011
Beiträge: 146
|
Das mit dem User hinzufügen klappt noch nicht so ganz :/ | userpass=$(openssl rand -base64 30 | sed 's|/|_|')
#create user
useradd $FTP_USERNAME -M -p $(echo ${userpass} | mkpasswd -s) -d /etc/nginx/html -U wwwftp
|
Ergebnis:
test.sh: line 175: mkpasswd: command not found
|
track
Anmeldungsdatum: 26. Juni 2008
Beiträge: 7174
Wohnort: Wolfen (S-A)
|
Der Befehl mkpasswd liefert bei mir die Meldung: Die Anwendung »mkpasswd« ist momentan nicht installiert. Sie können sie durch folgende Eingabe installieren:
sudo apt-get install mkpasswd Was hast Du überhaupt mit diesem Befehl vor ? - denn offenbar erzeugt der ja noch einmal ein zufälliges Passwort. track
|