samba
공유 디렉토리를 설정하기 위해 쉘 스크립트를 사용하여 비밀번호를 설정하고 싶습니다 . 나는 다음 스크립트를 작성했습니다 test.sh
.
#!/bin/bash
pass=123456
(echo "$pass"; echo "$pass") | smbpasswd -s -a $(whoami)
그러면 다음이 인쇄됩니다:
When run by root:
smbpasswd [options] [username]
otherwise:
smbpasswd [options]
options:
-L local mode (must be first option)
-h print this usage message
-s use stdin for password prompt
-c smb.conf file Use the given path to the smb.conf file
-D LEVEL debug level
-r MACHINE remote machine
-U USER remote username
extra options when run by root or in local mode:
-a add user
-d disable user
-e enable user
-i interdomain trust account
-m machine trust account
-n set no password
-W use stdin ldap admin password
-w PASSWORD ldap admin password
-x delete user
-R ORDER name resolve order
지적했듯이 루트로 실행하는 것이 아니라 루트로 실행하면 sudo ./test.sh
제대로 작동합니다. 하지만 문제는 내가 로그인한 사용자인 을 root
대신 추가한다는 것입니다.noobuser
이런 식으로 어떻게 noobuser
추가할 수 있나요(여기서 뭔가 빠진 것 같은 느낌이 듭니다)?
답변1
테스트.sh:
#!/bin/bash
pass=123456
if [ -z "$SUDO_USER" ]; then
echo "This script is only allowed to run from sudo";
exit -1;
fi
(echo "$pass"; echo "$pass") | smbpasswd -s -a "$SUDO_USER"
옮기다:
sudo ./test.sh
답변2
다음은 bash 스크립트를 통해 자동화하는 방법에 대한 스니펫 smbpasswd -a
이며 매력적으로 작동합니다.
username="bob"
pass="secret"
echo -e "$pass\n$pass" | smbpasswd -a -s $username
이것은 확장되어 현재 사용자 이름을 삽입합니다. (awk가 없으면 더 짧고 깨끗합니다)
pass="secret"
echo -e "$pass\n$pass" | smbpasswd -a -s $(id -un)
.
자세한 내용은 아래에서 확인하세요.
.
에코-e
-e 옵션을 사용하면 \t로 표시되는 가로 탭과 같은 다른 특수 문자 및 개행 문자의 다른 인스턴스에 대한 echo의 해석이 가능해집니다.
파이프 기호 "|"
Unix 계열 컴퓨터 운영 체제에서 파이프는 메시지 전달을 사용하는 프로세스 간 통신을 위한 메커니즘입니다.
https://en.wikipedia.org/wiki/Pipeline_(유닉스)
https://superuser.com/questions/756158/what-does-the-linux-pipe-symbol-do
크레딧은 다음과 같습니다.로렌스 C, 위키피디아
smbpasswd-s
-s 옵션을 사용하면 smbpasswd가 자동으로 실행되고(즉, 프롬프트를 표시하지 않음) (passwd(1) 프로그램과 마찬가지로) /dev/tty에서 읽는 대신 표준 입력에서 이전 암호와 새 암호를 읽습니다. 이 옵션은 사람들이 smbpasswd를 구동하는 스크립트를 작성하는 데 도움이 됩니다.
이드운
id
지정된 사용자의 시스템 ID를 표시합니다.산출:
uid=0(root) gid=0(root) grupy=0(root),1(bin),2(daemon),3(sys),4(adm),6(disk),10(wheel)
UID/GID 대신 이름 표시
기본적으로 id 명령은 -G, -g 및 -u 옵션의 번호를 표시합니다. 다음과 같이 -n 옵션을 전달하여 -G, -g 및 -u 옵션을 사용하여 id 명령에 숫자 대신 UID 또는 GID의 이름을 표시하도록 강제할 수 있습니다.
id -ng {UserNameHere} id -nu {UserNameHere} id -nG {UserNameHere} id -nG vivek
다음에 대해 자세히 알아보세요
id
.https://www.cyberciti.biz/faq/unix-linux-id-command-examples-usage-syntax/크레딧은 다음과 같습니다.브렛(해결책),비벡 게이트(깊이 정보)
문제가 있을 때의 팁(신용:폴):https://superuser.com/a/343163/1169381
답변3
매개변수를 스크립트에 전달하고 싶지 않다면 다음을 시도해 보세요.
#!/bin/bash
pass=123456
echo $pass
echo $pass | smbpasswd -s -a $(who am i | awk '{print $1}')
그런 다음 스크립트를 호출합니다.
답변4
다음 내용으로 smb.sh 파일 이름을 만들고 있습니다.
#!/bin/bash
mkdir /home/user_data/$1
#add owner
chown -R $1 /home/user_data/$1
#owner only
chmod -R 700 /home/user_data/$1
user=$1
pass=$2
#sleep 3
smbpasswd -a $user<<EOF
$pass
$pass
EOF
다음과 같이 smb.sh에 매개변수를 보낼 수 있습니다.
./smb.sh myusername mypassword
매우 간단합니다. PHP 언어의 smb.sh 파일을 사용하고 PHP exec 함수를 사용할 수 있습니다.