Viết Bash Script này để chấp nhận đối số?


0

Làm thế nào tôi có thể chuyển đổi tập lệnh bash này:

mkdir /store/sftp/%USERNAME%

sudo useradd -d /incoming %USERNAME%
sudo passwd %USERNAME%
## Password needs to be typed or passed in here
sudo usermod -g sftp %USERNAME%
sudo usermod -s /bin/false %USERNAME%

sudo chmod 755 /store/sftp/%USERNAME%
sudo chown root:root /store/sftp/%USERNAME%
sudo mkdir /store/sftp/%USERNAME%/incoming
sudo chown %USERNAME%:sftp /store/sftp/%USERNAME%/incoming

Để chấp nhận tên người dùng và mật khẩu?


1
Xin lưu ý rằng các đối số dòng lệnh thường có thể được nhìn thấy bởi những người dùng khác trên hệ thống.
coneslayer

Đúng, nhưng đây là một môi trường khép kín, nơi chỉ quản trị viên mới có thể vào và tất cả người dùng khác đã bị "bỏ tù" vì mục đích SFTP.
Urda

Câu trả lời:


5

Đầu tiên, bạn nên tránh những sudocuộc gọi đó. Thay vào đó, bạn nên chạy script với sudo. Phiên bản cuối cùng sẽ như thế này:

#!/bin/bash

# first check for root user
if [ ! $UID -eq 0 ]; then
    echo "This script must be run as root."
    exit 1
fi

# check if the user provided an argument
if [ -z $1 ]; then
    echo "No username provided. Usage: $0 username"
    exit 2
fi 

username=$1 # set the first argument as the username

mkdir "/store/sftp/$username"

useradd -d /incoming "$username"
passwd "$username"
## Password needs to be typed or passed in here
usermod -g sftp "$username"
usermod -s /bin/false "$username"

chmod 755 "/store/sftp/$username"
mkdir "/store/sftp/$username/incoming"
chown "$username:sftp" "/store/sftp/$username/incoming"

Trích dẫn là cần thiết vì tên người dùng có thể chứa khoảng trắng (nhưng chắc chắn, nó thường không có).

Chỉnh sửa để làm việc.


Hoạt động tuyệt vời! Dù sao để ngăn chặn tập lệnh chạy nếu không có người dùng được cung cấp?
Urda

2
if [ -z $1 ]; then echo "No username provided. Usage: $0 username"; exit 2; fi
Dennis Williamson

1
echo "blah" >&2để có thêm điểm cho việc stderrsử dụng thích hợp .
grawity
Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.